Domanda

Ho una serie temporale stazionaria a cui voglio montare un modello lineare con una durata autoregressiva per correggere correlazione seriale, cioè con la formula A = c1 * Bt + c2 * Ct + ut, dove ut = r * ut -1 + et

(ut è un AR (1) termine per correggere autocorrelazione nei termini di errore)

Qualcuno sa cosa usare in R per modellare questo?

Grazie Karl

È stato utile?

Soluzione

Il GLMMarp pacchetto si adatta questi modelli. Se si desidera solo un modello lineare con errori di Gauss, è possibile farlo con la funzione arima() in cui sono specificate le covariate tramite l'argomento xreg.

Altri suggerimenti

Ci sono diversi modi per fare questo in R. Ecco due esempi che utilizzano il "Seatbelts" serie temporale di dati nel pacchetto set di dati fornito con R.

La funzione arima() è disponibile in package: le statistiche che è incluso con R. La funzione prende un argomento della forma order=c(p, d, q) dove è possibile specificare l'ordine del auto-regressivo, integrato, e la componente media mobile. Nella tua domanda, suggerisci che si desidera creare un AR (1) il modello per correggere primo ordine autocorrelazione negli errori e questo è tutto. Possiamo farlo con il seguente comando:

arima(Seatbelts[,"drivers"], order=c(1,0,0),
      xreg=Seatbelts[,c("kms", "PetrolPrice", "law")])

Il valore per l'ordine specifica che vogliamo un (1) Modello AR. Il compontent XREG dovrebbe essere una serie di altri Xs vogliamo aggiungere come parte di una regressione. L'uscita sembra un po 'come l'uscita di summary.lm() girato su un lato.

Un altro processo alternativa potrebbe essere più familiare per il modo in cui hai modelli di regressione fit è quello di utilizzare gls() nel pacchetto NLME . Il codice seguente trasforma l'oggetto serie temporale delle cinture in dataframe e poi estratti e aggiunge una nuova colonna ( t ) che è solo un contatore nell'oggetto serie temporale ordinato:

Seatbelts.df <- data.frame(Seatbelts)
Seatbelts.df$t <- 1:(dim(Seatbelts.df)[1])

Le due linee sopra sono sempre i dati contenuti in forma. Poiché la funzione arima() è progettata per serie temporali, può leggere oggetti più facilmente serie temporale. Per adattare il modello con NLME si sarebbe poi eseguire:

library(nlme)
m <- gls(drivers ~ kms + PetrolPrice + law,
         data=Seatbelts.df,
         correlation=corARMA(p=1, q=0, form=~t))
summary(m)

La linea che inizia con "correlazione" è il modo in cui si passa nella struttura di correlazione ARMA a GLS. I risultati non saranno esattamente lo stesso, perché arima() utilizza massima verosimiglianza per stimare modelli e gls() utilizza ristretto massima verosimiglianza per default. Se si aggiunge method="ML" alla chiamata per gls() otterrete stime identici avete ottenuto con la funzione ARIMA sopra.

Qual è la sua funzione di collegamento?

Il modo in cui si descrive suona come una regressione lineare di base con errori autocorrelati. In tal caso, una possibilità è quella di utilizzare lm per ottenere una stima consistente dei vostri coefficienti e utilizzare Newey-occidentale HAC errori standard .

Non sono sicuro che la migliore risposta per GLM più in generale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top