Teste e testes de múltiplos efeitos aleatórios

8

Estou curioso para saber como o pacote lmerTest em R, especificamente a função "rand", lida com testes de efeitos aleatórios. Considere o exemplo do pdf lmerTest no CRAN que usa o conjunto de dados incorporado "cenouras":

#import lme4 package and lmerTest package
  library(lmerTest)
#lmer model with correlation between intercept and slopes
#in the random part
  m <- lmer(Preference ~ sens2+Homesize+(1+sens2|Consumer), data=carrots)
# table with p-values for the random effects
  rand(m)

O modelo especifica duas variações aleatórias (a interceptação e "sens2"), ambas aninhadas em "Consumidor" e a covariância entre a interceptação e "sens2". A saída (não fornecida no pdf) para os componentes aleatórios da execução anterior é a seguinte:

Random effects:
Groups   Name        Variance Std.Dev. Corr
Consumer (Intercept) 0.195168 0.44178      
         sens2       0.002779 0.05271  0.18
Residual             1.070441 1.03462      
Number of obs: 1233, groups:  Consumer, 103

O que é esperado, dada a especificação do modelo. A saída da função rand é a seguinte:

Analysis of Random effects Table:
                 Chi.sq Chi.DF p.value  
sens2:Consumer   6.99      2    0.03 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Dada a tabela de efeitos aleatórios, acho que o lmerTest está avaliando a inclinação aleatória para "sens2", mas também pode ser a covariância entre a inclinação e a interceptação. O teste para a interceptação aleatória não está incluído. Estimei outro modelo apenas com a interceptação aleatória (sem inclinação aleatória ou covariância) e obtive o seguinte da declaração "rand":

Analysis of Random effects Table:
           Chi.sq Chi.DF p.value    
Consumer   79.6      1  <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

O teste para a variação aleatória associada à interceptação é fornecido aqui. Então, alguém sabe o que o teste dos componentes de variação aleatória do primeiro modelo está testando? Existe uma maneira que eu não consiga ver na documentação para testar todos os três componentes aleatórios? Devo mencionar que a página para o teste de rand em inside-R.org tem a seguinte descrição confusa (que não vejo no pdf em CRAN):

Values
Produces a data frame with tests for the random terms being non-significant.

Note
If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance

É possível que a descrição de "Valores" a retroceda e que apenas efeitos significativos sejam relatados? Executei o procedimento "step" e não ficou claro se todos os três componentes de variação aleatória foram considerados na execução.

Qualquer visão sobre o assunto é muito apreciada.

Joe

EDIT: O enredo engrossa um pouco. Ocorreu-me verificar uma estrutura de covariância "diagonal" (sem covariância entre a interceptação aleatória e a inclinação) usando o seguinte (com base neste excelente post ):

m2 <- lmer(Preference ~ sens2+Homesize+(1|Consumer)+(0+sens2|Consumer), data=carrots)

A saída final para as variações aleatórias, usando VarCorr, é a seguinte:

Groups     Name        Std.Dev.
Consumer   (Intercept) 0.441807
Consumer.1 sens2       0.052719
Residual               1.034618

O que omite corretamente a covariância (correlação) entre a inclinação aleatória e a interceptação. A execução da função "rand" do lmerTest produz a seguinte saída:

Analysis of Random effects Table:
                 Chi.sq Chi.DF p.value    
Consumer         84.4      1  <2e-16 ***
sens2:Consumer    6.3      1    0.01 *  
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Portanto, ele testará os dois componentes de variação para este modelo. Mas a questão permanece em relação ao primeiro modelo com a covariância aleatória. O que é o teste lmerTest?

BBJonz
fonte

Respostas:

2

A documentação sobre a lmerTest::rand()função é definitivamente concisa.

Pelo que pude reunir, acho que testa a hipótese de que a variação do efeito aleatório (ou seja, uma interceptação variável (1 | Consumer) ) é significativa versus a nula de que não há variação entre os níveis do grupo, , em que para é o indicador de grupo. (Estou seguindo a notação de Gelman & Hill (2007), ver cap. 12).H0 0:σα2=0 0αj[Eu]N(μα,σα2)j=1,,J


Como não sou especialista, o código me confundiu um pouco. Especificamente, não sei ao certo o que a elimRandEffsfunção faz, mas acho que ela está convertendo para um termo fixo (que é agrupado) e, em seguida, comparando-a com o modelo original. Espero que alguém com maior conhecimento possa esclarecer isso.αj[Eu]α

Do lado teórico, randdeve estar realizando algo como o teste proposto em Lee e Braun 2012 . No entanto, diferentemente de sua extensão para testar efeitos aleatórios por vez (seção 3.2), a saída parece testar apenas um efeito aleatório por vez. Um resumo mais simples da mesma idéia está nos slides 10-12 encontrados aqui .0 0<rqrand


Portanto, sua intuição de que "o lmerTest está avaliando a inclinação aleatória para 'sens2' [e] também pode ser a covariância entre a inclinação e a interceptação" é correta nesses randtestes se as variações de efeito aleatório forem significativamente diferentes de zero.

Mas é incorreto dizer que "o teste para a interceptação aleatória não está incluído". O ER em sua primeira especificação:

 (1 + sens2 | Consumer) 

assume uma correlação diferente de zero entre a interceptação e a inclinação, o que significa que elas variam juntas e, portanto, rand()testa essa especificação contra um modelo sem ER (ou seja, reduzindo a regressão clássica).

A segunda especificação

 (1  | Consumer) + (0 + sens2 | Consumer) 

fornece duas linhas de saída porque os efeitos aleatórios são aditivamente separáveis. Aqui, randtesta (na 1ª linha de saída) um modelo com uma interceptação em pool / fixa com uma inclinação aleatória em relação à sua especificação. Na 2ª linha, o teste é contra uma inclinação agrupada com uma interceptação aleatória. Assim, como a stepfunção, randtesta um RE independente, um de cada vez.

Ainda estou intrigado com inside-R.org note que

  Note
  If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance

Isso não está na documentação do pacote, então não sei de onde veio nem onde esse teste seria encontrado na saída.

EDITAR

Acho que estou errado sobre o modelo nulo em um modelo de inclinação / interceptação correlacionado, como na primeira especificação. A stepdocumentação diz:

na parte aleatória, se houver correlação entre inclinação e interceptação, o modelo simplificado conterá apenas uma interceptação. Ou seja, se a parte aleatória do modelo inicial for (1 + c | f), esse modelo será comparado a (1 | f) usando LRT.

Eu imagino que o mesmo princípio esteja em ação rand.

Tony Beans
fonte
1

A documentação do lmerTest descreve rand()como produzindo

"... um vetor de estatísticas do quadrado do Chi e valores p correspondentes aos testes da razão de verossimilhança."

Portanto, acredito que seja um teste de razão de verossimilhança. Isto é, simplesmente, a comparação de um modelo com um determinado efeito aleatório com o mesmo modelo sem o efeito aleatório.

Em relação ao exemplo, rand()compara o modelo com uma inclinação aleatória de sens2 dentro do Consumidor com um modelo com a interceptação aleatória do Consumidor .

Calcule os dois modelos:

m <- lmer(Preference ~ sens2+Homesize+(1+sens2|Consumer), data=carrots, REML = FALSE)
m2 <- lmer(Preference ~ sens2+Homesize+(1|Consumer), data=carrots, REML = FALSE)

Examine a saída de rand(m):

rand(m)
Analysis of Random effects Table:
           Chi.sq Chi.DF p.value  
sens2:Consumer   6.99      2    0.03 *

Execute o teste da razão de verossimilhança comparando o modelo m com o modelo m2 :

anova(m, m2, test = "Chi")
   Df  AIC    BIC    logLik  deviance  Chisq   Chi Df Pr(>Chisq)  
m   5 3751.4 3777.0 -1870.7   3741.4                           
m2  7 3748.7 3784.5 -1867.4   3734.7   6.6989    2     0.0351 *

De fato, o anova() Chisq é um pouco menor que o de rand(m), mas por outro lado, a saída é essencialmente idêntica. Talvez minha interpretação seja imprecisa, mas sempre assumi que era assim que a rand()função gerava sua saída.

JMB
fonte