Processing math: 100%
+ - 0:00:00
Notes for current slide
Notes for next slide

Смешанные линейные модели (случайный интерсепт и случайный угол наклона)

Линейные модели…

Марина Варфоломеева, Вадим Хайтов

Осень 2022

1 / 83

Вы узнаете

  • Что такое смешанные модели и когда они применяются
  • Что такое фиксированные и случайные факторы

Вы сможете

  • Рассказать чем фиксированные факторы отличаются от случайных
  • Привести примеры факторов, которые могут быть фиксированными или случайными в зависимости от задачи исследования
  • Рассказать, что оценивает коэффициент внутриклассовой корреляции и вычислить его для случая с одним случайным фактором
  • Подобрать смешанную линейную модель со случайным отрезком и случайным углом наклона в R при помощи методов максимального правдоподобия
2 / 83

“Многоуровневые” данные

3 / 83

Независимость наблюдений

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

Но так происходит совсем не всегда.

4 / 83

Независимость наблюдений

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

Но так происходит совсем не всегда.

Многоуровневые (multilevel), сгруппированные (clustered) данные

Иногда наблюдения бывают сходны по каким-то признакам:

  • измерения в разные периоды времени

    • измерения, сделанные в химической лаборатории в разные дни
  • измерения в разных участках пространства

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

    • измерения до и после какого-то воздействия
  • измерения на разных субъектах, которые сами объединены в группы

    • ученики в классах, классы в школах, школы в районах, районы в городах и т.п.
4 / 83

Внутригрупповые корреляции

Детали, произведенные на одном станке будут более похожи, чем детали, сделанные на разных.

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

Таким образом, можно сказать, что есть корреляции значений внутри групп.

5 / 83

Внутригрупповые корреляции

Детали, произведенные на одном станке будут более похожи, чем детали, сделанные на разных.

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

Таким образом, можно сказать, что есть корреляции значений внутри групп.

Последствия для анализа

Игнорировать такую группирующую структуру данных нельзя – можно ошибиться с выводами.

Моделировать группирующие факторы обычными методами тоже нельзя – придется подбирать очень много параметров.

Решение – случайные факторы.


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

5 / 83

Недосып и время реакции

6 / 83

Недосып и время реакции

В ночь перед нулевым днем всем испытуемым давали поспать нормальное время, а в следующие 9 ночей — только по 3 часа. Каждый день измеряли время реакции в серии тестов. (Данные Belenky et al., 2003)

Как время реакции людей зависит от бессонницы?

  • Reaction — среднее время реакции в серии тестов в день наблюдения, мс
  • Days — число дней депривации сна
  • Subject — номер испытуемого
library(lme4)
data(sleepstudy)
sl <- sleepstudy
str(sl)
'data.frame': 180 obs. of 3 variables:
$ Reaction: num 250 259 251 321 357 ...
$ Days : num 0 1 2 3 4 5 6 7 8 9 ...
$ Subject : Factor w/ 18 levels "308","309","310",..: 1 1 1 1 1 1 1 1 1 1 ...
7 / 83

Знакомимся с данными

# Есть ли пропущенные значения?
colSums(is.na(sl))
Reaction Days Subject
0 0 0
# Сколько субъектов?
length(unique(sl$Subject))
[1] 18
# Сколько наблюдений для каждого субъекта?
table(sl$Subject)
308 309 310 330 331 332 333 334 335 337 349 350 351 352 369 370 371 372
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
8 / 83

Есть ли выбросы?

library(ggplot2)
theme_set(theme_bw(base_size = 14))
ggplot(sl, aes(x = Reaction, y = 1:nrow(sl))) +
geom_point()

9 / 83

Есть ли выбросы?

library(ggplot2)
theme_set(theme_bw(base_size = 14))
ggplot(sl, aes(x = Reaction, y = 1:nrow(sl))) +
geom_point()

Мы пока еще не учли информацию о субъектах...

9 / 83

Как меняется время реакции разных людей?

ggplot(sl, aes(x = Reaction, y = Subject, colour = Days)) +
geom_point()

10 / 83

Как меняется время реакции разных людей?

ggplot(sl, aes(x = Reaction, y = Subject, colour = Days)) +
geom_point()

  • У разных людей разное время реакции.
  • Межиндивидуальную изменчивость нельзя игнорировать.
10 / 83

Что делать с разными субъектами?

The Good — подбираем смешанную модель, в которой есть фиксированный фактор Days и случайный фактор Subject, который опишет межиндивидуальную изменчивость.

The Bad — игнорируем структуру данных, подбираем модель с единственным фиксированным фактором Days. (Не учитываем группирующий фактор Subject). Неправильный вариант.

The Ugly — подбираем модель с двумя фиксированными факторами: Days и Subject. (Группирующий фактор Subject опишет межиндивидуальную изменчивость как обычный фиксированный фактор).

11 / 83

Что делать с разными субъектами?

The Good — подбираем смешанную модель, в которой есть фиксированный фактор Days и случайный фактор Subject, который опишет межиндивидуальную изменчивость.

The Bad — игнорируем структуру данных, подбираем модель с единственным фиксированным фактором Days. (Не учитываем группирующий фактор Subject). Неправильный вариант.

The Ugly — подбираем модель с двумя фиксированными факторами: Days и Subject. (Группирующий фактор Subject опишет межиндивидуальную изменчивость как обычный фиксированный фактор).

11 / 83

Что делать с разными субъектами?

The Good — подбираем смешанную модель, в которой есть фиксированный фактор Days и случайный фактор Subject, который опишет межиндивидуальную изменчивость.

The Bad — игнорируем структуру данных, подбираем модель с единственным фиксированным фактором Days. (Не учитываем группирующий фактор Subject). Неправильный вариант.

