Atualização de maio de 2017 : Acontece que muito do que escrevi aqui é meio errado . Algumas atualizações são feitas ao longo do post.
Eu concordo muito com o que já foi dito por Ben Bolker (obrigado pela mensagem afex::mixed()
), mas deixe-me acrescentar algumas idéias mais gerais e específicas sobre esse assunto.
Concentre-se em efeitos fixos versus efeitos aleatórios e em como reportar resultados
Para o tipo de pesquisa experimental representada no conjunto de dados de exemplo de Jonathan Baron, você usa a pergunta importante: geralmente se um fator manipulado tem ou não um efeito geral. Por exemplo, encontramos um efeito principal geral ou interação de Task
? Um ponto importante é que nesses conjuntos de dados geralmente todos os fatores estão sob controle experimental completo e são aleatoriamente designados. Consequentemente, o foco de interesse geralmente é nos efeitos fixos.
Por outro lado, os componentes de efeitos aleatórios podem ser vistos como parâmetros "incômodos" que capturam variação sistemática (isto é, diferenças interindividuais no tamanho do efeito) que não são necessariamente importantes para a questão principal. Desse ponto de vista, sugere-se o uso da estrutura máxima de efeitos aleatórios, como preconizado por Barr et al. segue um pouco naturalmente. É fácil imaginar que uma manipulação experimental não afeta todos os indivíduos da mesma maneira e queremos controlar isso. Por outro lado, o número de fatores ou níveis geralmente não é muito grande, de modo que o risco de sobreajuste parece comparativamente pequeno.
Consequentemente, eu seguiria a sugestão de Barr et al. e especifique uma estrutura máxima de efeitos aleatórios e relate os testes dos efeitos fixos como meus principais resultados. Para testar os efeitos fixos, sugiro também usarafex::mixed()
pois ele relata testes de efeitos ou fatores (em vez de testes de parâmetros) e calcula esses testes de uma maneira um tanto sensível (por exemplo, usa a mesma estrutura de efeitos aleatórios para todos os modelos em que um o efeito único é removido, usa contrastes soma-zero, oferece métodos diferentes para calcular valores- p , ...).
E os dados de exemplo
O problema com os dados de exemplo que você forneceu é que, para esse conjunto de dados, a estrutura máxima de efeitos aleatórios leva a um modelo super saturado, pois há apenas um ponto de dados por célula do design:
> with(df, table(Valence, Subject, Task))
, , Task = Cued
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
, , Task = Free
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
Consequentemente, lmer
engasga com a estrutura máxima de efeitos aleatórios:
> lmer(Recall~Task*Valence + (Valence*Task|Subject), df)
Error: number of observations (=30) <= number of random effects (=30) for term
(Valence * Task | Subject); the random-effects parameters and the residual variance
(or scale parameter) are probably unidentifiable
Infelizmente, até onde sei, não existe uma maneira acordada de lidar com esse problema. Mas deixe-me esboçar e discutir algumas:
Uma primeira solução poderia ser remover a maior inclinação aleatória e testar os efeitos para este modelo:
require(afex)
mixed(Recall~Task*Valence + (Valence+Task|Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 6.56 1 4.00 1.00 .06
2 Valence 0.80 2 3.00 0.75 .53
3 Task:Valence 0.42 2 8.00 1.00 .67
No entanto, essa solução é um pouco ad-hoc e não excessivamente motivada.
Atualização de maio de 2017: esta é a abordagem que estou adotando atualmente. Veja esta postagem no blog e o rascunho do capítulo em que sou coautor. , seção "Estruturas de efeitos aleatórios para projetos tradicionais de ANOVA".
Uma solução alternativa (e que poderia ser vista como defendida pela discussão de Barr et al.) Poderia ser sempre remover as inclinações aleatórias para o menor efeito. Porém, isso tem dois problemas: (1) Que estrutura de efeitos aleatórios usamos para descobrir qual é o menor efeito e (2) R reluta em remover um efeito de ordem inferior, como um efeito principal, se efeitos de ordem superior, como um efeito interação deste efeito está presente (consulte aqui ). Como conseqüência, seria necessário configurar essa estrutura de efeitos aleatórios manualmente e passar a matriz do modelo assim construído para a chamada mais próxima.
Uma terceira solução poderia ser usar uma parametrização alternativa da parte de efeitos aleatórios, a saber, uma que corresponda ao modelo RM-ANOVA para esses dados. Infelizmente (?), lmer
Não permite "variações negativas", portanto essa parametrização não corresponde exatamente ao RM-ANOVA para todos os conjuntos de dados ; veja a discussão aqui e em outros lugares (por exemplo, aqui e aqui ). O "lmer-ANOVA" para esses dados seria:
> mixed(Recall~Task*Valence + (1|Subject) + (1|Task:Subject) + (1|Valence:Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 7.35 1 4.00 1.00 .05
2 Valence 1.46 2 8.00 1.00 .29
3 Task:Valence 0.29 2 8.00 1.00 .76
Considerando todos esses problemas, eu simplesmente não usaria lmer
para ajustar conjuntos de dados para os quais existe apenas um ponto de dados por célula do design, a menos que esteja disponível uma solução mais acordada para o problema da estrutura de efeitos aleatórios máxima.
Em vez disso, eu também poderia usar a ANOVA clássica. Usar um dos wrappers para car::Anova()
nos afex
resultados seria:
> aov4(Recall~Task*Valence + (Valence*Task|Subject), df)
Effect df MSE F ges p
1 Valence 1.44, 5.75 4.67 1.46 .02 .29
2 Task 1, 4 4.08 7.35 + .07 .05
3 Valence:Task 1.63, 6.52 2.96 0.29 .003 .71
Observe que afex
agora também permite retornar o modelo equipado com o aov
qual pode ser passado para lsmeans
testes post-hoc (mas, para testes de efeitos, os relatados por car::Anova
ainda são mais razoáveis):
> require(lsmeans)
> m <- aov4(Recall~Task*Valence + (Valence*Task|Subject), df, return = "aov")
> lsmeans(m, ~Task+Valence)
Task Valence lsmean SE df lower.CL upper.CL
Cued Neg 11.8 1.852026 5.52 7.17157 16.42843
Free Neg 10.2 1.852026 5.52 5.57157 14.82843
Cued Neu 13.0 1.852026 5.52 8.37157 17.62843
Free Neu 11.2 1.852026 5.52 6.57157 15.82843
Cued Pos 13.6 1.852026 5.52 8.97157 18.22843
Free Pos 11.0 1.852026 5.52 6.37157 15.62843
Confidence level used: 0.95