「講義で使える統計素材」シリーズ.今回は,恒常法の説明に必要な図.累積相対度数分布がどのように使用されるのかの例を示すために,弁別閾を調べる恒常法の理論を説明する図を作成しました.
In [1]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
import scipy.special as sp
from scipy.optimize import curve_fit
データ¶
In [2]:
data = np.random.normal(170, 10, 100)
print(data)
累積相対度数分布(観測データ)¶
In [3]:
step = 10
bins = range(100, 250, step)
n, bins_ = np.histogram(data, bins)
x = bins[:-1]
y = np.cumsum(n/100)
plt.figure(figsize=(4,4))
plt.ylim(0, 1)
plt.xlim(100, 250)
plt.plot(bins[:-1], y, linestyle='None', marker='.', markersize=10)
plt.savefig('plot_out.svg')
フィッティング結果¶
In [4]:
def err(x, mu,sigma):
return (1+sp.erf((x-mu)/(np.sqrt(2)*sigma)))/2
popt, pcov = curve_fit(err, x, y, p0=[150, 5])
mu = popt[0]
sigma = popt[1]
print("mu = " + str(mu))
print("sigma = " + str(sigma))
x_ = range(100, 250, 1)
plt.figure(figsize=(4,4))
plt.ylim(0, 1)
plt.xlim(100, 250)
plt.plot(bins[:-1], y, linestyle='None', marker='.', markersize=10)
plt.plot(x_, err(x_, mu, sigma))
plt.plot(x_, st.norm.pdf(x_, mu, sigma))
plt.vlines(mu, ymin=0,ymax=1,linestyle="dashed")
plt.hlines(0.5, xmin=100,xmax=250,linestyle="dashed")
plt.savefig('plot_out.svg')