The Ugly — подбираем модель с двумя фиксированными факторами: Days и Subject. (Группирующий фактор Subject опишет межиндивидуальную изменчивость как обычный фиксированный фактор).

11 / 83

Что делать с разными субъектами?

The Good — подбираем смешанную модель, в которой есть фиксированный фактор Days и случайный фактор Subject, который опишет межиндивидуальную изменчивость.

The Bad — игнорируем структуру данных, подбираем модель с единственным фиксированным фактором Days. (Не учитываем группирующий фактор Subject). Неправильный вариант.

The Ugly — подбираем модель с двумя фиксированными факторами: Days и Subject. (Группирующий фактор Subject опишет межиндивидуальную изменчивость как обычный фиксированный фактор).

11 / 83

Плохое решение: не учитываем группирующий фактор

Reactioni=β0+β1Daysi+εi

εiN(0,σ)

12 / 83

Плохое решение: не учитываем группирующий фактор

Reactioni=β0+β1Daysi+εi

εiN(0,σ)

В матричном виде это можно записать так:

(Reaction1Reaction2Reaction180)=(1Days11Days21Days180)(β0β1)+(ε1ε2ε180)

что можно сокращенно записать так:

Reaction=Xββ+εε

12 / 83

Плохое решение: не учитываем группирующий фактор

W1 <- glm(Reaction ~ Days, data = sl)
summary(W1)
Call:
glm(formula = Reaction ~ Days, data = sl)
Deviance Residuals:
Min 1Q Median 3Q Max
-110.85 -27.48 1.55 26.14 139.95
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 251.41 6.61 38.03 < 2e-16 ***
Days 10.47 1.24 8.45 9.9e-15 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 2277)
Null deviance: 567954 on 179 degrees of freedom
Residual deviance: 405252 on 178 degrees of freedom
AIC: 1906
Number of Fisher Scoring iterations: 2
  • Объем выборки завышен (180 наблюдений, вместо 18 субъектов). Стандартные ошибки и уровни значимости занижены. Увеличивается вероятность ошибок I рода.

  • Нарушено условие независимости наблюдений.

12 / 83

Плохое решение: не учитываем группирующий фактор

W1 <- glm(Reaction ~ Days, data = sl)
summary(W1)
Call:
glm(formula = Reaction ~ Days, data = sl)
Deviance Residuals:
Min 1Q Median 3Q Max
-110.85 -27.48 1.55 26.14 139.95
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 251.41 6.61 38.03 < 2e-16 ***
Days 10.47 1.24 8.45 9.9e-15 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 2277)
Null deviance: 567954 on 179 degrees of freedom
Residual deviance: 405252 on 178 degrees of freedom
AIC: 1906
Number of Fisher Scoring iterations: 2
  • Объем выборки завышен (180 наблюдений, вместо 18 субъектов). Стандартные ошибки и уровни значимости занижены. Увеличивается вероятность ошибок I рода.

  • Нарушено условие независимости наблюдений.

12 / 83

Плохое решение: не учитываем группирующий фактор

ggplot(sl, aes(x = Days, y = Reaction)) +
geom_point() +
geom_smooth(se = TRUE, method = "lm", size = 1)

13 / 83

Плохое решение: не учитываем группирующий фактор

ggplot(sl, aes(x = Days, y = Reaction)) +
geom_point() +
geom_smooth(se = TRUE, method = "lm", size = 1)

  • Доверительная зона регрессии “заужена”.

  • Большие остатки, т.к. неучтенная межиндивидуальная изменчивость “ушла” в остаточную.

13 / 83

Громоздкое решение: группирующий фактор как фиксированный

Reactioni=β0+β1Daysi+β2Subj2i+...+β2Subj18i+εi

εiN(0,σ)

14 / 83

Громоздкое решение: группирующий фактор как фиксированный

Reactioni=β0+β1Daysi+β2Subj2i+...+β2Subj18i+εi

εiN(0,σ)

В матричном виде это можно записать так:

(Reaction1Reaction2Reaction180)=(1Days1Subj21Subj1811Days2Subj22Subj1821Days180Subj2180Subj18180)(β0β1β18)+(ε1ε2ε180)

То есть: Reaction=Xββ+εε

14 / 83

Громоздкое решение: группирующий фактор как фиксированный

W2 <- glm(Reaction ~ Days + Subject, data = sl)
coef(W2)
(Intercept) Days Subject309 Subject310
295.031 10.467 -126.901 -111.133
Subject330 Subject331 Subject332 Subject333
-38.912 -32.698 -34.832 -25.976
Subject334 Subject335 Subject337 Subject349
-46.832 -92.064 33.587 -66.299
Subject350 Subject351 Subject352 Subject369
-28.531 -52.036 -4.712 -36.099
Subject370 Subject371 Subject372
-50.432 -47.150 -24.248

Фрагмент summary(W2):

Residual standard error: 30.99 on 161 degrees of freedom
Multiple R-squared: 0.7277, Adjusted R-squared: 0.6973
F-statistic: 23.91 on 18 and 161 DF, p-value: < 2.2e-16
15 / 83

Громоздкое решение: группирующий фактор как фиксированный

W2 <- glm(Reaction ~ Days + Subject, data = sl)
coef(W2)
(Intercept) Days Subject309 Subject310
295.031 10.467 -126.901 -111.133
Subject330 Subject331 Subject332 Subject333
-38.912 -32.698 -34.832 -25.976
Subject334 Subject335 Subject337 Subject349
-46.832 -92.064 33.587 -66.299
Subject350 Subject351 Subject352 Subject369
-28.531 -52.036 -4.712 -36.099
Subject370 Subject371 Subject372
-50.432 -47.150 -24.248

Фрагмент summary(W2):

