답변:
의 gls()
기능 외에도 MLE을 사용 하여 패키지 nlme
의 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 () 함수의 장점은 훨씬 더 다양한 ARMA 오류 프로세스에 맞출 수 있다는 것입니다. 예측 패키지에서 auto.arima () 함수를 사용하면 ARMA 오류를 자동으로 식별 할 수 있습니다.
require(forecast)
fit3 <- auto.arima(y, xreg=x)
arima
옵션은 prais
언뜻보기에 Stata와는 좀 더 다르게 보이지만 더 유연하며 tsdiag
AR (1) 가정이 실제로 얼마나 적합한 지 잘 보여주는 데 사용할 수도 있습니다 .
패키지 nlme의 함수 gls 를 사용하십시오 . 다음은 예입니다.
##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
모델은 최대 가능성을 사용하여 피팅되므로 시작 값을 제공해야합니다. 기본 시작 값은 0이지만 항상 수렴을 보장하기 위해 여러 값을 시도하는 것이 좋습니다.
G 박사가 지적했듯이 다른 상관 관계 구조, 즉 ARMA를 사용할 수도 있습니다.
회귀 오차 공분산 행렬이 항등 행렬의 배수가 아닌 경우 일반적으로 최소 제곱 추정값은 일관되므로, 특정 공분산 구조에 모형을 적합시키는 경우 먼저 적합한 지 테스트해야합니다.
gls 출력에 예측을 사용할 수 있습니다. ? predict.gls를 참조하십시오. 또한 상관 구조에서 "양식"항으로 관측 순서를 지정할 수 있습니다. 예를 들어 :
corr=corAR1(form=~1)
데이터의 순서가 테이블에있는 순서임을 나타냅니다.
corr=corAR1(form=~Year)
순서가 팩터 연도의 하나임을 나타냅니다. 마지막으로 "0.5"값 corr=corAR1(0.5,form=~1)?
은 일반적으로 분산 구조를 나타내는 것으로 추정되는 모수의 값 (MA의 경우에는 phi, MA의 경우에는 쎄타)으로 설정됩니다. ). Rob Hyndman이 언급했듯이이를 설정하고 최적화에 사용하는 것은 선택 사항입니다.