<jupyter_start><jupyter_text>Graded quiz. Практика проверки гипотез<jupyter_code>import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import scipy.stats as sts
import seaborn as sns

sns.set()
sns.set_style("whitegrid")

color_palette = sns.color_palette('deep') + sns.color_palette('husl', 6) + sns.color_palette('bright') + sns.color_palette('pastel')

%matplotlib inline
sns.palplot(color_palette)

def ndprint(a, precision=3):
    with np.printoptions(precision=precision, suppress=True):
        print(a)
        
def r4(*kargs):
    return [round(x, 4) for x in kargs] if len(kargs) > 1 else round(kargs[0], 4)

def r4s(a):
    return r4(*a)<jupyter_output><empty_output><jupyter_text>01. Question 1По данным опроса, 75% работников ресторанов утверждают, что испытывают на работе существенный стресс, оказывающий негативное влияние на их личную жизнь. Крупная ресторанная сеть опрашивает 100 своих работников, чтобы выяснить, отличается ли уровень стресса работников в их ресторанах от среднего. 67 из 100 работников отметили высокий уровень стресса.Посчитайте достигаемый уровень значимости, округлите ответ до четырёх знаков после десятичной точки.<jupyter_code>n = 100

p_value = sts.binom_test(67, 100, 0.75, alternative='two-sided')
r4(p_value)<jupyter_output><empty_output><jupyter_text>02. Question 2Представим теперь, что в другой ресторанной сети только 22 из 50 работников испытывают существенный стресс. Гипотеза о том, что 22/50 соответствует 75% по всей популяции, методом, который вы использовали в предыдущей задаче, отвергается. Чем это может объясняться? Выберите все возможные варианты. __answered__ all of them<jupyter_code>p_value = sts.binom_test(22, 50, 0.75, alternative='two-sided')
p_value<jupyter_output><empty_output><jupyter_text>03. Question 3The Wage Tract — заповедник в округе Тома, Джорджия, США, деревья в котором не затронуты деятельностью человека со времён первых поселенцев. Для участка заповедника размером 200х200 м имеется информация о координатах сосен (sn — координата в направлении север-юг, we — в направлении запад-восток, обе от 0 до 200).Проверим, можно ли пространственное распределение сосен считать равномерным, или они растут кластерами.Загрузите данные, поделите участок на 5х5 одинаковых квадратов размера 40x40 м, посчитайте количество сосен в каждом квадрате (чтобы получить такой же результат, как у нас, используйте функцию scipy.stats.binned_statistic_2d).Если сосны действительно растут равномерно, какое среднее ожидаемое количество сосен в каждом квадрате? В правильном ответе два знака после десятичной точки.<jupyter_code>data = pd.read_csv('data/10_pines.txt', sep='\t', )
data.sample(5)

n = len(data.index)
b = 5
pine_stats = sts.binned_statistic_2d(data['we'], data['sn'], None, statistic='count', bins=[b, b])

p_expected = float(n) / b / b
print p_expected
round(p_expected, 2)<jupyter_output>23.36<jupyter_text>04. Question 4Чтобы сравнить распределение сосен с равномерным, посчитайте значение статистики хи-квадрат для полученных 5х5 квадратов. Округлите ответ до двух знаков после десятичной точки.<jupyter_code>chi_square_stats = sts.chisquare(pine_stats.statistic, np.full((b, b), p_expected), ddof=0, axis=None)
print chi_square_stats

round(chi_square_stats.statistic, 2)<jupyter_output>Power_divergenceResult(statistic=150.58904109589042, pvalue=2.574669774967279e-20)<jupyter_text>05. Question 5Насколько велико это значение? Если нулевая гипотеза справедлива, с какой вероятностью его можно было получить случайно?Нулевое распределение статистики — хи-квадрат с $25-1=24$ степенями свободы (поскольку у равномерного распределения, с которым мы сравниваем данные, нет ни одного оцениваемого по выборке параметра, число степеней свободы $K-1$, где $K$ — количество интервалов).Посчитайте достигаемый уровень значимости.Если вы используете функцию scipy.stats.chi2.cdf, в качестве значения параметра df нужно взять 24 (это число степеней свободы); если функцию scipy.stats.chisquare — параметр ddof нужно брать равным 0 (это как раз количество параметров теоретического распределения, оцениваемых по выборке).Отвергается ли гипотеза равномерности на уровне значимости 0.05?<jupyter_code># в целом мы уже получили p-value выше
print r4(chi_square_stats.pvalue), chi_square_stats.pvalue < 0.05

# попробуем другим способом, используя только значение статистики
chi2_rv = sts.chi2(b*b - 1)
p_value2 = 1.0 - chi2_rv.cdf(chi_square_stats.statistic)

print p_value2, p_value2 < 0.05

# ради интереса посмотрим 95-ю квантиль и сравним с полученным значением статистики
print r4(chi2_rv.ppf(0.95), chi_square_stats.statistic)<jupyter_output>0.0 True
0.0 True
[36.415, 150.589]<jupyter_text>Исчерпанная рождаемость Исчерпанная рождаемость — количество детей, родившихся у женщины на момент окончания конвенционального репродуктивного возраста (45 лет). Для 1878 женщин старше 45, участвовавших в социологическом опросе жителей Швейцарии, известно количество детей. Этот признак — типичный счётчик, а, значит, его можно попробовать описать распределением Пуассона. * **выборка** - целочисленный вектор длиы $n$, характеризующий количество детей у опрашиваемой женщины* **гипотеза $H_0$** - рассматриваемая величина имеет распределение Пуассона<jupyter_code>fin = open('data/09_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<jupyter_output><empty_output><jupyter_text>Критерий согласия<jupyter_code>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()<jupyter_output><empty_output><jupyter_text>Статистика критерия хи-квадрат: $$\chi^2=\sum_{i=1}^K \frac{\left(n_i- np_i\right)^2}{np_i}$$При справедливости нулевой гипотезы имеет распределение хи-квадрат с числом степеней свободы $K-1-m$, где $m$ - число параметров распределения, оцененных по выборке.<jupyter_code>stats.chisquare(observed_frequences, expected_frequences, ddof = 1)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0895617529880478, 'fraction_numerical': 0.03203187250996016, 'mean_word_length': 6.681762545899633, 'pattern_counts': {'":': 0, '<': 36, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '472362', 'license': 'MIT', 'n_tokens_mistral': 2639, 'n_tokens_neox': 2885, 'n_words': 615, 'path': '04_stats_for_data_analysis/10_w1q_quiz_hypothesis_test.ipynb', 'repo_name': 'pkuderov/mlda-course', 'size': '6275'}