Residual standard error: 30.99 on 161 degrees of freedom
Multiple R-squared: 0.7277, Adjusted R-squared: 0.6973
F-statistic: 23.91 on 18 and 161 DF, p-value: < 2.2e-16
  • 20 параметров (18 для Subject, один для Days и σ), а наблюдений всего 180.

  • Нужно минимум 10–20 наблюдений на каждый параметр (Harrell, 2013) — у нас всего 9.

15 / 83

Громоздкое решение: что нам делать с этим множеством прямых?

ggplot(fortify(W2), aes(x = Days, colour = Subject)) +
geom_line(aes(y = .fitted, group = Subject)) +
geom_point(data = sl, aes(y = Reaction)) +
guides(colour = guide_legend(ncol = 2))

16 / 83

Громоздкое решение: что нам делать с этим множеством прямых?

ggplot(fortify(W2), aes(x = Days, colour = Subject)) +
geom_line(aes(y = .fitted, group = Subject)) +
geom_point(data = sl, aes(y = Reaction)) +
guides(colour = guide_legend(ncol = 2))

  • В модели, где субъект — фиксированный фактор, для каждого субъекта есть “поправка” для значения свободного члена в уравнении регрессии.
  • Универсальность модели теряется: предсказания можно сделать только с учетом субъекта.
16 / 83

Фиксированные и случайные факторы

17 / 83

Фиксированные факторы

До сих пор мы имели дело только с фиксированными факторами.

Мы моделировали средние значения для уровней фиксированного фактора. Если групп было много, то приходилось моделировать много средних значений.

Поступая так, мы считали, что сравниваемые группы – фиксированные, и нам интересны именно сравнения между ними.

18 / 83

Можно посмотреть на группирующий фактор иначе!

Когда нам не важны конкретные значения интерсептов для разных уровней фактора, мы можем представить, что эффект фактора (величина “поправки”) — случайная величина, и можем оценить дисперсию между уровнями группирующего фактора.

Такие факторы называются случайными факторами.

19 / 83

Случайные факторы

  • измерения в разные периоды времени

    • измерения, сделанные в химической лаборатории в разные дни
  • измерения в разных участках пространства

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

    • измерения до и после какого-то воздействия
  • измерения на разных субъектах, которые сами объединены в группы

    • ученики в классах, классы в школах, школы в районах, районы в городах и т.п.

Случайные факторы в моделях

На один и тот же фактор можно посмотреть и как на фиксированный и как на случайный в зависимости от целей исследователя.

Поскольку моделируя случайный фактор мы оцениваем дисперсию между уровнями, то хорошо, если у случайного фактора будет минимум пять градаций.

20 / 83

GLMM со случайным отрезком

21 / 83

GLMM со случайным отрезком

Reactionij=β0+β1Daysij+bi+εij

biN(0,σb) — случайный эффект субъекта (случайный отрезок, интерсепт)
εijN(0,σ) — остатки модели
i — субъекты, j — дни

22 / 83

GLMM со случайным отрезком

Reactionij=β0+β1Daysij+bi+εij

biN(0,σb) — случайный эффект субъекта (случайный отрезок, интерсепт)
εijN(0,σ) — остатки модели
i — субъекты, j — дни

В матричном виде это записывается так:

(Reaction1Reaction2Reaction180)=(1Days11Days21Days180)(β0β1)+(111)(b)+(ε1ε2ε180)

То есть: Reaction=Xββ+Zb+εε

22 / 83

Подберем модель со случайным отрезком

Используем lmer из пакета lme4.

?lmer # справка о lmer

lmer по умолчанию использует REML для подбора параметров. Это значит, что случайные эффекты будут оценены более точно, чем при использовании ML.

M1 <- lmer(Reaction ~ Days + (1 | Subject), data = sl)
23 / 83

Уравнение модели со случайным отрезком

summary(M1)
Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ Days + (1 | Subject)
Data: sl
REML criterion at convergence: 1786
Scaled residuals:
Min 1Q Median 3Q Max
-3.226 -0.553 0.011 0.519 4.251
Random effects:
Groups Name Variance Std.Dev.
Subject (Intercept) 1378 37.1
Residual 960 31.0
Number of obs: 180, groups: Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.405 9.747 25.8
Days 10.467 0.804 13.0
Correlation of Fixed Effects:
(Intr)
Days -0.371
24 / 83

Уравнение модели со случайным отрезком

summary(M1)
Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ Days + (1 | Subject)
Data: sl
REML criterion at convergence: 1786
Scaled residuals:
Min 1Q Median 3Q Max
-3.226 -0.553 0.011 0.519 4.251
Random effects:
Groups Name Variance Std.Dev.
Subject (Intercept) 1378 37.1
Residual 960 31.0
Number of obs: 180, groups: Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.405 9.747 25.8
Days 10.467 0.804 13.0
Correlation of Fixed Effects:
(Intr)
Days -0.371

Reactionij=251.4+10.5Daysij+bi+εij

biN(0,37.12) — случайный эффект субъекта
εijN(0,30.99) — остатки модели
i — субъекты, j — дни

24 / 83

Предсказания смешанных моделей бывают двух типов

  • Предсказания с учетом лишь фиксированных эффектов,
  • Предсказания с одновременным учетом как фиксированных, так и случайных эффектов.

Данные для графика предсказаний фиксированной части модели:

library(dplyr)
NewData <- sl %>% group_by(Subject) %>%
do(data.frame(Days = seq(min(.$Days), max(.$Days), length = 10)))
head(NewData, 3)
# A tibble: 3 × 2
# Groups: Subject [1]
Subject Days
<fct> <dbl>
1 308 0
2 308 1
3 308 2
25 / 83

Предсказания фиксированной части модели при помощи predict()

?predict.merMod

Функция predict() в lme4 не считает стандартные ошибки и доверительные интервалы. Это потому, что нет способа адекватно учесть неопределенность, связанную со случайными эффектами.

