<jupyter_start><jupyter_text>Тест. Доверительные интервалы для среднего<jupyter_code>import pandas as pd
import numpy as np

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"<jupyter_output><empty_output><jupyter_text>Для 61 большого города в Англии и Уэльсе известны средняя годовая смертность на 100000 населения (по данным 1958–1964) и концентрация кальция в питьевой воде (в частях на миллион). Чем выше концентрация кальция, тем жёстче вода. Города дополнительно поделены на северные и южные.<jupyter_code>water_data = pd.read_table('water.txt')
water_data.info()
water_data.describe()
water_data.head()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 61 entries, 0 to 60
Data columns (total 4 columns):
location     61 non-null object
town         61 non-null object
mortality    61 non-null int64
hardness     61 non-null int64
dtypes: int64(2), object(2)
memory usage: 2.0+ KB<jupyter_text>Постройте 95% доверительный интервал для средней годовой смертности в больших городах. Чему равна его нижняя граница? Округлите ответ до 4 знаков после десятичной точки.<jupyter_code>mort_mean = water_data['mortality'].mean()
print('Mean mortality: %f' % mort_mean)
from statsmodels.stats.weightstats import _tconfint_generic
mort_mean_std = water_data['mortality'].std() / np.sqrt(water_data['mortality'].shape[0])
print('Mortality 95%% interval: %s' %  str(_tconfint_generic(mort_mean, mort_mean_std, water_data['mortality'].shape[0] - 1,
                                                         0.05, 'two-sided')))<jupyter_output>Mortality 95% interval: (1476.0833413552848, 1572.2117406119285)<jupyter_text>На данных из предыдущего вопроса постройте 95% доверительный интервал для средней годовой смертности по всем южным городам. Чему равна его верхняя граница? Округлите ответ до 4 знаков после десятичной точки.<jupyter_code>water_data_south = water_data[water_data.location == 'South']
mort_mean_south = water_data_south['mortality'].mean()
print('Mean south mortality: %f' % mort_mean_south)
mort_mean_south_std = water_data_south['mortality'].std() / np.sqrt(water_data_south['mortality'].shape[0])
print('Mortality south 95%% interval: %s' %  str(_tconfint_generic(mort_mean_south, mort_mean_south_std,
                                                                   water_data_south['mortality'].shape[0] - 1,
                                                                   0.05, 'two-sided')))<jupyter_output>Mortality south 95% interval: (1320.1517462936238, 1433.463638321761)<jupyter_text>На тех же данных постройте 95% доверительный интервал для средней годовой смертности по всем северным городам. Пересекается ли этот интервал с предыдущим? Как вы думаете, какой из этого можно сделать вывод?<jupyter_code>water_data_north = water_data[water_data.location == 'North']
mort_mean_north = water_data_north['mortality'].mean()
print('Mean north mortality: %f' % mort_mean_north)
mort_mean_north_std = water_data_north['mortality'].std() / np.sqrt(water_data_north['mortality'].shape[0])
print('Mortality north 95%% interval: %s' %  str(_tconfint_generic(mort_mean_north, mort_mean_north_std,
                                                                   water_data_north['mortality'].shape[0] - 1,
                                                                   0.05, 'two-sided')))<jupyter_output>Mortality north 95% interval: (1586.5605251961385, 1680.6394748038613)<jupyter_text>Пересекаются ли 95% доверительные интервалы для средней жёсткости воды в северных и южных городах?<jupyter_code>hardness_mean_south = water_data_south['hardness'].mean()
print('Mean south hardness: %f' % hardness_mean_south)

hardness_mean_north = water_data_north['hardness'].mean()
print('Mean north hardness: %f' % hardness_mean_north)
hardness_mean_south_std = water_data_south['hardness'].std() / np.sqrt(water_data_south['hardness'].shape[0])
print('Hardness south 95%% interval: %s' %  str(_tconfint_generic(hardness_mean_south, hardness_mean_south_std,
                                                                   water_data_south['hardness'].shape[0] - 1,
                                                                   0.05, 'two-sided')))

hardness_mean_north_std = water_data_north['hardness'].std() / np.sqrt(water_data_north['hardness'].shape[0])
print('Hardness north 95%% interval: %s' %  str(_tconfint_generic(hardness_mean_north, hardness_mean_north_std,
                                                                   water_data_north['hardness'].shape[0] - 1,
                                                                   0.05, 'two-sided')))<jupyter_output>Hardness south 95% interval: (53.467198692036106, 86.071262846425441)
Hardness north 95% interval: (21.422487285724259, 39.377512714275738)<jupyter_text>Вспомним формулу доверительного интервала для среднего нормально распределённой случайной величины с дисперсией σ2:При σ=1 какой нужен объём выборки, чтобы на уровне доверия 95% оценить среднее с точностью ±0.1?<jupyter_code>from scipy import stats
np.ceil((stats.norm.ppf(1-0.05/2) / 0.1)**2)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0991270611057226, 'fraction_numerical': 0.05489815712900097, 'mean_word_length': 3.649233543733093, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 18, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '574858', 'license': 'MIT', 'n_tokens_mistral': 1964, 'n_tokens_neox': 1824, 'n_words': 359, 'path': '4 Stats for data analysis/Homework/1 test mean conf int/Test Mean conf int.ipynb', 'repo_name': 'MaxSu77/ML-DA-Coursera-Yandex-MIPT', 'size': '5155'}