<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Критерий согласия Пирсона ( $\chi^2$)
Step1:  Исчерпанная рождаемость
Исчерпанная рождаемость — количество детей, родившихся у женщины на момент окончания конвенционального репродуктивного возраста (45 лет). Для 1878 женщин старше 45, участвовавших в социологическом опросе жителей Швейцарии, известно количество детей. Этот признак — типичный счётчик, а, значит, его можно попробовать описать распределением Пуассона.
выборка - целочисленный вектор длины $n$, характеризующий количество детей у опрашиваемой женщины
гипотеза $H_0$ - рассматриваемая величина имеет распределение Пуассона
Step2:  Критерий согласия
Step3:  Статистика критерия хи-квадрат
<ASSISTANT_TASK:>
Python Code:
import numpy as np
import pandas as pd
from scipy import stats
%pylab inline
Explanation: Критерий согласия Пирсона ( $\chi^2$)
End of explanation
fin = open('fertility.txt', 'r')
data = map(lambda x: int(x.strip()), fin.readlines())
data[:20]
pylab.bar(range(12), np.bincount(data), color = 'b', label = 'fertility_stat')
pylab.legend()
l = np.mean(data)
l
Explanation: Исчерпанная рождаемость
Исчерпанная рождаемость — количество детей, родившихся у женщины на момент окончания конвенционального репродуктивного возраста (45 лет). Для 1878 женщин старше 45, участвовавших в социологическом опросе жителей Швейцарии, известно количество детей. Этот признак — типичный счётчик, а, значит, его можно попробовать описать распределением Пуассона.
выборка - целочисленный вектор длины $n$, характеризующий количество детей у опрашиваемой женщины
гипотеза $H_0$ - рассматриваемая величина имеет распределение Пуассона
End of explanation
observed_frequences = np.bincount(data)
observed_frequences
expected_frequences = [len(data)*stats.poisson.pmf(x, l) for x in range(min(data), max(data) + 1)]
expected_frequences
pylab.bar(range(len(expected_frequences)), expected_frequences, color = 'b', label = 'poisson_distr')
pylab.legend()
Explanation: Критерий согласия
End of explanation
stats.chisquare(observed_frequences, expected_frequences, ddof = 1)
Explanation: Статистика критерия хи-квадрат: $$\chi^2=\sum_{i=1}^K \frac{\left(n_i- np_i\right)^2}{np_i}$$
При справедливости нулевой гипотезы имеет распределение хи-квадрат с числом степеней свободы $K-1-m$, где $m$ - число параметров распределения, оцененных по выборке.
End of explanation
<END_TASK>