NewData$fit <- predict(M1, NewData, type = 'response', re.form = NA)
head(NewData, 3)
# A tibble: 3 × 3
# Groups: Subject [1]
Subject Days fit
<fct> <dbl> <dbl>
1 308 0 251.
2 308 1 262.
3 308 2 272.
26 / 83

Предсказания фиксированной части модели в матричном виде

Стандартные ошибки, рассчитанные обычным методом,
позволят получить приблизительные доверительные интервалы.

# Предсказанные значения при помощи матриц
X <- model.matrix(~ Days, data = NewData)
betas <- fixef(M1)
NewData$fit <- X %*% betas
# Cтандартные ошибки
NewData$SE <- sqrt( diag(X %*% vcov(M1) %*% t(X)) )
NewData$lwr <- NewData$fit - 2 * NewData$SE
NewData$upr <- NewData$fit + 2 * NewData$SE

Более точные доверительные интервалы можно получить при помощи бутстрепа.
Мы сделаем это позже для финальной модели.

27 / 83

Здесь доверительный интервал без учета неопределенности, связанной со случайным эффектом. Чтобы ее учесть нужно взять корень из суммы дисперсий фиксированной и случайного эффекта. См. GLMM FAQ

График предсказаний фиксированной части модели

ggplot(data = NewData, aes(x = Days, y = fit)) +
geom_ribbon(alpha = 0.35, aes(ymin = lwr, ymax = upr)) +
geom_line() + geom_point(data = sl, aes(x = Days, y = Reaction))

Зависимость времени реакции от продолжительности периода бессонницы без учета субъекта:

^Reactionij=251.4+10.5Daysij

28 / 83

Предсказания фиксированной части модели с бутстрепом

Предсказания фиксированной части модели при помощи merTools

Предсказания для уровней случайного фактора

NewData$fit_subj <- predict(M1, NewData, type = 'response')
ggplot(NewData, aes(x = Days, y = fit_subj)) +
geom_ribbon(alpha = 0.3, aes(ymin = lwr, ymax = upr)) +
geom_line(aes(colour = Subject)) +
geom_point(data = sl, aes(x = Days, y = Reaction, colour = Subject)) +
guides(colour = guide_legend(ncol = 2))

Зависимость времени реакции от продолжительности периода бессонницы для обследованных субъектов:

^Reactionij=251.4+10.5Daysij+bi

29 / 83

Важные замечания

Случайный фактор помогает учесть взаимозависимость наблюдений для каждого из субъектов – “индуцированные” корреляции.

После анализа остатков модели можно будет понять, стоит ли с ней работать дальше. Одна из потенциальных проблем – время реакции разных субъектов может меняться непараллельно. Возможно, модель придется переформулировать.

30 / 83

Индуцированная корреляция

31 / 83

Рaзберемся со случайной частью модели

Reaction=Xββ+Zb+εε
bN(0,D) - случайные эффекты bi нормально распределены со средним 0 и матрицей ковариаций D
εεN(0,ΣΣ) - остатки модели нормально распределены со средним 0 и матрицей ковариаций ΣΣ

32 / 83

Рaзберемся со случайной частью модели

Reaction=Xββ+Zb+εε
bN(0,D) - случайные эффекты bi нормально распределены со средним 0 и матрицей ковариаций D
εεN(0,ΣΣ) - остатки модели нормально распределены со средним 0 и матрицей ковариаций ΣΣ

Матрица ковариаций остатков: ΣΣ=σ2(100010001)=(σ2000σ2000σ2)

32 / 83

Остатки модели должны быть независимы друг от друга

В матрице ковариаций остатков вне диагонали стоят нули, т.е. ковариация разных остатков равна нулю. Т.е. остатки независимы друг от друга.

ΣΣ=(σ2000σ2000σ2)

В то же время, отдельные значения переменной-отклика Y уже не будут независимы друг от друга при появлении в модели случайного фактора.

33 / 83

Матрица ковариаций переменной-отклика

Reaction=Xββ+Zb+εε
bN(0,D)
εεN(0,ΣΣ)

Можно показать, что переменная-отклик Y нормально распределена:

YN(Xββ,V)

34 / 83

Матрица ковариаций переменной-отклика

Reaction=Xββ+Zb+εε
bN(0,D)
εεN(0,ΣΣ)

Можно показать, что переменная-отклик Y нормально распределена:

YN(Xββ,V)

Матрица ковариаций переменной-отклика:

V=ZDZ+ΣΣ, где D — матрица ковариаций случайных эффектов.

Т.е. добавление случайных эффектов приводит
к изменению ковариационной матрицы
V

34 / 83

Кстати, ZDZ называется преобразование Холецкого (Cholesky decomposition)

Добавление случайных эффектов приводит к изменению ковариационной матрицы

V=ZDZ+ΣΣ

Для простейшей смешанной модели со случайным отрезком:

V=(111)σ2b(111)+σ2(100010001)==(σ2+σ2bσ2bσ2bσ2bσ2+σ2bσ2bσ2bσ2bσ2bσ2+σ2b)

35 / 83

Индуцированная корреляция — следствие включения в модель случайных эффектов

V=(σ2+σ2bσ2bσ2bσ2bσ2+σ2bσ2bσ2bσ2bσ2bσ2+σ2b)

  • σ2b — ковариация между наблюдениями одного субъекта.
  • σ2+σ2b — дисперсия.

Т.е. корреляция между наблюдениями одного субъекта σ2b/(σ2+σ2b)

36 / 83

Коэффициент внутриклассовой корреляции
(intra-class correlation, ICC)

ICC=σ2b/(σ2+σ2b)

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

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

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


ICC можно использовать как описательную статистику, но интереснее использовать его при планировании исследований.

