中心極限定理のシミュレーション
In [146]:
%matplotlib inline
from numpy.random import normal, poisson
import scipy.stats as stats
def show(data):
data = Series(data)
plt.hist(data)
plt.show()
print data.describe()
print "skewness:", data.skew()
print "kurtosis:", data.kurtosis()
stats.probplot(data, dist="norm", plot=plt)
plt.show()
In [147]:
data = normal(loc=16, scale=16, size=10000)
show(data)
In [148]:
def sample_and_show_means(data, num_samples=100, num_iterations=1000):
print "Sample Distribution"
population = Series(data)
sample_means = []
for i in range(0, num_iterations):
sample_means.append(population.sample(n=num_samples).mean())
sample_means = Series(sample_means)
show(sample_means)
この関数はデフォルトでは標本サイズ100のサンプリングを1000回行う。これを使って先ほどの正規分布の母集団からサンプリングを行う。
In [149]:
sample_and_show_means(data)
In [150]:
sample_and_show_means(data, num_samples=16)
In [151]:
data = poisson(lam=2, size=10000)
show(data)
sample_and_show_means(data)
In [152]:
data = np.concatenate([poisson(lam=2, size=10000), normal(loc=16, scale=2, size=10000)])
show(data)
sample_and_show_means(data)
母集団のほうはなんだかよくわからない分布であるが、標本平均のほうはとにかく正規分布に従っていることがわかる。