Я анализирую некоторые поведенческие данные, используя lme4
in R
, в основном следуя отличным учебникам Бодо Винтера , но не понимаю, правильно ли я обрабатываю взаимодействия. Хуже того, никто другой, участвующий в этом исследовании, не использует смешанные модели, поэтому я немного волнуюсь, чтобы убедиться, что все правильно.
Вместо того, чтобы просто плакать о помощи, я подумал, что должен приложить все усилия для интерпретации проблемы, а затем попросить ваших коллективных исправлений. Несколько других сторон:
- Во время написания я нашел этот вопрос , показывая, что
nlme
более прямо дают значения p для терминов взаимодействия, но я думаю, что все еще уместно задавать этот вопрос в отношенииlme4
. Livius'
Ответ на этот вопрос предоставил ссылки на множество дополнительных материалов, которые я постараюсь пройти в ближайшие несколько дней, поэтому я прокомментирую любой прогресс, который принесет.
В моих данных у меня есть зависимая переменная dv
, condition
манипуляция (0 = контроль, 1 = экспериментальное условие, которое должно привести к более высокому значению dv
), а также предварительное условие, помеченное appropriate
: испытания, закодированные 1
для этого, должны показать эффект, но испытания, закодированные 0
могут нет, потому что решающий фактор отсутствует.
Я также включил два случайных перехвата, для subject
и для target
отражения коррелированных dv
значений в каждом предмете и в каждой из 14 решенных задач (каждый участник решал контрольную и экспериментальную версию каждой проблемы).
library(lme4)
data = read.csv("data.csv")
null_model = lmer(dv ~ (1 | subject) + (1 | target), data = data)
mainfx_model = lmer(dv ~ condition + appropriate + (1 | subject) + (1 | target),
data = data)
interaction_model = lmer(dv ~ condition + appropriate + condition*appropriate +
(1 | subject) + (1 | target), data = data)
summary(interaction_model)
Вывод:
## Linear mixed model fit by REML ['lmerMod']
## ...excluded for brevity....
## Random effects:
## Groups Name Variance Std.Dev.
## subject (Intercept) 0.006594 0.0812
## target (Intercept) 0.000557 0.0236
## Residual 0.210172 0.4584
## Number of obs: 690, groups: subject, 38; target, 14
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 0.2518 0.0501 5.03
## conditioncontrol 0.0579 0.0588 0.98
## appropriate -0.0358 0.0595 -0.60
## conditioncontrol:appropriate -0.1553 0.0740 -2.10
##
## Correlation of Fixed Effects:
## ...excluded for brevity.
ANOVA затем показывает, interaction_model
что он значительно лучше подходит, чем mainfx_model
, из чего я заключаю, что присутствует значительное взаимодействие (р = 0,035).
anova(mainfx_model, interaction_model)
Вывод:
## ...excluded for brevity....
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mainfx_model 6 913 940 -450 901
## interaction_model 7 910 942 -448 896 4.44 1 0.035 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Оттуда я изолирую подмножество данных, для которых выполняется appropriate
требование (т. Е. appropriate = 1
), И для него подходит нулевая модель, а модель, включающая condition
в качестве эффекта, снова сравниваю две модели с использованием ANOVA, и вот, я обнаружил, что condition
является значимым предиктором.
good_data = data[data$appropriate == 1, ]
good_null_model = lmer(dv ~ (1 | subject) + (1 | target), data = good_data)
good_mainfx_model = lmer(dv ~ condition + (1 | subject) + (1 | target), data = good_data)
anova(good_null_model, good_mainfx_model)
Вывод:
## Data: good_data
## models:
## good_null_model: dv ~ (1 | subject) + (1 | target)
## good_mainfx_model: dv ~ condition + (1 | subject) + (1 | target)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## good_null_model 4 491 507 -241 483
## good_mainfx_model 5 487 507 -238 477 5.55 1 0.018 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
lme4
: stats.stackexchange.com/questions/118416/…Ответы:
Я не вижу слишком много, чтобы сказать здесь. Я думаю, что вы проделали хорошую работу.
Есть несколько способов, которые люди обсуждали, чтобы проверить эффекты и получить p-значения для сложных моделей смешанных эффектов. Существует хороший поверхностный обзор здесь . Лучше всего использовать вычислительно-интенсивные методы (самозагрузка или байесовские методы), но для большинства людей это более продвинутый метод. Второй лучший (и самый удобный) метод - это использовать критерий отношения правдоподобия. Это то, что
anova()
(технически ? Anova.merMod () ) делает. Важно использовать только критерий отношения правдоподобия моделей, которые соответствовали полному максимальному правдоподобию , а не ограниченному максимальному правдоподобию(REML). С другой стороны, для вашей окончательной модели и для интерпретации вы хотите использовать REML. Это сбивает с толку многих людей. В ваших выходных данных мы видим, что вы подгоняете свои модели к REML (это потому, что опция установленаTRUE
по умолчанию вlmer()
. Это означает, что ваш тест недействителен, однако, поскольку это такая распространенная ошибка,anova.merMod()
содержитrefit
аргумент, который По умолчанию установлено значениеTRUE
, и вы не изменили его. Таким образом, предвидение разработчиков пакетов спасло вас там.Что касается вашей стратегии распаковки взаимодействия, то, что вы сделали, хорошо. Просто имейте в виду, что взаимодействие использует все данные для своего теста. Возможно существенное взаимодействие, но ни один из стратифицированных тестов не может быть значительным, что смущает некоторых людей. (Похоже, этого не произошло с вами.)
источник
Я сам новичок и следую советам Zuur et al .. Я использую
lme
изnlme
пакета вместо того,lme4
когда мне нужно добавить иерархическую структуру ошибок в линейную модель. Мой ответ может быть далеко.Два комментария:
(1) Я не уверен, что имеет смысл тестировать
condition
в подмножестве,appropriate==1
только когда . Если вы хотите получить p-значения для основных эффектов, вы можете использоватьAnova
из пакета 'car':Если вы хотите разрешить взаимодействие, вы можете запускать парные сравнения напрямую (?) Или делать то, что вы делали, но на обоих подмножествах (то есть также с подмножеством где
appropriate==0
).(2) Возможно, вы захотите сначала выбрать структуру ошибок, а не предполагать, что
(1 | subject) + (1 | target)
это лучшая структура ошибок. Из того, что вы написали, я понимаю, чтоcondition
это внутрисубъектный фактор, а также факторappropriate
между субъектами или между объектами. Возможно, вы захотите добавить наклоны для факторов внутри объекта и / или внутри цели, например: добавьтеdv ~ condition + appropriate + (1+condition | subject) + (1 | target)
случайный наклон для фактора внутри объектаcondition
. Никаких наклонов не требуется для факторов между субъектами / целями.ура
источник
Anova
просто притворяться, что внутри-предметной и -целевой корреляций нет? Причина, по которой я повторяю анализ только с данными, заключающимися вappropriate==1
том, что некоторые использованные материалы оказались проблематичными после тестирования, таким образом, «неуместными». Наконец, я не использовал случайные уклоны по той простой причине, что модель лучше подходит без них.