例えば、こんな感じでpythonを解析に使ってみた
Synaptic Physiologyという講義の課題を、python使ってやってみた。
EPP(End Plate Potential)の分布をPoisson分布でフィットして、m_bestを求めただけ。Poisson分布とか、明らかにscipyにありそうだけど、名前が分からなかったので自分で書いた。引数が整数の場合はOKだけど、小数になると変なことになる。あと、今思うとError Functionとか作らないでもleast square fitすれば良かった。
#!/usr/bin/python from scipy import * from pylab import * # input data amp = range(0,11) counts = [135.0, 275.0, 269.0, 175.0, 92.0, 39.0, 10.0, 5.0, 0.0, 0.0, 0.0] #convert #events-> probability total_counts = sum(counts) pcounts = [ i/total_counts for i in counts] # define functions def poisson(x,m): if x==0: y = exp(-1*m) else: y = exp(-1*m)*(m**x)/(prod(range(1,x+1))) return y def resid(m,amp,observed): modeldist = [poisson(x,m) for x in amp] mysum = 0 for i in range(len(amp)): mysum += abs(observed[i]-modeldist[i]) return mysum # fit the data f = lambda m: resid(m,amp,pcounts) m_best = optimize.fminbound(f,0,10) # plot raw data in blue and the best fit in red bar(amp,pcounts) y = [poisson(x,m_best) for x in amp] plot(amp,y,'r-',lw=4) show()