#r #emmeans
Вопрос:
Я использую emmeans для получения скорректированных средних из моей линейной регрессионной модели со смешанным эффектом, но результаты, похоже, неверны. Я хочу построить соответствие модели и скорректированные значения отдельных точек данных, но результаты выглядят странно:
Расчетное скорректированное среднее значение, по-видимому, слишком велико для курса А и слишком мало для курса С. В моей линейной регрессии со смешанным эффектом я предсказываю посттест с предварительным тестом как ковариацию, а также основной эффект и взаимодействие группы и курса. Поскольку я проводил повторные измерения на Курсе и в разных условиях тестирования, я включил случайный перехват для курса и школы. Используя emmeans, я получаю следующие оценки:
# model fit
CI_post <- lmer(
post.diff ~
pre.diff
group * course
(1|bib)
(1|school),
data = dat,
REML = FALSE)
#estimated adjusted means
emmeans(CI_post, specs = c("course", "group"),lmer.df = "satterthwaite")
# Results
course group emmean SE df lower.CL upper.CL
A blocked 0.311 0.191 6.65 -0.1452 0.768
B blocked 0.649 0.180 5.38 0.1954 1.102
C blocked 1.141 0.195 7.28 0.6847 1.598
A interleaved 0.189 0.194 7.15 -0.2666 0.645
B interleaved 0.497 0.179 5.31 0.0451 0.949
C interleaved 1.046 0.191 6.72 0.5907 1.502
Именно эти значения я построил и считаю неправильными. Может ли кто-нибудь, пожалуйста, помочь мне, чтобы я получил правильные расчетные скорректированные средства?
Прочитав это, я подозреваю, что ошибка заключается в том, что pre.diff является фиксированным значением?
ref_grid(CI_post)
#result
'emmGrid' object with variables:
pre.diff = 1.5065
group = blocked, interleaved
course = A, B, C
Редактировать
Следуя длинному совету, я попытался:
post.diff.adj = post.diff b * (1.506 — pre.diff), что дало мне следующую цифру:
Это выглядит лучше и правильнее. Я использовал коэффициент регрессии модели из своей модели:
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -0.66087 0.18158 5.58701 -3.639 0.012280 *
pre.diff 0.64544 0.06178 130.60667 10.448 < 0.0000000000000002 ***
groupinterleaved -0.12209 0.15189 65.38709 -0.804 0.424431
courseB 0.33714 0.09703 131.63603 3.475 0.000693 ***
courseC 0.82993 0.16318 151.09201 5.086 0.00000107 ***
groupinterleaved:courseB -0.02922 0.11777 101.47596 -0.248 0.804563
groupinterleaved:courseC 0.02692 0.11763 100.29319 0.229 0.819435
Затем я использовал его в своем тиббле:
dat <- dat %>%
mutate(adjustedMean = (post.diff) (0.6454358 * (1.506 - pre.diff)))
Затем я построил его с помощью ggplot:
CI_post_plot <- ggplot(dat, aes(x = interaction(group, course), y = adjustedMean))
geom_point(aes(color=group), size=1.5, position=position_jitter(width=0.1), alpha=0.7)
scale_y_continuous(name = "Time substracted from straight gliding time (sec.)", breaks = seq(-2, 6, 1))
theme_pubr()
theme(legend.position="none",
axis.title.x=element_blank())
geom_hline(aes(yintercept=0), linetype = "dashed", size=0.2)
scale_x_discrete(labels = c("BlockednCourse A", "InterleavednCourse A", "BlockednCourse B", "InterleavednCourse B", "BlockednCourse C", "InterleavednCourse C"))
CI_post_plot <- CI_post_plot
geom_point(data = estmarg_mean, aes(x=interaction(group, course), y=emmean, group=group), size=2.5)
geom_errorbar(data = estmarg_mean, aes(x= interaction(group, course), y = emmean, ymin = lower.CL,ymax = upper.CL), width=0.1)
https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html
Комментарии:
1. То, что они не соответствуют наблюдаемым средствам, не означает, что они неверны. У вас есть ковариата
pre.diff
в модели, и EMM используют прогнозы в среднем по этой ковариате (около 1,5). Если на самом делеpre.diff
это связано с факторами, это может иметь большое влияние на EMMS.2. Ваше здоровье. Тогда это лучший способ сделать это или есть лучший подход?
3. Я бы сказал, что если статистическая цель получения скорректированных средних верна, то это хороший способ их получить. Но на графике показаны нескорректированные данные с скорректированными средними значениями. Я думаю , что, возможно, вы могли бы создать скорректированные значения отклика с помощью
post.diff.adj = b * (1.506 - pre.diff)
, гдеb
коэффициенты регрессииpre.diff
из подогнанной модели. Это вычитает оцененные ковариационные эффекты и добавляет ковариационный эффект при среднем значении до различия.4. PS если вы попробуете это, мне было бы интересно посмотреть пересмотренный сюжет; возможно, вы могли бы добавить его в свой пост.
5. Здорово. Я предлагаю добавить «Скорректировано» к метке оси y во втором
Ответ №1:
Просматривая некоторые комментарии, второй график в ОП показывает скорректированные значения отклика и скорректированные средние значения (он же EMMS). Интуиция для этого показана в этом приблизительном наброске: В большинстве текстов по экспериментальному проектированию будет показана аналогичная картина того, как определяются скорректированные средства: модель соответствует параллельным линиям для каждой обработки; эти линии проходят через центры соответствующих облаков данных. Скорректированные средние — это оценки по среднему значению ковариаты.
Чтобы получить скорректированные данные, мы делаем то же самое с каждой точкой данных; показано несколько репрезентативных точек. Скорректированные данные представляют собой проекции каждой точки данных на среднюю линию, причем проекции идут по траекториям, параллельным линиям регрессии.
Несколько лет назад в «Американском статистике» была статья о «выровненных данных», и это сродни этому. Я не помню автора и не нашел его в быстром поиске. Это также связано с графиками «компонент плюс остаточный», обсуждаемыми в некоторых текстах регрессии. Основная идея состоит в том, чтобы удалить оцененные эффекты переменных помех из данных или, что эквивалентно, получить остатки модели и добавить эффекты, не вызывающие помех.