Скачайте данные для этого занятия:

IQdata.csv

Подгружаем необходимые для занятия пакеты:

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) для этого теста.

H0: выборочное среднее значение равно заданному значению (в данном случае 100)

Значение критерия Стьюдента = 8.3029. Значение p-value = 2.279e-15, оно меньше конвенционального значения 0.05, следовательно мы должны отвергнуть нулевую гипотезу и принять альтернативную.

Альтернативная гипотеза: выборочное среднее значение не равно заданному значению (в данном случае 100)

В данном случае выборочное среднее равно 106.2464, 95%-ный доверительный интервал = 104.7668 - 107.7261 (если бы мы повторили аналогичный тест много раз для разных групп такого же размера, то в 95% случаев среднее оказалась бы в диапазоне от 104.7668 до 107.7261.). Таким образом, среднее значение IQ-баллов в группе, проходившей тренировку перед тестом, выше среднего значение в популяции.

Важно не только правильно посчитать, но и представить результаты в отчёте. В случае одновыборочного теста Стьюдента в описании результатов необходимо включить само значение t-теста, количество его степеней свободы, актуальное значение p-value. Это должно выглядить вот так:

M = 106.25, 95% CI [104.77, 107.73], t(348) = 8.30, p < 0.001 (в данном случае, и только в этом, мы не указываем само значение p-value, т.к. оно очень маленькое, если оно было бы больше 0.001, необходимо было бы его указать точно).

Теперь проверим равенство среднего значения 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.

График квантилей (q-q plots, quantile-quantile plots)

Квантиль-квантильный график для тренированной группы

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

Опять, чтобы содержательно проинтерпретировать полученный результат, необходимо вспомнить нулевую гипотезу для данного теста.

H0: Распределение переменной не отличается от нормального.

Значение 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

Опять, чтобы содержательно проинтерпретировать полученный результат, необходимо вспомнить нулевую гипотезу для данного теста.

H0: Распределение переменной не отличается от нормального.

Значение 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.