Minha pergunta é baseada nesta resposta que mostrou qual lme4::lmer
modelo corresponde a uma ANOVA de medidas repetidas nos dois sentidos:
require(lme4)
set.seed(1234)
d <- data.frame(
y = rnorm(96),
subject = factor(rep(1:12, 4)),
a = factor(rep(1:2, each=24)),
b = factor(rep(rep(1:2, each=12))),
c = factor(rep(rep(1:2, each=48))))
# standard two-way repeated measures ANOVA:
summary(aov(y~a*b+Error(subject/(a*b)), d[d$c == "1",]))
# corresponding lmer call:
anova(lmer(y ~ a*b+(1|subject) + (1|a:subject) + (1|b:subject), d[d$c == "1",]))
Minha pergunta agora é sobre como estender isso ao caso de uma ANOVA de três vias:
summary(aov(y~a*b*c+Error(subject/(a*b*c)), d))
## [...]
## Error: subject:a:b:c
## Df Sum Sq Mean Sq F value Pr(>F)
## a:b:c 1 0.101 0.1014 0.115 0.741
## Residuals 11 9.705 0.8822
A extensão natural e suas versões não correspondem aos resultados da ANOVA:
anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject), d))
## [...]
## a:b:c 1 0.1014 0.1014 0.1500
anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject) +
(1|a:b:subject) + (1|a:c:subject) + (1|b:c:subject), d))
## [...]
## a:b:c 1 0.1014 0.1014 0.1539
Observe que uma pergunta muito semelhante foi feita antes . No entanto, estavam faltando dados de exemplo (que são fornecidos aqui).
r
anova
mixed-model
repeated-measures
lme4-nlme
Henrik
fonte
fonte
y ~ a*b + (1 + a*b|subject), d[d$c == "1",]
? Ou talvez eu esteja perdendo alguma coisa?lmer
irá reclamar porque os efeitos aleatórios não são mais identificados. Inicialmente, eu também pensei que esse é o modelo que eu quero, mas não é. Se você comparar o modelo mais recente que proponho para o caso de duas vias com a ANOVA padrão, você verá que os valores F correspondem exatamente . Como dito na resposta eu liguei.lmer
modelo que você escreveu (que exclui as interações aleatórias de duas vias) seja equivalente a uma RM-ANOVA de três vias, mas o segundo que você escreveu (que inclui a aleatória interações bidirecionais) deve ser. Quanto ao motivo pelo qual há uma discrepância, mesmo com esse modelo, tenho um palpite sobre qual é o problema. Ir para o jantar e examinar o conjunto de dados de brinquedos um pouco mais.Respostas:
A resposta direta à sua pergunta é que o último modelo que você escreveu,
Eu acredito que é "em princípio" correto, embora seja uma parametrização estranha que nem sempre parece funcionar bem na prática real.
Quanto ao motivo pelo qual a saída que você obtém deste modelo é discrepante com a
aov()
saída, acho que há duas razões.lmer()
(e a maioria dos outros programas de modelos mistos) não permitem.Deixe-me primeiro demonstrar a parametrização que eu prefiro no seu exemplo inicial de ANOVA de duas vias. Suponha que seu conjunto de dados
d
esteja carregado. Seu modelo (observe que eu mudei de códigos fictícios para códigos de contraste) era:que funcionou bem aqui, pois correspondia à
aov()
saída. O modelo que eu prefiro envolve duas alterações: codificar manualmente os fatores para não trabalhar com objetos de fator R (o que eu recomendo fazer em 100% dos casos) e especificar os efeitos aleatórios de maneira diferente:As duas abordagens são totalmente equivalentes no problema simples de duas vias. Agora vamos passar para um problema de três vias. Mencionei anteriormente que o exemplo de conjunto de dados que você deu era patológico. Então, o que eu quero fazer antes de abordar seu exemplo de conjunto de dados é primeiro gerar um conjunto de dados a partir de um modelo de componentes de variação real (ou seja, onde componentes de variação diferentes de zero são incorporados ao modelo verdadeiro). Primeiro, mostrarei como minha parametrização preferida parece funcionar melhor do que a que você propôs. Em seguida, demonstrarei outra maneira de estimar os componentes de variância que não impõem que eles sejam não negativos. Então, estaremos em condições de ver o problema com o conjunto de dados de exemplo original.
O novo conjunto de dados será idêntico em estrutura, exceto que teremos 50 assuntos:
As relações F que queremos corresponder são:
Aqui estão nossos dois modelos:
Como podemos ver, apenas o segundo método corresponde à saída de
aov()
, embora o primeiro método esteja pelo menos no estádio. O segundo método também atinge uma maior probabilidade de log. Não sei por que esses dois métodos dão resultados diferentes, pois, novamente, acho que são "em princípio" equivalentes, mas talvez seja por algumas razões numéricas / computacionais. Ou talvez eu esteja enganado e eles não sejam equivalentes nem em princípio.Agora vou mostrar outra maneira de estimar os componentes de variação com base nas idéias tradicionais da ANOVA. Basicamente, tomaremos as equações quadradas médias esperadas para o seu projeto, substituiremos os valores observados dos quadrados médios e resolveremos os componentes de variância. Para obter os quadrados médios esperados, usaremos uma função R que escrevi há alguns anos, chamada
EMS()
, que está documentada AQUI . Abaixo, assumo que a função já esteja carregada.Ok, agora retornaremos ao exemplo original. Os índices F que estamos tentando combinar são:
Aqui estão nossos dois modelos:
Nesse caso, os dois modelos produzem basicamente os mesmos resultados, embora o segundo método tenha uma probabilidade logarítmica muito ligeiramente maior. Nenhum método corresponde
aov()
. Mas vamos ver o que obtemos quando resolvemos os componentes de variação como fizemos acima, usando o procedimento ANOVA que não restringe os componentes de variação a não serem negativos (mas que só podem ser usados em projetos balanceados sem preditores contínuos e sem dados ausentes; as suposições clássicas da ANOVA).Agora podemos ver o que é patológico sobre o exemplo original. O modelo de melhor ajuste é aquele que implica que vários componentes de variação aleatória são negativos. Mas
lmer()
(e a maioria dos outros programas de modelos mistos) restringe as estimativas dos componentes de variação a não serem negativas. Isso geralmente é considerado uma restrição sensata, uma vez que as variações nunca podem, de fato, ser negativas. No entanto, uma conseqüência dessa restrição é que modelos mistos são incapazes de representar com precisão conjuntos de dados que apresentam correlações intraclasses negativas, ou seja, conjuntos de dados em que as observações do mesmo cluster são menos(em vez de mais) semelhante em média do que as observações extraídas aleatoriamente do conjunto de dados e, consequentemente, onde a variação dentro do cluster excede substancialmente a variação entre os conjuntos. Esses conjuntos de dados são perfeitamente razoáveis que, ocasionalmente, são encontrados no mundo real (ou simulam acidentalmente!), Mas não podem ser descritos de forma sensata por um modelo de variação-componentes, porque implicam componentes de variação negativos. No entanto, eles podem ser "não sensatos" descritos por esses modelos, se o software permitir.aov()
permite.lmer()
não.fonte
I am not sure why these two methods give different results, as again I think they are "in principle" equivalent, but maybe it is for some numerical/computational reasons
- você talvez entender isso melhor agora (dois anos depois)? Tentei descobrir qual é a diferença, mas também não a entendi ...A
(1|A:sub)
(0+A|sub)
lmer
chamadas produzemanova()
saída idêntica , as variações de efeito aleatório são, no entanto, bem diferentes: vejaVarCorr(mod1)
eVarCorr(mod2)
. Não entendo bem por que isso acontece; você? Paramod3
emod4
, pode-se ver que quatro de sete variações paramod3
são realmente iguais a zero (paramod4
todas as sete são diferentes de zero); essa "singularidade"mod3
é provavelmente o motivo pelo qual as tabelas anova diferem. Além disso, como você usaria o seu "caminho preferencial" sea
eb
teve mais de dois níveis?São
a
,b
,c
fixos ou efeitos aleatórios? Se eles forem corrigidos, sua sintaxe será simplesmentefonte
subject
, para todos os efeitos (por exemplo,Within
). Veja Design Experimental: Procedimentos para Ciências Comportamentais (2013) por Kirk, capítulo 10 (p.458) ou meu post aquilmer
? No entanto, vou receber minha cópia de Kirk (apenas na 2ª edição) e ver o que ela diz.lmer
modelos diferentes . A melhor maneira de verificar o ajuste do modelo é verificar seus dfs usando,lmerTest
porque a aproximação KR deve fornecer a vocêexact
dfs e, portanto, valores de p.