In [1]:
import pandas as pd
import numpy as np
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Для 61 большого города в Англии и Уэльсе известны средняя годовая смертность на 100000 населения (по данным 1958–1964) и концентрация кальция в питьевой воде (в частях на миллион). Чем выше концентрация кальция, тем жёстче вода. Города дополнительно поделены на северные и южные.
In [23]:
water_data = pd.read_table('water.txt')
water_data.info()
water_data.describe()
water_data.head()
Out[23]:
Out[23]:
Постройте 95% доверительный интервал для средней годовой смертности в больших городах. Чему равна его нижняя граница? Округлите ответ до 4 знаков после десятичной точки.
In [12]:
mort_mean = water_data['mortality'].mean()
print('Mean mortality: %f' % mort_mean)
In [15]:
from statsmodels.stats.weightstats import _tconfint_generic
In [36]:
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')))
На данных из предыдущего вопроса постройте 95% доверительный интервал для средней годовой смертности по всем южным городам. Чему равна его верхняя граница? Округлите ответ до 4 знаков после десятичной точки.
In [48]:
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)
In [49]:
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')))
На тех же данных постройте 95% доверительный интервал для средней годовой смертности по всем северным городам. Пересекается ли этот интервал с предыдущим? Как вы думаете, какой из этого можно сделать вывод?
In [50]:
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)
In [51]:
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')))
Пересекаются ли 95% доверительные интервалы для средней жёсткости воды в северных и южных городах?
In [52]:
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)
In [53]:
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')))
Вспомним формулу доверительного интервала для среднего нормально распределённой случайной величины с дисперсией σ2: При σ=1 какой нужен объём выборки, чтобы на уровне доверия 95% оценить среднее с точностью ±0.1?
In [56]:
from scipy import stats
np.ceil((stats.norm.ppf(1-0.05/2) / 0.1)**2)
Out[56]: