例えば、こんな感じで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()