I modelli residui autocorrelati rimangono anche nei modelli con strutture di correlazione appropriate e come selezionare i modelli migliori?


17

Contesto

Questa domanda utilizza R, ma riguarda questioni statistiche generali.

Sto analizzando gli effetti dei fattori di mortalità (percentuale di mortalità dovuta a malattia e parassitismo) sul tasso di crescita della popolazione delle falene nel tempo, in cui le popolazioni larvali sono state campionate da 12 siti una volta all'anno per 8 anni. I dati sul tasso di crescita della popolazione mostrano una tendenza ciclica chiara ma irregolare nel tempo.

I residui di un semplice modello lineare generalizzato (tasso di crescita ~% malattia +% parassitismo + anno) hanno mostrato una tendenza ciclica altrettanto chiara ma irregolare nel tempo. Pertanto, i modelli dei minimi quadrati generalizzati della stessa forma sono stati anche adattati ai dati con strutture di correlazione appropriate per gestire l'autocorrelazione temporale, ad esempio simmetria composta, ordine di processo autoregressivo 1 e strutture di correlazione media mobile autoregressiva.

Tutti i modelli contenevano gli stessi effetti fissi, sono stati confrontati usando AIC e sono stati montati da REML (per consentire il confronto di diverse strutture di correlazione da AIC). Sto usando il pacchetto R nlme e la funzione gls.

Domanda 1

I residui dei modelli GLS mostrano ancora schemi ciclici quasi identici se tracciati contro il tempo. Tali schemi rimarranno sempre, anche nei modelli che tengono conto in modo accurato della struttura di autocorrelazione?

Ho simulato alcuni dati semplificati ma simili in R sotto la mia seconda domanda, che mostra il problema in base alla mia attuale comprensione dei metodi necessari per valutare i modelli temporizzati autocorrelati nei residui del modello , che ora so che sono sbagliati (vedi risposta).

Domanda 2

Ho adattato i miei modelli GLS con tutte le possibili strutture di correlazione plausibili ai miei dati, ma nessuno è in realtà sostanzialmente più adatto del GLM senza alcuna struttura di correlazione: solo un modello GLS è leggermente migliore (punteggio AIC = 1,8 inferiore), mentre tutto il resto ha valori AIC più alti. Tuttavia, questo è solo il caso in cui tutti i modelli sono montati da REML, non ML dove i modelli GLS sono chiaramente molto migliori, ma ho capito dai libri di statistica che devi solo usare REML per confrontare i modelli con diverse strutture di correlazione e gli stessi effetti fissi per motivi Non dettaglia qui.

Data la natura chiaramente correlata temporalmente dei dati, se nessun modello è anche moderatamente migliore del semplice GLM qual è il modo più appropriato per decidere quale modello utilizzare per l'inferenza, supponendo che sto usando un metodo appropriato (eventualmente voglio usare AIC per confrontare diverse combinazioni di variabili)?

Q1 'simulazione' che esplora modelli residui in modelli con e senza strutture di correlazione appropriate

Genera una variabile di risposta simulata con un effetto ciclico di "tempo" e un effetto lineare positivo di "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 dovrebbe mostrare una tendenza ciclica nel 'tempo' con variazione casuale:

plot(time,y)

E una relazione lineare positiva con 'x' con variazione casuale:

plot(x,y)

Crea un semplice modello additivo lineare di "y ~ time + x":

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

Il modello mostra chiari schemi ciclici nei residui quando tracciati contro il 'tempo', come ci si aspetterebbe:

plot(time, m1$residuals)

E quale dovrebbe essere una bella, chiara mancanza di qualsiasi modello o tendenza nei residui quando tracciata contro 'x':

plot(x, m1$residuals)

Un semplice modello di "y ~ time + x" che include una struttura di correlazione autoregressiva dell'ordine 1 dovrebbe adattarsi molto meglio ai dati rispetto al modello precedente a causa della struttura di autocorrelazione, quando valutato utilizzando AIC:

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

Tuttavia, il modello dovrebbe comunque mostrare residui autocorrelati quasi identici 'temporalmente':

plot(time, m2$residuals)

Grazie mille per qualsiasi consiglio.


Il tuo modello non acquisisce correttamente la dipendenza temporale causata dai cicli (anche per il tuo caso simulato), quindi la tua caratterizzazione di " conto accurato " non è appropriata. La ragione per cui hai ancora dei modelli nei tuoi residui è probabilmente per questo.
Glen_b

