Modello lineare semplice con errori autocorrelati in R [chiuso]


19

Come posso adattare un modello lineare con errori autocorrelati in R? In stato avrei usato il praiscomando, ma non trovo un R equivalente ...

Risposte:


23

Dai un'occhiata gls(minimi quadrati generalizzati) dal pacchetto nlme

È possibile impostare un profilo di correlazione per gli errori nella regressione, ad esempio ARMA, ecc.

 gls(Y ~ X, correlation=corARMA(p=1,q=1))

per errori ARMA (1,1).


1
Posso utilizzare la funzione "predict" su un nuovo set di dati e conservare la stessa struttura di errore? In che modo il comando gls sa in che ordine sono le osservazioni?
Zach,

27

Oltre alla gls()funzione da nlme, puoi anche usare la arima()funzione nel statspacchetto usando MLE. Ecco un esempio con entrambe le funzioni.

x <- 1:100
e <- 25*arima.sim(model=list(ar=0.3),n=100)
y <- 1 + 2*x + e

###Fit the model using gls()
require(nlme)
(fit1 <- gls(y~x, corr=corAR1(0.5,form=~1)))
Generalized least squares fit by REML
  Model: y ~ x 
  Data: NULL 
  Log-restricted-likelihood: -443.6371

Coefficients:
(Intercept)           x 
   4.379304    1.957357 

Correlation Structure: AR(1)
 Formula: ~1 
 Parameter estimate(s):
      Phi 
0.3637263 
Degrees of freedom: 100 total; 98 residual
Residual standard error: 22.32908 

###Fit the model using arima()
(fit2 <- arima(y, xreg=x, order=c(1,0,0)))

Call:
arima(x = y, order = c(1, 0, 0), xreg = x)

Coefficients:
         ar1  intercept       x
      0.3352     4.5052  1.9548
s.e.  0.0960     6.1743  0.1060

sigma^2 estimated as 423.7:  log likelihood = -444.4,  aic = 896.81 

Il vantaggio della funzione arima () è che puoi adattare una varietà molto più ampia di processi di errore ARMA. Se si utilizza la funzione auto.arima () dal pacchetto di previsione, è possibile identificare automaticamente l'errore ARMA:

require(forecast)    
fit3 <- auto.arima(y, xreg=x)

1
A cosa serve lo 0,5 in "corr = corAR1 (0,5, form = ~ 1)?"
Zach,

1
Fornisce un valore iniziale per l'ottimizzazione. Non fa quasi alcuna differenza se viene omesso.
Rob Hyndman,

1
+1 L' arimaopzione sembra più diversa da quella di Stata praisa prima vista, ma è più flessibile e puoi anche usare tsdiagper avere una buona visione di come si adatta effettivamente il tuo presupposto AR (1).
Wayne,

1
Come posso usare arima () se regredisco solo su una costante?
user43790

7

Utilizzare la funzione gls dal pacchetto nlme . Ecco l'esempio.

##Generate data frame with regressor and AR(1) error. The error term is 
## \eps_t=0.3*\eps_{t-1}+v_t
df <- data.frame(x1=rnorm(100), err=filter(rnorm(100)/5,filter=0.3,method="recursive"))

##Create ther response
df$y <- 1 + 2*df$x + df$err

###Fit the model
gls(y~x, data=df, corr=corAR1(0.5,form=~1))

Generalized least squares fit by REML
  Model: y ~ x 
  Data: df 
  Log-restricted-likelihood: 9.986475

 Coefficients:
 (Intercept)           x 
   1.040129    2.001884 

 Correlation Structure: AR(1)
 Formula: ~1 
 Parameter estimate(s):
     Phi 
 0.2686271 
Degrees of freedom: 100 total; 98 residual
Residual standard error: 0.2172698 

Poiché il modello è montato con la massima probabilità, è necessario fornire i valori iniziali. Il valore iniziale predefinito è 0, ma come sempre è utile provare diversi valori per garantire la convergenza.

Come ha sottolineato il Dr. G, puoi anche usare altre strutture di correlazione, in particolare l'ARMA.

Si noti che in generale le stime dei minimi quadrati sono coerenti se la matrice di covarianza degli errori di regressione non è multipla della matrice di identità, quindi se si adatta il modello a una struttura di covarianza specifica, è necessario prima verificare se è appropriato.


A cosa serve lo 0,5 in "corr = corAR1 (0,5, form = ~ 1)?"
Zach,

3

È possibile utilizzare predict sull'output gls. Vedi? Predict.gls. Inoltre puoi specificare l'ordine dell'osservazione con il termine "form" nella struttura di correlazione. Ad esempio:
corr=corAR1(form=~1)indica che l'ordine dei dati è quello che sono nella tabella. corr=corAR1(form=~Year)indica che l'ordine è quello del fattore Anno .. Infine, il valore "0,5" in corr=corAR1(0.5,form=~1)?è generalmente impostato sul valore del parametro stimato per rappresentare la struttura della varianza (phi, nel caso di AR, theta nel caso di MA .. .). È facoltativo configurarlo e utilizzarlo per l'ottimizzazione, come menzionato da Rob Hyndman.


I valori previsti o adattati saranno molto diversi se corretti (gls () contro Arima ())? Poiché gls utilizzerà solo effetti fissi mentre Arima includerà gli errori arima nei valori adattati.
B_Miner
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.