#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 для любителей кофе и тех, кто не пьет кофе.