По данным, представленным BBC, за выход Британии из ЕС проголосовали 17.410.742 чел. (51.9%), против - 16.141.241 (48.1%).
N_LEAVE, N_REMAIN = 17410742, 16141241
import numpy as np
referendum_results = np.array([1] * N_LEAVE + [0] * N_REMAIN)
Точечная оценка доли желающих покинуть ЕС:
np.mean(referendum_results)
Доверительный интервал на основе нормального распределения для доли желающих покинуть ЕС:
$$\hat{p}\pm z_{1-\frac{\alpha}{2}} \sqrt{\frac{\hat{p}\left(1-\hat{p}\right)}{n}}$$from statsmodels.stats.proportion import proportion_confint
normal_interval = proportion_confint(np.sum(referendum_results),
referendum_results.shape[0],
method = 'normal')
print 'normal_interval [%f, %f] with width %f' % (normal_interval[0],
normal_interval[1],
normal_interval[1] -
normal_interval[0])
У нас выборка большая, поэтому доверительный интервал Уилсона получается точно таким же.
$$\frac1{ 1 + \frac{z^2}{n} } \left( \hat{p} + \frac{z^2}{2n} \pm z \sqrt{ \frac{ \hat{p}\left(1-\hat{p}\right)}{n} + \frac{ z^2}{4n^2} } \right), \;\; z \equiv z_{1-\frac{\alpha}{2}}$$wilson_interval = proportion_confint(np.sum(referendum_results),
referendum_results.shape[0],
method = 'wilson')
print 'wilson_interval [%f, %f] with width %f' % (wilson_interval[0],
wilson_interval[1],
wilson_interval[1] -
wilson_interval[0])
Одновыборочный критерий Стьюдента говорит о том, что отличие выборочного среднего от 0.5 статистически значимо.
from scipy.stats import ttest_1samp
ttest_1samp(referendum_results, 0.5)
Это же подтверждают критерий знаков, критерий знаковых рангов Вилкоксона и биномиальный критерий для доли:
from scipy.stats import wilcoxon, binom_test
from statsmodels.stats.descriptivestats import sign_test
sign_test(referendum_results, 0.5)
wilcoxon(referendum_results - 0.5)
binom_test(N_LEAVE, N_LEAVE + N_REMAIN, 0.5, alternative = 'greater')