Modelo lineal simple con errores autocorrelacionados en R [cerrado]

19

¿Cómo ajusto un modelo lineal con errores autocorrelacionados en R? En estado usaría elprais comando, pero no puedo encontrar un R equivalente ...

Zach
fuente

Respuestas:

23

Mira esto gls (mínimos cuadrados generalizados) del paquete nlme

Puede establecer un perfil de correlación para los errores en la regresión, por ejemplo, ARMA, etc.

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

para errores ARMA (1,1).

Dr. G
fuente
1
¿Puedo usar la función "predecir" en un nuevo conjunto de datos y conservar la misma estructura de error? ¿Cómo sabe el comando gls en qué orden están las observaciones?
Zach
27

Además de la gls()función from nlme, también puede usar la arima()función en el statspaquete usando MLE. Aquí hay un ejemplo con ambas funciones.

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 

La ventaja de la función arima () es que puede adaptarse a una variedad mucho mayor de procesos de error ARMA. Si usa la función auto.arima () del paquete de pronóstico, puede identificar automáticamente el error ARMA:

require(forecast)    
fit3 <- auto.arima(y, xreg=x)
Rob Hyndman
fuente
1
¿Para qué es 0.5 en "corr = corAR1 (0.5, form = ~ 1)?"
Zach
1
Da un valor inicial para la optimización. Casi no hace diferencia si se omite.
Rob Hyndman el
1
+1 La arimaopción se ve más diferente de la de Stata praisa primera vista, pero es más flexible y también se puede usar tsdiagpara obtener una buena visión de qué tan bien se ajusta realmente su suposición AR (1).
Wayne
1
¿Cómo uso arima () si retrocedo y solo en una constante?
user43790
7

Utilice la función gls del paquete nlme . Aquí está el ejemplo.

##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 

Dado que el modelo se ajusta utilizando la máxima probabilidad, debe proporcionar valores iniciales. El valor inicial predeterminado es 0, pero como siempre es bueno probar varios valores para garantizar la convergencia.

Como señaló el Dr. G, también puede usar otras estructuras de correlación, a saber, ARMA.

Tenga en cuenta que, en general, las estimaciones de mínimos cuadrados son consistentes si la matriz de covarianza de los errores de regresión no es múltiplo de la matriz de identidad, por lo que si ajusta el modelo con una estructura de covarianza específica, primero debe probar si es apropiado.

mpiktas
fuente
¿Para qué es 0.5 en "corr = corAR1 (0.5, form = ~ 1)?"
Zach
3

Puede usar predecir en la salida de gls. Ver? Predic.gls. También puede especificar el orden de la observación por el término "forma" en la estructura de correlación. Por ejemplo:
corr=corAR1(form=~1)indica que el orden de los datos es el que están en la tabla. corr=corAR1(form=~Year)indica que el orden es el del factor Año. Finalmente, el valor "0.5" en corr=corAR1(0.5,form=~1)?general se configura al valor del parámetro estimado para representar la estructura de varianza (phi, en el caso de AR, theta en el caso de MA .. .). Es opcional configurarlo y usarlo para la optimización como mencionó Rob Hyndman.

Xóchitl C.
fuente
¿Los valores de predicción o ajustados serán muy diferentes aunque correctos (gls () versus Arima ())? Como gls solo usará efectos fijos, mientras que Arima incluirá los errores de arima en los valores ajustados.
B_Miner