Если в пилотном исследовании ICC маленький, то для надежной оценки эффекта этого случайного фактора нужно брать больше наблюдений в группе.

Если в пилотном исследовании ICC большой, то можно брать меньше наблюдений в группе.

37 / 83

Вычислим коэффициент внутриклассовой корреляции

summary(M1)
Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ Days + (1 | Subject)
Data: sl
REML criterion at convergence: 1786
Scaled residuals:
Min 1Q Median 3Q Max
-3.226 -0.553 0.011 0.519 4.251
Random effects:
Groups Name Variance Std.Dev.
Subject (Intercept) 1378 37.1
Residual 960 31.0
Number of obs: 180, groups: Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.405 9.747 25.8
Days 10.467 0.804 13.0
Correlation of Fixed Effects:
(Intr)
Days -0.371
# Случайные эффекты отдельно
VarCorr(M1)
Groups Name Std.Dev.
Subject (Intercept) 37.1
Residual 31.0
37.124^2 / (37.124^2 + 30.991^2)
[1] 0.5893
38 / 83

Есть функции для ICC, подождем, когда они станут пакетом. https://github.com/timothyslau/ICC.merMod

Диагностика модели

39 / 83

Условия применимости

  • Случайность и независимость наблюдений.
  • Линейная связь.
  • Нормальное распределение остатков.
  • Гомогенность дисперсий остатков.
  • Отсутствие коллинеарности предикторов.
40 / 83

Данные для анализа остатков

M1_diag <- data.frame(
sl,
.fitted = predict(M1),
.resid = resid(M1, type = 'pearson'),
.scresid = resid(M1, type = 'pearson', scaled = TRUE))
head(M1_diag, 4)
Reaction Days Subject .fitted .resid .scresid
1 249.6 0 308 292.2 -42.629 -1.3755
2 258.7 1 308 302.7 -43.951 -1.4182
3 250.8 2 308 313.1 -62.323 -2.0110
4 321.4 3 308 323.6 -2.151 -0.0694
  • .fitted — предсказанные значения.
  • .resid — Пирсоновские остатки.
  • .scresid — стандартизованные Пирсоновские остатки.
41 / 83

График остатков от предсказанных значений

gg_resid <- ggplot(M1_diag, aes(y = .scresid)) +
geom_hline(yintercept = 0)
gg_resid + geom_point(aes(x = .fitted))

42 / 83

График остатков от предсказанных значений

gg_resid <- ggplot(M1_diag, aes(y = .scresid)) +
geom_hline(yintercept = 0)
gg_resid + geom_point(aes(x = .fitted))

  • Большие остатки.
  • Гетерогенность дисперсий.
42 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = factor(Days)))

43 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = factor(Days)))

  • Большие остатки в некоторые дни.
  • Гетерогенность дисперсий.
43 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = Subject))

44 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = Subject))

  • Большие остатки у 332 субъекта.
  • Гетерогенность дисперсий.
44 / 83

GLMM со случайным отрезком и углом наклона

45 / 83

GLMM со случайным отрезком и углом наклона

На графике индивидуальных эффектов было видно, что измерения для разных субъектов, возможно, идут непараллельно. Усложним модель — добавим случайные изменения угла наклона для каждого из субъектов.

Это можно биологически объяснить. Возможно, в зависимости от продолжительности бессонницы у разных субъектов скорость реакции будет ухудшаться разной скоростью: одни способны выдержать 9 дней почти без потерь, а другим уже пары дней может быть достаточно.

46 / 83

Уравнение модели со случайным отрезком и углом наклона

Reactionij=β0+β1Daysij+bi+cijDaysij+εij

biN(0,σb) — случайный интерсепт для субъекта
cijN(0,σc) — случайный угол наклона для субъекта
εijN(0,σ) — остатки модели
i — субъекты, j — дни

47 / 83

Уравнение модели со случайным отрезком и углом наклона

Reactionij=β0+β1Daysij+bi+cijDaysij+εij

biN(0,σb) — случайный интерсепт для субъекта
cijN(0,σc) — случайный угол наклона для субъекта
εijN(0,σ) — остатки модели
i — субъекты, j — дни

В матричном виде это записывается так:

(Reaction1Reaction2Reaction180)=(1Days11Days21Days180)(β0β1)+(1Days11Days21Days180)(bc)+(ε1ε2ε180)

То есть: Reaction=Xββ+Zb+εε

47 / 83

Подберем модель со случайным отрезком и углом наклона

Формат записи формулы для случайных эффектов в lme4

(1 + угловой_коэффициент | отрезок)


MS1 <- lmer(Reaction ~ Days + ( 1 + Days|Subject), data = sl)
48 / 83

Уравнение модели со случайным отрезком и углом наклона

summary(MS1)
Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ Days + (1 + Days | Subject)
Data: sl
REML criterion at convergence: 1744
Scaled residuals:
Min 1Q Median 3Q Max
-3.954 -0.463 0.023 0.463 5.179
Random effects:
Groups Name Variance Std.Dev. Corr
Subject (Intercept) 612.1 24.74
Days 35.1 5.92 0.07
Residual 654.9 25.59
Number of obs: 180, groups: Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.41 6.82 36.84
Days 10.47 1.55 6.77
Correlation of Fixed Effects:
(Intr)
Days -0.138

Reactionij=251.4+10.5Daysij+bi+cijDaysij+εij

biN(0,24.74) — случайный интерсепт для субъекта
cijN(0,5.92) — случайный угол наклона для субъекта
εijN(0,25.59) — остатки модели
i — субъекты, j — дни

49 / 83

Данные для графика предсказаний фиксированной части модели

