Выборочные распределения Python: разные доверительные интервалы для разных методов

#python #statistics #data-science

Вопрос:

я работаю с набором данных людей, которые пьют кофе. Я пытаюсь найти 99% — ные доверительные интервалы для разницы в среднем росте людей, которые пьют кофе, и людей, которые этого не делают. Следующий код-это то, как я нашел интервалы:

 drinks_coffee = sample_data[sample_data.drinks_coffee==True].height
no_coffee = sample_data[sample_data.drinks_coffee==False].height

drinks_coffee_sample_dist = np.random.choice(drinks_coffee, size=(10000,200)).mean(axis=1)
no_coffee_sample_dist = np.random.choice(no_coffee, size=(10000,200)).mean(axis=1)

diff_in_height = drinks_coffee_sample_dist - no_coffee_sample_dist
diff_0_5, diff_99_5 = np.percentile(diff_in_height, 0.5), np.percentile(diff_in_height, 99.5)
print(diff_0_5, diff_99_5)
 

(0.513, 2.132)

Решение в моем курсе дает этот код (который является медленным и громоздким):

 diffs = []
for _ in range(10000):
    bootsamp = sample_data.sample(200, replace = True)
    coff_mean = bootsamp[bootsamp['drinks_coffee'] == True]['height'].mean()
    nocoff_mean = bootsamp[bootsamp['drinks_coffee'] == False]['height'].mean()
    diffs.append(coff_mean - nocoff_mean)
    
np.percentile(diffs, 0.5), np.percentile(diffs, 99.5)
 

(0.103, 2.539)

Эти два интервала находятся дальше друг от друга, чем мне удобно, кто-нибудь знает, почему? Я думал, что random.choice пересчитан аналогично pd.sample, причем у них обоих по умолчанию replace = True (т. е. загрузка).

Комментарии:

1. Я заметил, что в решении курса есть в общей сложности 1189275 человек, которые пьют кофе, и 810725 человек, которые этого не делают (сгенерировано из образцов 10000 х 200). Для моего кода у меня есть ровно 1000000 для любителей кофе и тех, кто не пьет кофе.