2016-08-15 8 views
0

이것은 실제 응답을 부적절하게 만들 수있는 백만 가지 방법이있을 수있는 질문 중 하나입니다. 그러나 완고함은 길에 들어갑니다.OLS 선형 모델에서 예측 된 변수 (연도)를 가진 OLS 선형 모델의 예측 값

시계열의 적용을 이해하려고 시도 할 때 데이터의 추세를 분석하면 미래의 가치를 예측할 수 없다는 것을 알 수 있습니다.

enter image description here

그래서 나는 드에 대한 ARIMA 모델 (옳고 그름을) 끝낼 : 예를 들어, astsa 패키지에서 gtemp 데이터 세트를 사용하여, 지난 수십 년간 상승 추세는에서 고려 될 필요가 수 -trended 데이터 나 10 년 앞서 "예측"

fit = arima(gtemp, order = c(4, 1, 1)) 
pred = predict(fit, n.ahead = 10) 

과 1950 년 이후의 값을 기반으로 OLS 추세 추정 :

gtemp1 = window(gtemp, start = 1950, end = 2009) 
fit2 = lm(gtemp1 ~ I(1950:2009)) 

predict()을 사용하여 향후 10 년 동안 선형 모델 부품의 예상 값을 얻는 방법이 문제입니다.

predict(fit2, data.frame(I(2010:2019)))을 실행하면 predict(fit2)'newdata' had 10 rows but variables found have 60 rows을 실행하는 데 필요한 60 가지 값이 있습니다.

답변

1

당신이 필요합니다

dat <- data.frame(year = 1950:2009, gtemp1 = as.numeric(gtemp1)) 
fit2 <- lm(gtemp1 ~ year, data = dat) 
unname(predict(fit2, newdata = data.frame(year = 2010:2019))) 
# [1] 0.4928475 0.5037277 0.5146079 0.5254882 0.5363684 0.5472487 0.5581289 
# [8] 0.5690092 0.5798894 0.5907697 

당신이 lmdata 인수를 사용하지 않는 다른 방법으로, 당신이 필요합니다

year <- 1950:2009 
fit2 <- lm(gtemp1 ~ year) 
unname(predict(fit2, newdata = data.frame(year = 2010:2019))) 
# [1] 0.4928475 0.5037277 0.5146079 0.5254882 0.5363684 0.5472487 0.5581289 
# [8] 0.5690092 0.5798894 0.5907697 

원래 코드가

실패하는 이유

당신이 d

attr(fit2$terms, "term.labels") ## names of covariates 
# [1] "I(1950:2009)" 

당신이 예측 나중에 predict 새 데이터 프레임의 변수를 찾기 위해 목표로하게

I(1950:2009) 전화 : fit2 <- lm(gtemp1 ~ I(1950:2009)) 오, lmI(1950:2009)라는 공변량이 가정된다. 그러나, 당신의 newdata의 열 이름을 봐 가지고 그 결과

colnames(data.frame(I(2010:2019))) 
# [1] "X2010.2019" 

predict.lmI(1950:2009)newdata에, 다음이 fit2$modelnewdata로 내부 모델 프레임을 사용 변수 찾아 의해 장착 값을 반환 할 수 없습니다 기본값 (왜 60 개의 값을 얻는 지 설명).

+0

OLS를 기반으로 예측 된 값을 ARIMA의 예상 값에 어떻게 추가하여 합리적인 가치를 얻을 수 있는지 아십니까? – Toni

+0

나는 시계열을 이해하려고 노력하고있다. 나는 당신이'model = lm (y ~ I (1950 : 2009)) '과 같은 것을함으로써 추세를 벗어날 수 있다는 것을 알았다. st.y = gtemp - predict (model)'(OP와 정확히 일치하지는 않음). 그래서 이제 ARIMA의 predict() 결과를 OLS 예측에 더하는 대신 뺄셈하는 대신에 노력하고있었습니다. 하지만 나는 거대한 승패를 얻는다. – Toni

+0

마지막 의견에 대해서'pred'는'fit = arima (gtemp, order = c (4, 1, 1)); pred = predict (fit, n.ahead = 10)'? OLS를 완전히 파기 하시겠습니까? – Toni