Comparações múltiplas de modelo misto para interação entre preditores contínuo e categórico

11

Eu gostaria de usar lme4para ajustar uma regressão de efeitos mistos e multcompcalcular as comparações aos pares. Eu tenho um conjunto de dados complexo com vários preditores contínuos e categóricos, mas minha pergunta pode ser demonstrada usando o ChickWeightconjunto de dados interno como exemplo:

m <- lmer(weight ~ Time * Diet + (1 | Chick), data=ChickWeight, REML=F)

Timeé contínuo e Dieté categórico (4 níveis) e existem vários pintinhos por dieta. Todos os filhotes começaram com o mesmo peso, mas suas dietas (podem) afetam sua taxa de crescimento; portanto, as Dietinterceptações devem ser (mais ou menos) iguais, mas as inclinações podem ser diferentes. Posso obter comparações aos pares para o efeito de interceptação Dietcomo este:

summary(glht(m, linfct=mcp(Diet = "Tukey")))

e, de fato, eles não são significativamente diferentes, mas como posso fazer o teste análogo para o Time:Dietefeito? Apenas colocar o termo de interação mcpproduz um erro:

summary(glht(m, linfct=mcp('Time:Diet' = "Tukey")))
Error in summary(glht(m, linfct = mcp(`Time:Diet` = "Tukey"))) : 
  error in evaluating the argument 'object' in selecting a method for function
 'summary': Error in mcp2matrix(model, linfct = linfct) : 
Variable(s) Time:Diet have been specified in linfct but cannot be found in model’! 
Dan M.
fonte
Tem Time*Diet, que é apenas uma simplificação de Time + Diet + Time:Diet. Usar anova(m)ou summary(m)confirmar que o termo de interação está no modelo.
Dan M.

Respostas:

8

Por padrão, lmertrata o nível de referência de um preditor categórico como a linha de base e estima parâmetros para os outros níveis. Portanto, você obtém algumas comparações aos pares na saída padrão e pode obter as outras usando relevelpara definir um novo nível de referência e reajustar o modelo. Isso tem a vantagem de permitir que você use comparações de modelo ou MCMC para obter os valores-p, mas não corrige várias comparações (embora você possa aplicar sua própria correção posteriormente).

Para usar multcomp, você precisa definir a matriz de contraste. Cada linha na matriz de contraste representa pesos para os efeitos que você obtém na saída do modelo padrão, começando com o Intercept. Portanto, se você deseja um efeito que já esteja incluído na saída básica, basta colocar um "1" na posição correspondente a esse efeito. Como as estimativas de parâmetro são relativas a um nível de referência comum, é possível obter comparações entre outros dois níveis, definindo o peso de um para "-1" e do outro "1". Veja como isso funcionaria para os Time:Diettermos do ChickWeightexemplo:

contrast.matrix <- rbind("Time:Diet1 vs. Time:Diet2" =  c(0, 0, 0, 0, 0, 1, 0, 0),
                           "Time:Diet1 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, 0, 1, 0),
                           "Time:Diet1 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, 0, 1),
                           "Time:Diet2 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, -1, 1, 0),
                           "Time:Diet2 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, -1, 0, 1),
                           "Time:Diet3 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, -1, 1))
summary(glht(m, contrast.matrix))

Advertência: esta abordagem parece usar a aproximação normal para obter valores-p, que é um pouco anti-conservador e, em seguida, aplica alguma correção para comparações múltiplas. O resultado é que esse método fornece acesso fácil a quantas estimativas de parâmetros emparelhadas e erros padrão você desejar, mas os valores-p podem ou não ser o que você deseja.

(Obrigado a Scott Jackson, do r-ling-lang-L, pela ajuda)

Dan M.
fonte