R'de otokorelasyonlu hatalara sahip basit doğrusal model [kapalı]


19

R'de otokorelasyonlu hataları olan doğrusal bir modeli nasıl takabilirim? Stata praiskomutunu kullanırdım , ama R eşdeğerini bulamıyorum ...

Yanıtlar:


23

Nlmegls paketinden (genelleştirilmiş en küçük kareler) bir göz atın

Regresyondaki hatalar için bir korelasyon profili ayarlayabilirsiniz, örneğin ARMA, vb:

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

ARMA (1,1) hataları için.


1
"Tahmin" işlevini yeni bir veri kümesinde kullanabilir ve aynı hata yapısını koruyabilir miyim? Gls komutu gözlemlerin hangi sırada olduğunu nasıl bilir?
Zach

27

Adlı gls()işleve ek olarak, MLE kullanarak paketteki işlevi nlmede kullanabilirsiniz . İşte her iki işleve de bir örnek.arima()stats

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 

Arima () işlevinin avantajı, çok daha çeşitli ARMA hata işlemlerine sığabilmenizdir. Tahmin paketinden auto.arima () işlevini kullanırsanız, ARMA hatasını otomatik olarak tanımlayabilirsiniz:

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

1
"Corr = corAR1 (0.5, form = ~ 1)" için 0.5 nedir?
Zach

1
Optimizasyon için bir başlangıç ​​değeri verir. Atlanırsa neredeyse hiç fark etmez.
Rob Hyndman

1
+1 arimaSeçenek praisilk bakışta Stata'dan daha farklı görünüyor , ancak daha esnektir ve tsdiagAR (1) varsayımınızın gerçekten ne kadar iyi uyduğuna dair güzel bir görsel elde etmek için de kullanabilirsiniz .
Wayne

1
Arima () öğesini yalnızca bir sabitte y'ye gerilediğimde nasıl kullanabilirim?
user43790

7

Fonksiyonu kullanın GLS paket dan nlme . İşte örnek.

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

Model maksimum olasılık kullanılarak takıldığından başlangıç ​​değerlerini sağlamanız gerekir. Varsayılan başlangıç ​​değeri 0'dır, ancak her zaman olduğu gibi yakınsamayı sağlamak için birkaç değer denemek iyidir.

Dr. G'nin işaret ettiği gibi, diğer korelasyon yapılarını da kullanabilirsiniz: ARMA.

Genel olarak, en küçük kareler tahminlerinin, regresyon hatalarının kovaryans matrisi, kimlik matrisinin katları değilse tutarlı olduğunu unutmayın; bu nedenle, modeli belirli kovaryans yapısına sığdırırsanız, öncelikle uygun olup olmadığını test etmeniz gerekir.


"Corr = corAR1 (0.5, form = ~ 1)" için 0.5 nedir?
Zach

3

Gls çıktısında tahmin kullanabilirsiniz. Bkz.? Predict.gls. Ayrıca korelasyon yapısında "form" terimi ile gözlem sırasını belirleyebilirsiniz. Örneğin:
corr=corAR1(form=~1) verinin sırasının tablodakiler olduğunu belirtir. corr=corAR1(form=~Year)sıra, yıl faktörünün biri olduğunu belirtir. Son olarak, "0.5" değeri corr=corAR1(0.5,form=~1)?genellikle varyans yapısını temsil ettiği tahmin edilen parametrenin değerine ayarlanır (MA durumunda AR, MA durumunda teta .. .). Rob Hyndman'ın belirttiği gibi kurmak ve optimizasyon için kullanmak isteğe bağlıdır.


Tahmin veya takılan değerler doğru olsa da çok farklı olacaktır (gls () ve Arima ())? Gls yalnızca sabit efektler kullanacağından, Arima uygun değerlere arima hatalarını dahil edecektir.
B_Miner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.