세션 1 : 시작하기 ...
는 솔직히 말해서, 나는 모델링 co2
시계열에 당신의 방법에 대해 꽤 많이 걱정입니다. co2
의 트렌드를 탈퇴했을 때 이미 문제가 발생했습니다. 왜 tt = "linear"
을 사용해야하나요? 각 기간 (즉, 연도) 내에 선형 추세를 맞추고 추가 검사를 위해 잔차를 가져옵니다. 이는 잔여 계열에 인공 효과를 도입하는 경향이 있으므로 권장하지 않는 경우가 많습니다. 나는 tt = "constant"
을 할 것입니다. 즉, 단순히 연평균을 버리는 것입니다. 이는 적어도 원본 데이터와 마찬가지로 시즌 간 상관 관계를 유지합니다.
아마도 여기에 몇 가지 증거를보고 싶을 것입니다. 진단에 도움이되는 ACF 사용을 고려하십시오.
모두 드 추세 시리즈
data(co2)
## de-trend by dropping yearly average (no need to use `pracma::detrend`)
yearlymean <- ave(co2, gl(39, 12), FUN = mean)
co2dt <- co2 - yearlymean
## de-trend by dropping within season linear trend
co2.m <- matrix(co2, 12)
co2.dt <- pracma::detrend(co2.m, tt = "linear")
co2.dt <- ts(as.numeric(co2.dt), start = c(1959, 1), frequency = 12)
## compare time series and ACF
par(mfrow = c(2, 2))
ts.plot(co2dt); acf(co2dt)
ts.plot(co2.dt); acf(co2.dt)
따라서 추가로 계절 차분이 필요하며, 성수기 효과가 있습니다.
co2.dt.dif
에 대한 ACF
## seasonal differencing
co2dt.dif <- diff(co2dt, lag = 12)
co2.dt.dif <- diff(co2.dt, lag = 12)
## compare time series and ACF
par(mfrow = c(2, 2))
ts.plot(co2dt.dif); acf(co2dt.dif)
ts.plot(co2.dt.dif); acf(co2.dt.dif)
더 큰 음의 상관 관계를 가지고있다. 이것은 over-de-trending의 표시입니다. 그래서 우리는
co2dt
을 선호합니다.
co2dt
은 이미 고정되어 있으며 더 이상 차이점이 필요하지 않습니다 (그렇지 않은 경우 차이가 너무 많아지고 부정적인 자기 상관 관계가 도입됩니다).
co2dt.dif
의 ACF에 대한 지연 1에서의 큰 음수 스파이크는 계절적 MA를 원한다고 제안합니다. 또한 계절에 긍정적 인 영향을 미친다는 것은 전반적으로 가벼운 AR 과정을 의미합니다. 그래서 생각이 모델은 잘하고있다
## we exclude mean because we found estimation of mean is 0 if we include it
fit <- arima0(co2dt.dif, order = c(1,0,0), seasonal = c(0,0,1), include.mean = FALSE)
이든, 우리는 잔차의 ACF를 검사해야합니다
acf(fit$residuals)
가 보이는이 모델은 (실제로 꽤 큰) 괜찮은처럼.
예측 목적으로 co2dt
의 계절별 차이를 co2dt.dif
의 모델 피팅과 통합하는 것이 더 좋습니다.의이 두 단계의 작업을 위와 같이 AR과 MA 계수 정확히 같은 추정을 줄 것이다,하지만 지금은 예측이 상당히 하나의 predict
호출 처리되어야하기 쉬운
fit <- arima0(co2dt, order = c(1,0,0), seasonal = c(0,1,1), include.mean = FALSE)
을하자.
## 3 years' ahead prediction (no prediction error; only mean)
predco2dt <- predict(fit, n.ahead = 36, se.fit = FALSE)
하자 플롯 co2dt
함께 모델과 예측을 장착는 :
fittedco2dt <- co2dt - fit$residuals
ts.plot(co2dt, fittedco2dt, predco2dt, col = 1:3)
결과는 매우 유망한 보인다!
이제 최종 단계는 실제로 원래 co2
시리즈로 다시 매핑하는 것입니다. 장착 값의 경우, 우리가 연간 평균 다시 추가 우리가 내려왔다 :
fittedco2 <- fittedco2dt + yearlymean
그러나 우리는 미래가 될 것에서 매년 무엇을 의미하는지 알 수 없기 때문에 예측이 더 어렵다. 이와 관련하여 우리의 모델링은 훌륭하게 보이지만 실제적으로 유용하지는 않습니다. 나는 다른 대답에서 더 좋은 아이디어에 대해서 이야기 할 것이다.
ts.plot(co2, fittedco2, col = 1:2)