Penso che tu l'abbia al contrario. Le stime dovrebbero essere ottenute utilizzando la massima verosimiglianza anziché REML. La scelta del metodo = "ML" è necessaria per eseguire i test del rapporto di verosimiglianza ed è necessaria se si desidera utilizzare l'AIC per confrontare i modelli con diversi predittori. REML fornisce stime migliori dei componenti della varianza e degli errori standard rispetto a ML. Avendo usato method = "ML" per confrontare diversi modelli, a volte si raccomanda di rimontare il modello finale usando method = "REML" e di utilizzare le stime e gli errori standard dall'adattamento REML per l'inferenza finale.
theforestecologist

Risposte:


24

Q1

Stai facendo due cose sbagliate qui. Il primo è generalmente negativo; non a scavare generale in oggetti del modello e strappare componenti. Impara a usare le funzioni di estrazione, in questo caso resid(). In questo caso stai ottenendo qualcosa di utile ma se avessi un diverso tipo di oggetto modello, come un GLM glm(), allora mod$residualsconterresti i residui di lavoro dell'ultima iterazione IRLS e sei qualcosa che generalmente non vuoi!

La seconda cosa che stai facendo di sbagliato è qualcosa che mi ha sorpreso. I residui che hai estratto (e che avresti anche estratto se avessi usato resid()) sono i residui grezzi o di risposta. Fondamentalmente questa è la differenza tra i valori adattati e i valori osservati della risposta, tenendo conto solo dei termini degli effetti fissi . Questi valori conterranno la stessa autocorrelazione residua di quella di m1perché gli effetti fissi (o, se preferite, il predittore lineare) sono gli stessi nei due modelli ( ~ time + x).

Per ottenere i residui che includono il termine di correlazione specificato, sono necessari i residui normalizzati . Ottieni questi facendo:

resid(m1, type = "normalized")

Questo (e altri tipi di residui disponibili) è descritto in ?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"’.

A titolo di confronto, ecco gli ACF dei residui grezzi (risposta) e quelli normalizzati

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

inserisci qui la descrizione dell'immagine

Per capire perché ciò sta accadendo e dove i residui grezzi non includono il termine di correlazione, considera il modello che hai adattato

y=β0+β1tiome+β2X+ε

dove

ε~N(0,σ2Λ)

Λρ^ρ|d|d

I residui grezzi, il valore predefinito restituito resid(m2)sono solo dalla parte del predittore lineare, quindi da questo bit

β0+β1tiome+β2X

Λ

Q2

Sembra che tu stia cercando di adattare una tendenza non lineare con una funzione lineare timee tenere conto della mancanza di adattamento alla "tendenza" con un AR (1) (o altre strutture). Se i tuoi dati sono qualcosa di simile ai dati di esempio che fornisci qui, vorrei inserire un GAM per consentire una funzione regolare delle covariate. Questo modello sarebbe

y=β0+f1(tiome)+f2(X)+ε

Λ=io

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

dove si select = TRUEapplica un ulteriore restringimento per consentire al modello di rimuovere uno dei termini dal modello.

Questo modello 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 ha termini uniformi che assomigliano a questo:

inserisci qui la descrizione dell'immagine

Anche i residui di questo modello si comportano meglio (residui grezzi)

acf(resid(m3))

inserisci qui la descrizione dell'immagine

Ora un avvertimento; c'è un problema con il livellamento delle serie temporali in quanto i metodi che decidono in che modo le funzioni siano fluide o oscillanti presuppongono che i dati siano indipendenti. Ciò che ciò significa in termini pratici è che la funzione regolare del tempo ( s(time)) potrebbe adattarsi a informazioni che sono errori casuali correlati automaticamente e non solo alla tendenza sottostante. Pertanto, è necessario prestare molta attenzione quando si adattano gli smoothers ai dati delle serie temporali.

Esistono diversi modi per aggirare questo, ma un modo è quello di passare al raccordo del modello tramite il gamm()quale chiama lme()internamente e che consente di utilizzare l' correlationargomento utilizzato per il gls()modello. Ecco un esempio

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)ρ=0s(time)ρ>>.5

Il modello con AR (1) non rappresenta un miglioramento significativo rispetto al modello senza 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 guardiamo il preventivo per $ \ hat {\ rho}} vediamo

> intervals(mm2$lme)
....

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

Phiρρ


Grazie mille Gavin per l'eccellente, approfondita risposta dettagliata. Sembra che i miei dati producano un risultato qualitativamente simile con i GAM, in quanto c'è un miglioramento molto scarso o un peggioramento dell'adattamento (valutato tramite AIC / AICc) quando si confronta un GAM con e senza le strutture di correlazione standard. Sai tu / qualcuno: se ci sono tendenze cicliche molto chiare, se irregolari, nei dati / residui, sarebbe quindi più appropriato attenersi alla struttura di correlazione più adatta piuttosto che a un modello senza nessuno? Grazie ancora.
Giove M104,

1
Arriva in ritardo, ma voglio ringraziare Gavin per questa fantastica risposta. Mi ha aiutato un sacco.
giraffehere,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.