library(dplyr)
NewData <- sl %>% group_by(Subject) %>%
do(data.frame(Days = seq(min(.$Days), max(.$Days), length = 10)))
NewData$fit <- predict(MS1, NewData, type = 'response', re.form = NA)
head(NewData, 3)
# A tibble: 3 × 3
# Groups: Subject [1]
Subject Days fit
<fct> <dbl> <dbl>
1 308 0 251.
2 308 1 262.
3 308 2 272.
50 / 83

Предсказания фиксированной части модели в матричном виде

Вычислим приблизительные доверительные интервалы.

# Предсказанные значения при помощи матриц
X <- model.matrix(~ Days, data = NewData)
betas <- fixef(MS1)
NewData$fit <- X %*% betas
# Cтандартные ошибки
NewData$SE <- sqrt( diag(X %*% vcov(MS1) %*% t(X)) )
NewData$lwr <- NewData$fit - 2 * NewData$SE
NewData$upr <- NewData$fit + 2 * NewData$SE

Более точные доверительные интервалы можно получить при помощи бутстрепа.

51 / 83

Здесь доверительный интервал без учета неопределенности, связанной со случайным эффектом. Чтобы ее учесть нужно взять корень из суммы дисперсий фиксированной и случайного эффекта. См. GLMM FAQ

График предсказаний фиксированной части модели

ggplot(data = NewData, aes(x = Days, y = fit)) +
geom_ribbon(alpha = 0.35, aes(ymin = lwr, ymax = upr)) +
geom_line() + geom_point(data = sl, aes(x = Days, y = Reaction))

Зависимость времени реакции от продолжительности периода бессонницы без учета субъекта:

^Reactionij=251.4+10.5Daysij

52 / 83

Предсказания для уровней случайного фактора

NewData$fit_subj <- predict(MS1, NewData, type = 'response')
ggplot(NewData, aes(x = Days, y = fit_subj)) +
geom_ribbon(alpha = 0.3, aes(ymin = lwr, ymax = upr)) +
geom_line(aes(colour = Subject)) +
geom_point(data = sl, aes(x = Days, y = Reaction, colour = Subject)) +
guides(colour = guide_legend(ncol = 2))

Зависимость времени реакции от продолжительности периода бессонницы для обследованных субъектов:

^Reactionij=251.4+10.5Daysij+bi+cijDaysij

53 / 83

Диагностика модели со случайным отрезком и углом наклона

54 / 83

Данные для анализа остатков

MS1_diag <- data.frame(
sl,
.fitted = predict(MS1),
.resid = resid(MS1, type = 'pearson'),
.scresid = resid(MS1, type = 'pearson', scaled = TRUE))
head(MS1_diag, 4)
Reaction Days Subject .fitted .resid .scresid
1 249.6 0 308 253.7 -4.104 -0.1604
2 258.7 1 308 273.3 -14.625 -0.5715
3 250.8 2 308 293.0 -42.196 -1.6488
4 321.4 3 308 312.7 8.777 0.3430
55 / 83

График остатков от предсказанных значений

gg_resid <- ggplot(MS1_diag, aes(y = .scresid)) +
geom_hline(yintercept = 0)
gg_resid + geom_point(aes(x = .fitted))

56 / 83

График остатков от предсказанных значений

gg_resid <- ggplot(MS1_diag, aes(y = .scresid)) +
geom_hline(yintercept = 0)
gg_resid + geom_point(aes(x = .fitted))

  • Несколько больших остатков.
  • Гетерогенность дисперсий не выражена.
56 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = factor(Days)))

57 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = factor(Days)))

  • Большие остатки в некоторые дни.
  • Нет гетерогенности дисперсий остатков.
57 / 83

Графики остатков от ковариат в модели и не в модели

gg_resid + geom_boxplot(aes(x = Subject))

  • Большие остатки у 332 субъекта.
  • Гетерогенность дисперсий не выражена.
58 / 83

Смешанные линейные модели

59 / 83

Смешанные модели (Mixed Models)

Смешанными называются модели, включающие случайные факторы.

  • Общие смешанные модели (General Linear Mixed Models) — только нормальное распределение зависимой переменной.

  • Обобщенные смешанные модели (Generalized Linear Mixed Models) — распределения зависимой переменной могут быть другими (из семейства экспоненциальных распределений).

60 / 83

Cмешанная линейная модель в общем виде

Y=Xββ+Zb+εε

bN(0,D) — случайные эффекты нормально распределены со средним 0 и матрицей ковариаций D (ее диагональные элементы – стандартное отклонение σb).

εεN(0,ΣΣ) — остатки модели нормально распределены со средним 0 и матрицей ковариаций ΣΣ (ее диагональные элементы – стандартное отклонение σ).

Xββ — фиксированная часть модели.

Zb+εε — случайная часть модели.

В зависимости от устройства модельной матрицы для случайных эффектов Z смешанные модели делят на модели со случайным отрезком и случайным углом наклона.

61 / 83

Методы подбора параметров в смешанных моделях

Метод максимального правдоподобия (Maximum Likelihood, ML)

Метод ограниченного максимального правдоподобия (Restricted Maximum Likelihood, REML)

62 / 83

Faraway, 2017, p.196

Метод максимального правдоподобия, ML

Правдоподобие (likelihood) — измеряет соответствие реально наблюдаемых данных тем, что можно получить из модели при определенных значениях параметров.

Это произведение вероятностей данных:

L(θ|yi)=Πni=1f(yi|θ)

Параметры модели должны максимизировать значение логарифма правдоподобия (loglikelihood):

lnL(θ|yi)max

63 / 83

ML-оценки для дисперсий – смещенные

Например, ML оценка обычной выборочной дисперсии будет смещенной:

ˆσ2=(xiˉx)2n,

т.к. в знаменателе не n1, а n.


Аналогичные проблемы возникают при ML оценках для случайных эффектов в линейных моделях.

Это происходит потому, что в смешанной линейной модели

Y=Xββ+Zb+εε

YN(Xββ,V), где V=ZDZ+ΣΣ

т.е. одновременно приходится оценивать ββ и V.

64 / 83

Метод ограниченного максимального правдоподобия, REML

Y=Xββ+Zb+εε

YN(Xββ,V), где ZDZ+ΣΣ


Если найти матрицу A, ортогональную к X (т.е. AX=0), то умножив ее на Y можно избавиться от ββ:

AY=AXββ+AV=0+AV=AV

AYN(0,AVA)

Тогда можно воспользоваться ML, чтобы найти V.

В результате получатся несмещенные оценки дисперсий.

REML-оценки ββ будут стремится к ML-оценкам при увеличении объема выборки.

65 / 83

ML или REML?

Если нужны точные оценки фиксированных эффектов – ML.

Если нужны точные оценки случайных эффектов – REML.

Если нужно работать с правдоподобиями – следите, чтобы в моделях, подобранных REML была одинаковая фиксированная часть.


Для обобщенных (негауссовых) смешанных линейных моделей REML не определен – там используется ML.

66 / 83

Тестирование гипотез в смешанных моделях

67 / 83

Использование смешанных моделей для получения выводов

Тесты, которые традиционно применяются для GLM, дадут лишь приблизительные результаты для GLMM:

  • t-(или z-) тесты Вальда для коэффициентов,
  • тесты отношения правдоподобий (Likelihood ratio tests, LRT).

Поэтому для отбора моделей применяют подход, не связанный с тестами:

  • информационные критерии (AIC, BIC и т.п.).

Наиболее точные результаты тестов можно получить, используя “золотой стандарт”:

  • параметрический бутстреп.
68 / 83

t-(или -z) тесты Вальда

H0:βk=0, HA:βk0


bkSEbkN(0,1) или bkSEbkt(df=np), если нужно оценивать σ

bk — оценка коэффициента, n — объем выборки, p — число параметров модели.

t-(или -z) тесты Вальда дают лишь приблизительный результат,
поэтому в пакете lme4 даже не приводят уровни значимости в summary().
Не рекомендуется ими пользоваться.

coef(summary(MS1))
Estimate Std. Error t value
(Intercept) 251.41 6.825 36.838
Days 10.47 1.546 6.771
69 / 83

Тесты отношения правдоподобий (LRT)

LRT=2ln(LM1LM2)=2(lnLM1lnLM2)

  • M1 и M2 — вложенные модели ($M_1$ — более полная, M2 — уменьшенная),
  • LM1, LM2 – правдоподобия моделей и lnLM1, lnLM2 – логарифмы правдоподобий.

Распределение LRT аппроксимируют распределением χ2 с df=dfM2dfM1.

  • LRT консервативен для случайных эффектов, т.к. тест гипотезы вида H0:ˆσ2k=0 происходит на границе области возможных значений параметра.

  • LRT либерален для фиксированных эффектов,
    дает заниженные уровни значимости.

70 / 83

LRT для случайных эффектов

Модели с одинаковой фиксированной частью, подобранные REML, вложенные. Уровни значимости будут завышены.

MS1 <- lmer(Reaction ~ Days + (1 + Days | Subject), data = sl, REML = TRUE)
MS0 <- lmer(Reaction ~ Days + (1 | Subject), data = sl, REML = TRUE)
anova(MS1, MS0, refit = FALSE)
Data: sl
Models:
MS0: Reaction ~ Days + (1 | Subject)
MS1: Reaction ~ Days + (1 + Days | Subject)
npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
MS0 4 1794 1807 -893 1786
MS1 6 1756 1775 -872 1744 42.8 2 5e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Время реакции у разных людей по-разному зависит от продолжительности бессонницы.

Обычно тесты не делают, набор случайных эффектов определяется устройством данных.

71 / 83

LRT для фиксированных эффектов

Модели с одинаковой случайной частью, подобранные ML, вложенные. Уровни значимости будут занижены.

MS1.ml <- lmer(Reaction ~ Days + (1 + Days | Subject), data = sl, REML = FALSE)
MS0.ml <- lmer(Reaction ~ 1 + (1 + Days | Subject), data = sl, REML = FALSE)
anova(MS1.ml, MS0.ml)
Data: sl
Models:
MS0.ml: Reaction ~ 1 + (1 + Days | Subject)
MS1.ml: Reaction ~ Days + (1 + Days | Subject)
npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
MS0.ml 5 1785 1801 -888 1775
MS1.ml 6 1764 1783 -876 1752 23.5 1 0.0000012 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Время реакции зависит от продолжительности бессонницы.

72 / 83

Сравнение моделей по AIC

Модели с одинаковой случайной частью, подобранные ML, вложенные или невложенные.

AIC(MS1.ml, MS0.ml)
df AIC
MS1.ml 6 1764
MS0.ml 5 1785

Время реакции зависит от продолжительности бессонницы (AIC).

73 / 83

Бутстреп для тестирования значимости и для предсказаний

74 / 83

Параметрический бутстреп для тестирования случайных эффектов

Бутстреп

Способ тестирования гипотез, при котором из данных многократно получают выборки (с повторениями).

Если по таким многократным выборкам построить распределение статистики, то оно будет стремиться к истинному распределению этой статистики.

Сгенерированное бутстрепом распределение статистики можно использовать для тестирования гипотез.

Бутстреп особенно удобен, когда невозможно получить распределение статистики аналитическим путем.

75 / 83

Параметрический бутстреп для LRT

Чтобы при помощи бутстрепа получить оценку уровня значимости для LRT при сравнении двух моделей Mfull и Mreduced, нужно

1.Многократно повторить:

- сгенерировать новые данные из уменьшенной модели,
- по сгенерированным данным подобрать полную и уменьшенную модели и рассчитать LRT.

