In [1]:
    
%pylab inline
import numpy as np
from scipy.optimize import curve_fit
    
    
In [2]:
    
# Load and plot data
xdata, ydata = np.loadtxt('IEprob.dist', comments='//', unpack=1)
plt.plot(xdata, ydata, 'ko', markersize=8);
plt.ylim(-5,105), plt.xlim (-10, 310)
plt.xlabel('Intersomatic distance ($\mu$m)');
plt.ylabel('Connectivity (%)');
    
    
In [3]:
    
# define the fitting function
def mymonoexp(x, Amp, tau):
    """
    solves for the following function:
    f(x; Amp, tau, c )= Amp * exp( -x/tau )
    
    where x is the independent variable
    Amp is the amplitude
    tau is the distance constant (1/ distance constant,tau)
    
    """
    return Amp*np.exp(-x/tau)
    
In [4]:
    
# plot a suggestion with data
x = np.linspace(0, 300, 100)
y = mymonoexp(x, Amp = 40, tau = 200)
plt.plot(x,y, color='brown');
xdata, ydata = np.loadtxt('IEprob.dist', comments='//', unpack=1)
plt.plot(xdata, ydata, 'ko', markersize=8);
plt.ylim(-5,105), plt.xlim (-10, 310)
plt.xlabel('Intersomatic distance ($\mu$m)');
plt.ylabel('Connectivity (%)');
    
    
In [5]:
    
# perform best fit
# fit to the function
pinit = [40, 200]
popt, pcov = curve_fit(mymonoexp, xdata, ydata, p0 = pinit)
 
myamp = popt[0]
mytau = popt[1]
print('Amp = %2.4f'%myamp)
print('tau = %2.4f'%mytau)
    
    
In [6]:
    
# plot fit and data together
# plot a suggestion with data
xfit = np.linspace(0, 300, 100)
yfit = mymonoexp(x, Amp = myamp, tau = mytau)
plt.plot(xfit,yfit, color='brown');
xdata, ydata = np.loadtxt('IEprob.dist', comments='//', unpack=1)
plt.plot(xdata, ydata, 'ko', markersize=8);
plt.ylim(-5,105), plt.xlim (-10, 310)
plt.xlabel('Intersomatic distance ($\mu$m)');
plt.ylabel('Connectivity (%)');
    
    
In [7]:
    
# define the fitting function
def sigmoid(x):
    """
    solves for the following function:
    f(x )= 1/ (1+ exp(-x)
    
    where x is the independent variable
    
    """
    return 1/(1 + np.exp(-x))
# plot a suggestion with data
x = np.linspace(-4, 4, 100)
y = sigmoid(x)
plt.plot(x,y, color='brown');
    
    
In [8]:
    
# define the fitting function
def logistic_grow2(x, A, B, r):
    """
    solves for the following function:
    f(x; A, B, r )= A/ (1+ B*exp(-r*x)
    
    where x is the independent variable
    A is the maximal amplitude of the curve
    r is rate of maximum population growth
    
    
    """
    x = x - 10
    return A/(1 + B*np.exp(r*(x)))
# plot a suggestion with data
x = np.linspace(-3, 30, 100)
y = logistic_grow2(x, A = 30, B=1, r=1) # red
y2 = logistic_grow2(x, A = 30, B=10, r=1) # blue
plt.plot(x,y, color='brown');
plt.plot(x,y2, color='royalblue');
    
    
In [14]:
    
def sigmoid2(x, A, B, C, r):
    """
    Sigmoid function with offset (B) and half-width (C) parameters
    """
    return B + ( A  / ( 1 + np.exp((x-C)/r)))
    
In [15]:
    
x = np.linspace(-0, 80, 100)
y = sigmoid2(x, A = 30, B=0, C=40, r=1) # red
plt.plot(x,y, color='brown');
    
    
In [16]:
    
# plot a suggestion with data
x = np.linspace(0, 300, 100)
y = sigmoid2(x, A = 35, B = 0, C = 140, r =14)
plt.plot(x,y, color='brown');
xdata, ydata = np.loadtxt('IEprob.dist', comments='//', unpack=1)
plt.plot(xdata, ydata, 'ko', markersize=8);
plt.ylim(-5,105), plt.xlim (-10, 310)
plt.xlabel('Intersomatic distance ($\mu$m)');
plt.ylabel('Connectivity (%)');
    
    
In [17]:
    
# perform best fit
# fit to the function
pinit = [40, 0, 140, 14]
popt, pcov = curve_fit(sigmoid2, xdata, ydata, p0 = pinit)
 
print(popt)
    
    
In [18]:
    
# plot fit and data together
# plot a suggestion with data
xfit = np.linspace(0, 300, 100)
yfit = sigmoid2(x, A = popt[0], B = popt[1], C = popt[2], r=popt[3])
plt.plot(xfit,yfit, color='brown');
xdata, ydata = np.loadtxt('IEprob.dist', comments='//', unpack=1)
plt.plot(xdata, ydata, 'ko', markersize=8);
plt.ylim(-5,105), plt.xlim (-10, 310)
plt.xlabel('Intersomatic distance ($\mu$m)');
plt.ylabel('Connectivity (%)');
    
    
In [ ]: