Os padrões residuais autocorrelacionados permanecem mesmo em modelos com estruturas de correlação apropriadas, e como selecionar os melhores modelos?

17

Contexto

Esta pergunta usa R, mas trata de questões estatísticas gerais.

Estou analisando os efeitos dos fatores de mortalidade (% de mortalidade por doenças e parasitismo) na taxa de crescimento populacional da mariposa ao longo do tempo, onde populações de larvas foram amostradas de 12 locais uma vez por ano durante 8 anos. Os dados da taxa de crescimento populacional exibem uma tendência cíclica clara, porém irregular, ao longo do tempo.

Os resíduos de um modelo linear generalizado simples (taxa de crescimento ~% de doença +% parasitismo + ano) apresentaram uma tendência cíclica igualmente clara, porém irregular, ao longo do tempo. Portanto, modelos de mínimos quadrados generalizados da mesma forma também foram ajustados aos dados com estruturas de correlação apropriadas para lidar com a autocorrelação temporal, por exemplo, simetria composta, ordem de processo autoregressiva 1 e estruturas de correlação de média móvel autoregressiva.

Todos os modelos continham os mesmos efeitos fixos, foram comparados usando o AIC e foram ajustados pelo REML (para permitir a comparação de diferentes estruturas de correlação pelo AIC). Estou usando o pacote R nlme e a função gls.

Questão 1

Os resíduos dos modelos GLS ainda exibem padrões cíclicos quase idênticos quando plotados contra o tempo. Esses padrões sempre permanecerão, mesmo em modelos que explicam com precisão a estrutura de autocorrelação?

Simulei alguns dados simplificados, mas similares, em R abaixo da minha segunda pergunta, que mostra o problema com base no meu entendimento atual dos métodos necessários para avaliar padrões autocorrelacionados temporalmente em resíduos de modelo , que agora sei que estão errados (ver resposta).

Questão 2

Eu ajustei os modelos GLS com todas as estruturas de correlação plausíveis possíveis para os meus dados, mas nenhum é realmente muito melhor do que o GLM sem nenhuma estrutura de correlação: apenas um modelo GLS é marginalmente melhor (pontuação AIC = 1,8 mais baixa), enquanto todo o resto tem valores mais altos de AIC. No entanto, esse é apenas o caso quando todos os modelos são ajustados pelo REML, não pelo ML, onde os modelos GLS são claramente muito melhores, mas eu entendo nos livros de estatísticas que você só deve usar o REML para comparar modelos com diferentes estruturas de correlação e os mesmos efeitos fixos por razões Não vou detalhar aqui.

Dada a natureza claramente correlacionada temporalmente dos dados, se nenhum modelo é moderadamente melhor que o GLM simples, qual é a maneira mais apropriada de decidir qual modelo usar para inferência, supondo que eu esteja usando um método apropriado (eu finalmente quero usar AIC para comparar diferentes combinações de variáveis)?

Q1 'simulação' explorando padrões residuais em modelos com e sem estruturas de correlação apropriadas

Gere variável de resposta simulada com um efeito cíclico de 'tempo' e um efeito linear positivo de 'x':

time <- 1:50
x <- sample(rep(1:25,each=2),50)
y <- rnorm(50,5,5) + (5 + 15*sin(2*pi*time/25)) + (x/1)

y deve exibir uma tendência cíclica ao longo do 'tempo' com variação aleatória:

plot(time,y)

E uma relação linear positiva com 'x' com variação aleatória:

plot(x,y)

Crie um modelo aditivo linear simples de "y ~ time + x":

require(nlme)
m1 <- gls(y ~ time + x, method="REML")

O modelo exibe padrões cíclicos claros nos resíduos quando plotados em relação ao 'tempo', como seria de esperar:

plot(time, m1$residuals)

E o que deve ser uma falta clara e agradável de qualquer padrão ou tendência nos resíduos quando plotados contra 'x':

plot(x, m1$residuals)

Um modelo simples de "y ~ time + x" que inclua uma estrutura de correlação autoregressiva de ordem 1 deve ajustar os dados muito melhor do que o modelo anterior devido à estrutura de autocorrelação, quando avaliada usando AIC:

m2 <- gls(y ~ time + x, correlation = corAR1(form=~time), method="REML")
AIC(m1,m2)

No entanto, o modelo ainda deve exibir resíduos idênticos 'temporalmente' autocorrelacionados:

plot(time, m2$residuals)

Muito obrigado por qualquer conselho.

JupiterM104
fonte
Seu modelo não captura adequadamente a dependência de tempo causada pelos ciclos (mesmo para o seu caso simulado); portanto, sua caracterização de ' contabilizar com precisão ' não é apropriada. A razão pela qual você ainda tem padrão em seus resíduos é provavelmente por causa disso.
Glen_b -Reinstala Monica
Eu acho que você tem ao contrário. As estimativas devem ser obtidas usando a máxima probabilidade máxima em vez de REML. A escolha do método = "ML" é necessária para a realização de testes de razão de verossimilhança e é necessária se você deseja usar o AIC para comparar modelos com preditores diferentes. REML fornece melhores estimativas dos componentes de variação e erros padrão do que ML. Tendo usado o método = "ML" para comparar diferentes modelos, às vezes é recomendável que o modelo final seja reequipado usando o método = "REML" e que as estimativas e erros padrão do ajuste REML sejam usados ​​para a inferência final.
Theforestecologist
Para obter mais evidências, consulte as respostas a este post: REML ou ML para comparar dois modelos de efeitos mistos com diferentes efeitos fixos, mas com o mesmo efeito aleatório?
Theforestecologist

Respostas:

24

Q1

Você está fazendo duas coisas erradas aqui. A primeira é uma coisa geralmente ruim; em geral, não mergulhe nos objetos de modelo e retire componentes. Aprenda a usar as funções do extrator, neste caso resid(). Nesse caso, você está obtendo algo útil, mas se você tivesse um tipo diferente de objeto de modelo, como um GLM de glm(), mod$residualsconteria resíduos de trabalho da última iteração IRLS e é algo que geralmente não deseja!

A segunda coisa que você está fazendo de errado é algo que também me chamou a atenção. Os resíduos que você extraiu (e também teria extraído se você tivesse usado resid()) são os resíduos brutos ou de resposta. Essencialmente, essa é a diferença entre os valores ajustados e os valores observados da resposta, levando em consideração apenas os termos de efeitos fixos . Esses valores conterão a mesma autocorrelação residual que m1a dos efeitos fixos (ou se você preferir, o preditor linear) são os mesmos nos dois modelos ( ~ time + x).

Para obter resíduos que incluem o termo de correlação especificado, você precisa dos resíduos normalizados . Você obtém estes fazendo:

resid(m1, type = "normalized")

Este (e outros tipos de resíduos disponíveis) é descrito em ?residuals.gls:

type: an optional character string specifying the type of residuals
      to be used. If ‘"response"’, the "raw" residuals (observed -
      fitted) are used; else, if ‘"pearson"’, the standardized
      residuals (raw residuals divided by the corresponding
      standard errors) are used; else, if ‘"normalized"’, the
      normalized residuals (standardized residuals pre-multiplied
      by the inverse square-root factor of the estimated error
      correlation matrix) are used. Partial matching of arguments
      is used, so only the first character needs to be provided.
      Defaults to ‘"response"’.

Por meio de comparação, aqui estão os ACFs dos resíduos brutos (resposta) e os resíduos normalizados

layout(matrix(1:2))
acf(resid(m2))
acf(resid(m2, type = "normalized"))
layout(1)

insira a descrição da imagem aqui

Para ver por que isso está acontecendo e onde os resíduos brutos não incluem o termo de correlação, considere o modelo que você ajustou

y=β0 0+β1tEume+β2x+ε

Onde

εN(0 0,σ2Λ)

Λρ^ρ|d|d

Os resíduos brutos, o padrão retornado por, resid(m2)são apenas da parte do preditor linear, portanto, deste bit

β0 0+β1tEume+β2x

Λ

Q2

Parece que você está tentando ajustar uma tendência não linear com uma função linear de timee explica a falta de ajuste à "tendência" com um AR (1) (ou outras estruturas). Se seus dados são parecidos com os dados de exemplo que você fornece aqui, eu ajustaria um GAM para permitir uma função suave das covariáveis. Esse modelo seria

y=β0 0+f1(tEume)+f2(x)+ε

Λ=Eu

library("mgcv")
m3 <- gam(y ~ s(time) + s(x), select = TRUE, method = "REML")

onde select = TRUEaplica alguma contração extra para permitir que o modelo remova qualquer um dos termos do modelo.

Este modelo dá

> summary(m3)

Family: gaussian 
Link function: identity 

Formula:
y ~ s(time) + s(x)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  23.1532     0.7104   32.59   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
          edf Ref.df      F  p-value    
s(time) 8.041      9 26.364  < 2e-16 ***
s(x)    1.922      9  9.749 1.09e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

e possui termos suaves que são assim:

insira a descrição da imagem aqui

Os resíduos desse modelo também são mais bem comportados (resíduos brutos)

acf(resid(m3))

insira a descrição da imagem aqui

Agora uma palavra de cautela; há um problema com a suavização de séries temporais, na medida em que os métodos que decidem o quão suave ou distorcida são as funções assumem que os dados são independentes. O que isso significa em termos práticos é que a função suave de time ( s(time)) pode caber em informações que são realmente erros aleatórios correlacionados automaticamente e não apenas na tendência subjacente. Portanto, você deve ter muito cuidado ao ajustar os smoothers aos dados de séries temporais.

Há várias maneiras de contornar isso, mas uma maneira é mudar para ajustar o modelo através do gamm()qual chama lme()internamente e que permite que você use o correlationargumento usado para o gls()modelo. Aqui está um exemplo

mm1 <- gamm(y ~ s(time, k = 6, fx = TRUE) + s(x), select = TRUE,
            method = "REML")
mm2 <- gamm(y ~ s(time, k = 6, fx = TRUE) + s(x), select = TRUE,
            method = "REML", correlation = corAR1(form = ~ time))

s(time)s(time)ρ=0 0s(time)ρ>>.5

O modelo com o AR (1) não representa uma melhoria significativa em relação ao modelo sem o AR (1):

> anova(mm1$lme, mm2$lme)
        Model df      AIC      BIC    logLik   Test   L.Ratio p-value
mm1$lme     1  9 301.5986 317.4494 -141.7993                         
mm2$lme     2 10 303.4168 321.0288 -141.7084 1 vs 2 0.1817652  0.6699

Se olharmos para a estimativa de $ \ hat {\ rho}}, veremos

> intervals(mm2$lme)
....

 Correlation structure:
         lower      est.     upper
Phi -0.2696671 0.0756494 0.4037265
attr(,"label")
[1] "Correlation structure:"

Phiρρ

Restabelecer Monica - G. Simpson
fonte
Muito obrigado, Gavin, pela excelente e detalhada resposta detalhada. Parece que meus dados produzem um resultado qualitativamente semelhante aos GAMs, pois há muito pouca melhora ou piora do ajuste (avaliado via AIC / AICc) ao comparar um GAM com e sem as estruturas de correlação padrão. Você / alguém sabe: se há tendências cíclicas muito claras, ou irregulares, nos dados / resíduos, seria mais apropriado seguir a estrutura de correlação mais adequada ao invés de um modelo sem nenhuma? Obrigado novamente.
JupiterM104
1
Chegando super tarde, mas queria agradecer a Gavin por esta resposta fantástica. Me ajudou uma tonelada.
Giraffehere 13/04