Допустим, мы хотим проверить, правда ли, что люди в Москве выше, чем в Санкт-Петербурге. Что для этого нужно сделать? Можно выбрать, например, 100 человек из Москвы, 100 человек из Санкт-Петербурга, измерить высоту каждого — получится два набора чисел или, как говорят в статистике, две выборки. Будем обозначать их через \(x_1,x_2,\ldots, x_{100}\) и \(y_1,y_2,\ldots, y_{100}\).Если люди выбираются случайно (а это важное условие, гарантирующее, что выборка репрезентативна, то есть хорошо отражает генеральную совокупность), то в наши выборки попадут как высокие, так и низкие люди. Чтобы понять, где же люди в среднем выше, нужно для начала вычислить среднее по каждой выборке, то есть найти выборочные средние:
\[\bar x=\frac{x_1+x_2+\ldots+x_{100}}{100},\quad \bar y=\frac{y_1+y_2+\ldots+y_{100}}{100}\]
Величина \(\bar x\) будет достаточно близкой к среднему роста людей в Москве, а \(\bar y\), соответственно, к среднему росту в Санкт-Петербурге. Предположим, \(\bar x\) отличается от \(\bar y\) и допустим так оказалось, что \(\bar x>\bar y\). Означает ли это, что люди в Москве в среднем выше людей в Санкт-Петербурге?
Вообще говоря, нет, не означает. Разница может быть обусловленной случайностью наших выборок. Действительно, представьте себе, что мы бы взяли выборки, состоящие из одного человека, и провели бы для них ту же самую операцию. Один человек в Москве мог бы случайно оказаться выше одного человека в Санкт-Петербурге, но, разумеется, делать из этого какие-то выводы о среднем росте было бы преждевременно: выборка слишком маленькая и разница может быть объяснена случайностью.
Чтобы принять решение, нам нужно учесть несколько факторов:
Чтобы учесть всё это, используются специальные статистические тесты. В данном случае мы говорим про тест Стьюдента или t-тест. Он «получает на вход» выборки, «анализирует» их с учётом этих трёх параметров и сообщает, насколько сильно отличаются средние – с учётом всех факторов. Получающееся число называется t-статистикой. Если оно оказывается большим (по модулю), то это означает, что истинные средние скорее всего различаются, а если маленьким, то такого вывода сделать нельзя. Формула для вычисления t-статистики похожа на формулу для вычисления z-статистики, которая обсуждалась в предыдущей лекции. К счастью, нам не надо знать всех тонкостей, поскольку R умеет вычислять t-статистику за нас. Но что она означает, знать полезно.
Допустим, в нашем гипотетическом примере размер выборок составлял не 100 человек, а всего по 5, и выборки оказались такими:
x <- c(150, 170, 160, 165, 180)
y <- c(180, 170, 200, 170, 175)
Средние можно посчитать следующим образом:
print(mean(x))
## [1] 165
print(mean(y))
## [1] 179
Нетрудно видеть, что среднее по выборке \(y\), равняется 179, и это больше, чем по выборке \(x\) (165). Но достаточно ли этой разницы, чтобы заключить, что вторая выборка взята из генеральной совокупности с большим истинным средним?
t.test(x,y)
##
## Welch Two Sample t-test
##
## data: x and y
## t = -1.8708, df = 7.909, p-value = 0.09871
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -31.291097 3.291097
## sample estimates:
## mean of x mean of y
## 165 179
Давайте посмотрим, что сообщает нам t-тест. Значение t-статистики оказалось равно \(-1.87\), но само по себе оно для нас сейчас имеет мало ценности. Чтобы иметь возможность принять решение, нужно знать p-value, то есть вероятность получить такое отклонение, как мы получили, или даже ещё большее, при условии, что истинные средние на самом деле равны (это предположение называется нулевой гипотезой, оно обычно соответствует «не интересному» результату: эффект не обнаружен). Значение p-value нам тоже сообщают, и это самое главное: p-value = 0.09871. Это означает, что если бы средние на самом деле были бы равны, то мы могли бы получить такое отклонение (или ещё большее) случайно с вероятностью примерно в одну десятую. Если мы на основе наших расчётов сделаем вывод, что отклонение на самом деле есть, то с вероятностью 10% ошибёмся.
Много это или мало? Зависит от нашей «цены ошибки» и стандартов, принятых в отрасли. В социальных и гуманитарных науках принято использовать уровень значимости в 5%, то есть считать, что результат является значимым (скорее всего, не объясняется случайностью), если вероятность его случайного появления не больше 5%. В нашем случае вероятность ошибки больше, и мы скорее всего не сможем уверенно сказать, что различие действительно есть. Говорят, что различие статистически незначимо.
Очень просто. Если бы средние были равными (то есть при нулевой гипотезе), t-статистика была бы распределена в соответствии с распределением Стьюдента (t-распределением), устройство которого известно. Можно, например, построить график этого распределения. Чтобы это сделать, нужно знать дополнительный параметр: число степеней свободы. Если бы у нас была только одна выборка, и мы бы проверяли, правда ли, что её среднее равно нулю (или какому-то другому фиксированному числу), то число степеней свободы было бы равно числу элементов в выборке минус 1. В случае двух выборок (как у нас) найти это число несколько сложнее — к счастью, R его посчитал за нас: df = 7.909.
Построим график плотности распределения Стьюдента:
curve(dt(x,df=7.909), xlim = c(-4,4))
curve(dnorm(x), xlim = c(-4,4), add=T, col='red')
Для сравнения на той же картинке нарисован график плотности стандартного нормального распределения (красным). Как видите, t-кривая чуть более «разлапистая».
Вероятность того, что значение t-статистики окажется меньше, чем \(-1.87\), вычисляется с помощью соответствующей функции распределения:
p <- pt(-1.87, df=7.909)
print(p)
## [1] 0.04941602
Получилось примерно \(0.05\). Это площадь под графиком функции плотности, левее точки \(-1.87\).
#code partially adapted from http://www.fernandohrosa.com.br/en/P/shaded_areas_in_r/
undercurve <- function(left, right, df) {
cord.x <- c(left,seq(left,right,0.01),right)
cord.y <- c(0,dt(seq(left,right,0.01), df=df),0)
polygon(cord.x,cord.y,col='skyblue')
}
left <- -4
right <- -1.87
df <- 7.909
curve(dt(x,df=df),xlim=c(-4,4),main='t-Curve')
undercurve(left,right,df)
Почему же нам сообщили, что p-value на самом деле почти вдвое больше? Потому что отклонение могло бы быть не только влево (среднее по выборке \(x\) меньше среднего по выборке \(y\)), но и вправо (выполняется обратное соотношение). Если вопрос, который мы ставим, звучит как «различаются ли средние?», то мы рискуем ошибиться, приняв за различие и отклонение далеко влево, и отклонение далеко вправо. Значит, настоящее p-value вдвое больше найденного. Что мы и получили.
print(2*p)
## [1] 0.09883204
Это площадь, соответствующая двум «хвостам» — левее \(-1.87\) и правее \(1.87\).
#code partially adapted from http://www.fernandohrosa.com.br/en/P/shaded_areas_in_r/
df <- 7.909
curve(dt(x,df=df),xlim=c(-4,4),main='t-Curve')
undercurve(-4,-1.87,df)
undercurve(1.87,4,df)
Если бы мы заранее из каких-то соображений знали, что \(x\) обязательно меньше \(y\), то могли бы использовать тест с левосторонней альтернативой и получили бы вдвое меньшее p-value (в этом случае оно бы уже оказалось значимым).
t.test(x,y,alternative = 'less')
##
## Welch Two Sample t-test
##
## data: x and y
## t = -1.8708, df = 7.909, p-value = 0.04935
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
## -Inf -0.06367916
## sample estimates:
## mean of x mean of y
## 165 179