Скачайте данные для этого занятия:
Подгружаем необходимые для занятия пакеты:
ggplot2
vioplot
car
library(ggplot2)
library(vioplot)
library(car)
Если их нет на компьютере, их нужно загрузить
# install.packages('vioplot')
# install.packages('ggplot2')
# install.packages('car')
Загружаем файл с данными IQdata.csv, тот же самый, с которым мы работали на прошлом занятии. Напомню, что в файле две переменные: IQ - количественная переменная, представляющая собой количество баллов теста интеллекта, group - качественная переменная, отражающая принадлежность человека к одной из двух групп (training - тренировалась решать задачи, входящие в тесты интеллекта, control - контрольная группа, в которой ничего не происходило).
IQdata <- read.table("IQdata.csv")
Смотрим, всё ли верно загрузилось.
str(IQdata)
## 'data.frame': 700 obs. of 2 variables:
## $ group: Factor w/ 2 levels "control","training": 1 1 1 1 1 1 1 1 1 1 ...
## $ IQ : int 104 102 NA 115 94 119 85 105 98 89 ...
Давайте ещё раз посмотрим на распределение IQ-баллов в этих двух группах, но теперь с помощью немного другого графика. Он называется “скрипичная диаграмма” или “график-виолончель”.
control <- subset(IQdata, group == "control" & IQ != 'NA')
training <- subset(IQdata, group == "training" & IQ != 'NA')
vioplot(control$IQ, training$IQ, col = "gold", names=c('control', 'training'))
Теперь проверим вашу первую статистическую гипотезу! Шкала IQ устроена так, что её среднее значение равно 100, именно такое значение коэффициента интеллекта является средним значением в популяции, т.е. среди всех людей. Давайте проверим, отличается ли среднее значение в двух наших группах от среднего значения коэффициента интеллекта в популяции, т.е. от 100 баллов. Для этого воспрользуемся критерием Стьюдента для 1 выборки. Сначала проверим равенство среднего значения IQ баллов значению 100 в группе, проходившей тренировку.
training_group <- subset(IQdata, group == "training") # выделяем из общей выборки подвыборку людей, проходивших тренировку
t.test (training_group$IQ, mu=100)
##
## One Sample t-test
##
## data: training_group$IQ
## t = 8.3029, df = 348, p-value = 2.279e-15
## alternative hypothesis: true mean is not equal to 100
## 95 percent confidence interval:
## 104.7668 107.7261
## sample estimates:
## mean of x
## 106.2464
Чтобы проинтерпретировать результат, необходимо вспомнить формулировку нулевой гипотезы (Ho) для этого теста.
Значение критерия Стьюдента = 8.3029. Значение p-value = 2.279e-15, оно меньше конвенционального значения 0.05, следовательно мы должны отвергнуть нулевую гипотезу и принять альтернативную.
В данном случае выборочное среднее равно 106.2464, 95%-ный доверительный интервал = 104.7668 - 107.7261 (если бы мы повторили аналогичный тест много раз для разных групп такого же размера, то в 95% случаев среднее оказалась бы в диапазоне от 104.7668 до 107.7261.). Таким образом, среднее значение IQ-баллов в группе, проходившей тренировку перед тестом, выше среднего значение в популяции.
Важно не только правильно посчитать, но и представить результаты в отчёте. В случае одновыборочного теста Стьюдента в описании результатов необходимо включить само значение t-теста, количество его степеней свободы, актуальное значение p-value. Это должно выглядить вот так:
Теперь проверим равенство среднего значения IQ баллов значению 100 в контрольной группе.
control_group <- subset(IQdata, group == "control") # выделяем из общей выборки подвыборку людей, не проходивших тренировки
t.test (control_group$IQ, mu=100)
##
## One Sample t-test
##
## data: control_group$IQ
## t = -1.1459, df = 348, p-value = 0.2526
## alternative hypothesis: true mean is not equal to 100
## 95 percent confidence interval:
## 97.50931 100.65688
## sample estimates:
## mean of x
## 99.08309
Результы показали следующее: M = 99.08, 95% CI [97.51, 100.66], t(348) = -1.15, p = 0.253. Отличается ли среднее в контрольной группе от среднего в популяции (т.е. от 100)?
Её мы уже строили. Повторяться на будем. См. Практическое занятие №2.
Квантиль-квантильный график для тренированной группы
qqPlot(training_group$IQ, xlab="Квантили нормального распределения", ylab="Наблюдаемые квантили")
Квантиль-квантильный график для контрольной группы
qqPlot(control_group$IQ, xlab="Квантили нормального распределения", ylab="Наблюдаемые квантили")
Протестируем распределение IQ баллов в тренированной группе.
ks.test(training_group$IQ, "pnorm")
##
## One-sample Kolmogorov-Smirnov test
##
## data: training_group$IQ
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Опять, чтобы содержательно проинтерпретировать полученный результат, необходимо вспомнить нулевую гипотезу для данного теста.
Значение p-value < 2.2e-16, т.е. меньше конвенционального порога 0.05, следовательно необходимо отвергнуть нулевую гипотезу и принять альтернативную. Распределение отличается от нормального.
Протестирует распределение IQ баллов в контрольной группе
ks.test(control_group$IQ, "pnorm")
##
## One-sample Kolmogorov-Smirnov test
##
## data: control_group$IQ
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Какой вывод необходимо сделать относительно распределения IQ баллов в данной группе?
Протестируем распределение IQ баллов в тренированной группе с помощью него.
shapiro.test(training_group$IQ)
##
## Shapiro-Wilk normality test
##
## data: training_group$IQ
## W = 0.99765, p-value = 0.9061
Опять, чтобы содержательно проинтерпретировать полученный результат, необходимо вспомнить нулевую гипотезу для данного теста.
Значение p-value = 0.9061, т.е. больше конвенционального порога 0.05, следовательно нет оснований отвергнуть нулевую гипотезу. Следовательно нет оснований считать распределение отличным от нормального.
Протестирует распределение IQ баллов в контрольной группе
shapiro.test(control_group$IQ)
##
## Shapiro-Wilk normality test
##
## data: control_group$IQ
## W = 0.99364, p-value = 0.15
Значение p-value = 0.15. Какой вывод необходимо сделать относительно распределения IQ баллов в данной группе?
Наконец мы можем ответить на главный содержательный вопрос, которой очень часто интересует исследователей: Если ли разница в средних значениях IQ баллов между двумя группами (тренированной и контрольной). Поскольку IQ баллы в обеих группах распределены нормально, для ответа на этот вопрос можно использовать двухвыборочный тест Стьюдента.
t.test(IQdata$IQ ~ IQdata$group)
##
## Welch Two Sample t-test
##
## data: IQdata$IQ by IQdata$group
## t = -6.5222, df = 693.37, p-value = 1.335e-10
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -9.319704 -5.006943
## sample estimates:
## mean in group control mean in group training
## 99.08309 106.24642
T-тест показали, что среднее значение IQ баллов в тренированной группе (M = 106.25, SD = 14.05) статистически значимо выше среднего значения IQ баллов в контрольной группе (M = 99.08, SD = 14.95), t(693.37) = -6.52, p < 0.001.
Внимание! При выполнении двухвыборочного t-теста функция R по умолчанию принимает, что дисперсии сравниваемых совокупностей не равны, и, как следствие, выполняет t-тест в модификации Уэлча. Мы можем изменить такое поведение программы, воспользовавшись аргументом var.equal = TRUE:
t.test(IQdata$IQ ~ IQdata$group, var.equal = TRUE)
##
## Two Sample t-test
##
## data: IQdata$IQ by IQdata$group
## t = -6.5222, df = 696, p-value = 1.332e-10
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -9.319690 -5.006958
## sample estimates:
## mean in group control mean in group training
## 99.08309 106.24642
В данном случае показатели и содержательный вывод не изменился, но так может быть невсегда, поэтому на разницу между групповыми дисперсиями (или ее отсутствие) следует обращать серьезное внимание при выборе и интерпретации того или иного варианта t-теста.
Если бы контрольная и тренированная группы из нашего примера были бы одной и той же группой, у которой сначала измерили IQ (control), потом потренировали и после этого снова измерили IQ, то это были бы связанные или зависимые выборки (т.к. каждое наблюдение из первой группы можно однозначно сопоставить с наблюдением из второй группы). В этой ситуации исследователя также мог бы интересовать вопроос о том, повлияла ли тренировка на результативность прохождения IQ теста. В этом случает необходимо было бы использовать парный тест Стьюдента (необходимо использовать аргумент paired = TRUE). Попробуем его сделать. Важно, чтобы измерения IQ людей в первой переменной шли строго в том же порядке, что и во второй переменной.
t.test(control_group$IQ, training_group$IQ, paired = TRUE)
##
## Paired t-test
##
## data: control_group$IQ and training_group$IQ
## t = -6.4699, df = 347, p-value = 3.34e-10
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -9.322811 -4.976040
## sample estimates:
## mean of the differences
## -7.149425
В данном случае парный t-тест показали, что среднее значение IQ баллов после тренировки (M = 106.25, SD = 14.05) статистически значимо выше среднего значения IQ баллов до тренировки (M = 99.08, SD = 14.95), t(347) = -6.47, p < 0.001. В среднем эта разница составляет -7.15 с 95%-ным интервалом от -9.32 до -4.98.