Как конвертировать Afex или модели автомобилей ANOVA в lmer? Наблюдаемые переменные
В afex
В пакете мы можем найти этот пример анализа ANOVA:
data(obk.long, package = "afex")
# estimate mixed ANOVA on the full design:
# can be written in any of these ways:
aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long,
observed = "gender")
aov_4(value ~ treatment * gender + (phase*hour|id), data = obk.long,
observed = "gender")
aov_ez("id", "value", obk.long, between = c("treatment", "gender"),
within = c("phase", "hour"), observed = "gender")
У меня вопрос, как я могу написать ту же модель в lme4
? В частности, я не знаю, как включить "наблюдаемый" термин?
Если я просто напишу
lmer(value ~ treatment * gender + (phase*hour|id), data = obk.long,
observed = "gender")
Я получаю сообщение об ошибке, говорящее, что наблюдаемый вариант недопустим.
Кроме того, если я просто уберу наблюдаемую опцию lmer
выдает ошибку:
Ошибка: количество наблюдений (=240) <= количество случайных эффектов (= 240) для термина (фаза * час | идентификатор); параметры случайных эффектов и остаточная дисперсия (или масштабный параметр), вероятно, не могут быть идентифицированы.
Где в синтаксисе lmer я должен указывать переменную между или внутри? Насколько я знаю, вы просто пишете зависимую переменную слева и все остальные переменные справа, а термин ошибки - (1|id).
Пакет "машина" использует idata для внутрисубъектной переменной.
2 ответа
Я мог бы не знать достаточно о классической теории ANOVA, чтобы полностью ответить на этот вопрос, но я возьму трещину. Сначала пара моментов:
observed
Аргумент, кажется, имеет отношение только к вычислению величины эффекта.
наблюдаемый: вектор "характер", указывающий, какие из переменных наблюдаются (т.е. измеряются) по сравнению с экспериментально манипулируемыми. Указанный размер эффекта по умолчанию (обобщенный eta-квадрат) требует правильной спецификации наблюдаемых [sic] (в отличие от манипулируемых) переменных.
... так что я думаю, ты будешь в безопасности, оставив это без внимания.
- если вы хотите переопределить ошибку, вы можете использовать
control=lmerControl(check.nobs.vs.nRE="ignore")
... но это, вероятно, не правильный путь вперед.
Я думаю, но не уверен, что это правильный путь:
m1 <- lmer(value ~ treatment * gender + (1|id/phase:hour), data = obk.long,
control=lmerControl(check.nobs.vs.nRE="ignore",
check.nobs.vs.nlev="ignore"),
contrasts=list(treatment=contr.sum,gender=contr.sum))
Это указывает на то, что взаимодействие phase
а также hour
варьируется в пределах id
, Остаточная дисперсия и (фаза за час внутри идентификатора) дисперсия смешаны (вот почему нам нужно переопределение lmerControl()
спецификации), поэтому не доверяйте этим конкретным оценкам дисперсии. Тем не менее, основные эффекты лечения и пола должны рассматриваться одинаково. Если вы загружаете lmerTest
вместо lmer
и беги summary(m1)
или же anova(m1)
он дает вам те же степени свободы (10) для фиксированных (пол и лечение) эффектов, которые вычисляются afex
,
lme
дает сопоставимые ответы, но необходимо заранее построить поэтапное взаимодействие:
library(nlme)
obk.long$ph <- with(obk.long,interaction(phase,hour))
m2 <- lme(value ~ treatment * gender,
random=~1|id/ph, data = obk.long,
contrasts=list(treatment=contr.sum,gender=contr.sum))
anova(m2,type="marginal")
Я не знаю, как восстановить afex
Тесты случайных эффектов.
Как правильно говорит Бен Болкер, просто уходи observed
из.
Кроме того, я бы не рекомендовал делать то, что вы хотите делать. Использование смешанной модели для набора данных без репликаций в каждой ячейке дизайна для каждого участника несколько сомнительно, так как не совсем понятно, как определить структуру случайных эффектов. Важно отметить, что Барр и соавт. максима "держи его максимальным" здесь не работает, как вы поняли. Проблема заключается в том, что модель перепараметризована (отсюда ошибка из lmer
).
Я рекомендую использовать ANOVA. Более подробное обсуждение именно этого вопроса можно найти в перекрестной проверке темы, где мы с Беном обсуждали это более подробно.