2.Построить распределение LRT по всем итерациям бутстрепа.

Уровень значимости – это доля итераций, в которых получено LRT больше, чем данное.

76 / 83

Параметрический бутстреп для LRT фиксированных эффектов

В строке PBtest – значение LRT и его уровень значимости, полученный бутстрепом.

library(pbkrtest)
pmod <- PBmodcomp(MS1.ml, MS0.ml, nsim = 100) # 1000 и больше для реальных данных
summary(pmod)
Bootstrap test; time: 1.82 sec; samples: 100; extremes: 0;
large : Reaction ~ Days + (1 + Days | Subject)
Reaction ~ 1 + (1 + Days | Subject)
stat df ddf p.value
LRT 23.5 1.0 0.0000012 ***
PBtest 23.5 0.00990 **
Gamma 23.5 0.0000048 ***
Bartlett 20.1 1.0 0.0000072 ***
F 23.5 1.0 13.9 0.00026 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
77 / 83

Бутстреп-оценка доверительной зоны регрессии

Чтобы при помощи бутстрепа оценить положение зоны, где с 95% вероятностью будут лежать предсказанные значения, нужно:

1.Многократно повторить:

- сгенерировать новые данные из модели
- по сгенерированным данным подобрать модель и получить ее предсказания

2.Построить распределение предсказанных значений по всем итерациям бутстрепа.

95% доверительная зона регрессии — это область, куда попали предсказанные значения в 95% итераций (т.е. между 0.025 и 0.975 персентилями).

78 / 83

Бутстреп-оценка доверительной зоны регрессии

NewData <- sl %>% group_by(Subject) %>%
do(data.frame(Days = seq(min(.$Days), max(.$Days), length = 10)))
NewData$fit <- predict(MS1, NewData, type = 'response', re.form = NA)
# Многократно симулируем данные из модели и получаем для них предсказанные значения
bMS1 <- bootMer(x = MS1,
FUN = function(x) predict(x, new_data = NewData, re.form = NA),
nsim = 100)
# Рассчитываем квантили предсказанных значений для всех итераций бутстрепа
b_se <- apply(X = bMS1$t,
MARGIN = 2,
FUN = function(x) quantile(x, probs = c(0.025, 0.975), na.rm = TRUE))
# Доверительная зона для предсказанных значений
NewData$lwr <- b_se[1, ]
NewData$upr <- b_se[2, ]
79 / 83

График предсказаний фиксированной части модели

ggplot(data = NewData, aes(x = Days, y = fit)) +
geom_ribbon(alpha = 0.35, aes(ymin = lwr, ymax = upr)) +
geom_line() + geom_point(data = sl, aes(x = Days, y = Reaction))

80 / 83

Take-home messages

Свойства Фиксированные факторы Случайные факторы
Уровни фактора фиксированные, заранее определенные и потенциально воспроизводимые уровни случайная выборка из всех возможных уровней
Используются для тестирования гипотез о средних значениях отклика между уровнями фактора \linebreak H0:μ1=μ2==μi=μ о дисперсии отклика между уровнями фактора
H0:σ2rand.fact.=0
Выводы можно экстраполировать только на уровни из анализа на все возможные уровни
Число уровней фактора Осторожно! Если уровней фактора слишком много, то нужно подбирать слишком много коэффициентов — должно быть много данных Важно! Для точной оценки σ нужно нужно много уровней фактора — не менее 5
81 / 83

Take-home messages

  • Смешанные модели могут включать случайные и фиксированные факторы.

    • Градации фиксированных факторов заранее определены, а выводы можно экстраполировать только на такие уровни, которые были задействованы в анализе. Тестируется гипотеза о равенстве средних в группах.
    • Градации случайных факторов — выборка из возможных уровней, а выводы можно экстраполировать на другие уровни. Тестируется гипотеза о дисперсии между группами.
  • Есть два способа подбора коэффициентов в смешанных моделях: ML и REML. Для разных этапов анализа важно, каким именно способом подобрана модель.

  • Коэффициент внутриклассовой корреляции оценивает, насколько коррелируют друг с другом наблюдения из одной и той же группы случайного фактора.

  • Случайные факторы могут описывать вариацию как интерсептов, так и коэффициентов угла наклона.
  • Модели со смешанными эффектами позволяют получить предсказания как общем уровне, так и на уровне отдельных субъектов.
82 / 83

Дополнительные ресурсы

  • Crawley, M.J. (2007). The R Book (Wiley).
  • Faraway, J. J. (2017). Extending the linear model with R: generalized linear, mixed effects and nonparametric regression models (Vol. 124). CRC press.
  • Zuur, A. F., Hilbe, J., & Ieno, E. N. (2013). A Beginner’s Guide to GLM and GLMM with R: A Frequentist and Bayesian Perspective for Ecologists. Highland Statistics.
  • Zuur, A.F., Ieno, E.N., Walker, N., Saveliev, A.A., and Smith, G.M. (2009). Mixed Effects Models and Extensions in Ecology With R (Springer)
  • Pinheiro, J., Bates, D. (2000). Mixed-Effects Models in S and S-PLUS. Springer
83 / 83

Вы узнаете

  • Что такое смешанные модели и когда они применяются
  • Что такое фиксированные и случайные факторы

Вы сможете

  • Рассказать чем фиксированные факторы отличаются от случайных
  • Привести примеры факторов, которые могут быть фиксированными или случайными в зависимости от задачи исследования
  • Рассказать, что оценивает коэффициент внутриклассовой корреляции и вычислить его для случая с одним случайным фактором
  • Подобрать смешанную линейную модель со случайным отрезком и случайным углом наклона в R при помощи методов максимального правдоподобия
2 / 83
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
oTile View: Overview of Slides
sToggle scribble toolbox
Esc Back to slideshow