Второе ограничение T-теста подразумевает, что выборочные средние должны быть нормально распределены.
Долгое время (да и сейчас не редкость) в интернетах активно форсилась позиция, что T-тест ограничивается нормальным распределением выборки. Это не так. В основе этого ограничения лежит та самая ЦПТ.
Для того, чтобы проверить ограничение по распределению, нам сначала нужно это распределение создать. Для этого мы достанем с возвращением из нашей метрики X выборок по Y наблюдений, рассчитаем среднее для каждой выборки, а потом проверим как распределились эти X средних.
Функция для генерации средних:
generate_sample_means <- function(data, sample_size, n_samples) {
sample_means <- numeric(n_samples)
for (i in 1:n_samples) {
sample <- sample(data, size = sample_size, replace = TRUE)
sample_means[i] <- mean(sample)
}
return(sample_means)
}def generate_sample_means(data, sample_size, n_samples):
sample_means = []
for _ in range(n_samples):
sample = np.random.choice(data, size = sample_size, replace = True)
sample_means.append(np.mean(sample))
return sample_means
Теперь это распределение можно тестировать. Для этой цели используют два популярных критерия:
✅ Шапиро-Уилка. Проверяет соответствие выборки нормальному распределению.
✅ Колмогорова-Смирнова. Проверяет соответствие выборки заданному распределению, в том числе нормальному.
Тесты:
# тест Шапиро-Уилка
shapiro.test(df)
# тест Колмогорова-Смирнова на нормальность
ks.test(df, "pnorm", mean = mean(df), sd = sd(df))
import numpy as np
from scipy import stats
# тест Шапиро-Уилка
shapiro_test = stats.shapiro(df)
# тест Колмогорова-Смирнова на нормальность
ks_test = stats.kstest(df, 'norm', args=(np.mean(df), np.std(df)))
Но даже если выборочные средние не распределены нормально, мы можем попробовать обойти это ограничение методами выравнивания. Об этом поговорим дальше.
Хотя, если только между нами, на больших данных это ограничение можно и проигнорировать 🙂
#ABtest
