시간별 측정에 대한 네 가지 시계열이 있습니다.
- 집 내부의 열 소비량
- 집 외부 온도
- 일사량
- 풍속
집 내부의 열 소비량을 예측하고 싶습니다. . 매년 및 매일 모두 분명한 계절적 추세가 있습니다. 서로 다른 시리즈간에 명확한 상관 관계가 있기 때문에 ARIMAX 모델을 사용하여 피팅하고 싶습니다. 이 작업은 패키지 TSA의 arimax 함수를 사용하여 R에서 수행 할 수 있습니다.
이 함수에 대한 문서를 읽고 전달 함수를 읽으려고했지만 지금까지 내 코드는 다음과 같습니다.
p>
regParams = ts.union(ts(dayy)) transferParams = ts.union(ts(temp)) model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1)) pred10 = predict(model10, newxreg=regParams)
제공 :
검은 색 선이 실제 측정 된 데이터와 녹색 선은 비교하여 내 적합 모델입니다. 좋은 모델이 아닐뿐만 아니라 분명히 뭔가 잘못되었습니다.
ARIMAX 모델 및 전달 함수에 대한 지식이 제한되어 있음을 인정합니다. arimax () 함수에서 (내가 이해 한 한) xtransf는 주 시계열을 예측하기 위해 (전달 함수를 사용하여) 사용하려는 외생적인 시계열입니다. 하지만 xreg와 xtransf의 차이점은 무엇입니까?
좀 더 일반적으로 제가 뭘 잘못 했나요? lm (heat ~ temp radi wind * time)에서 얻은 것보다 더 잘 맞고 싶습니다.
수정 : 일부 댓글에 따라 전송을 삭제하고 대신 xreg를 추가했습니다.
regParams = ts.union(ts(dayy), ts(temp), ts(time)) model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams)
여기서 dayy는 “일년의 숫자 일”이고 시간은 시간입니다. 온도는 다시 외부 온도입니다. 결과는 다음과 같습니다.
더 좋지만 예상했던 것과 거의 같지는 않습니다.
답변
ARIMA 모델을 사용하여 2 단계의 계절성을 가진 시리즈를 모델링하는 데 약간의 어려움이있을 것입니다. .이를 올바르게 설정하는 것은 올바르게 설정하는 데 크게 의존합니다. 간단한 선형 모델을 아직 고려해 보셨습니까? ARIMA 모델보다 훨씬 빠르고 쉽게 적합 할 수 있으며 다양한 계절성 수준에 대해 더미 변수를 사용하면 종종 매우 정확합니다.
- 시간별 데이터가 있다고 가정합니다. 따라서 TS 개체가 24의 빈도로 설정되어 있는지 확인하십시오.
- 다른 수준의 더미 변수를 사용하는 계절성입니다. 예를 들어 한 해의 달을 나타내는 0/1 더미 세트를 원할 수 있습니다.
-
xreg
에 더미 변수를 포함합니다. 공변량 (예 : temperatu re). - 기본 R의 arima 함수로 모델을 맞 춥니 다.이 함수는
xreg
인수를 사용하여 ARMAX 모델을 처리 할 수 있습니다. - 예측 패키지에서 Arima 및 auto.arima 함수를 사용해보세요. auto.arima는 arima 모델에 적합한 매개 변수를 자동으로 찾기 때문에 좋습니다. 그러나 데이터 세트에 맞추려면 영원히 걸립니다.
- 각 계절성 수준에 대해 더미 변수를 사용하여 arima 패키지의 tslm 함수를 사용해보십시오. 이것은 Arima 모델보다 훨씬 빠르며 상황에서 더 잘 작동 할 수 있습니다.
- 4/5/6이 작동하지 않으면 전달 함수에 대해 걱정하기 시작합니다. 전에 크롤링해야합니다. 걸을 수 있습니다.
- 미래를 예측할 계획이라면 먼저 xreg 변수를 예측해야합니다. 이것은 계절에 따른 인형에게는 쉽지만 좋은 일기 예보. 과거 데이터의 중앙값을 사용할 수 있습니까?
다음은 이에 접근하는 방법의 예입니다.
#Setup a fake time series set.seed(1) library(lubridate) index <- ISOdatetime(2010,1,1,0,0,0)+1:8759*60*60 month <- month(index) hour <- hour(index) usage <- 1000+10*rnorm(length(index))-25*(month-6)^2-(hour-12)^2 usage <- ts(usage,frequency=24) #Create monthly dummies. Add other xvars to this matrix xreg <- model.matrix(~as.factor(month))[,2:12] colnames(xreg) <- c("Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") #Fit a model library(forecast) model <- Arima(usage, order=c(0,0,0), seasonal=list(order=c(1,0,0), period=24), xreg=xreg) plot(usage) lines(fitted(model),col=2) #Benchmark against other models model2 <- tslm(usage~as.factor(month)+as.factor(hour)) model3 <- tslm(usage~as.factor(month)) model4 <- rep(mean(usage),length(usage)) #Compare the 4 models library(plyr) #for rbind.fill ACC <- rbind.fill( data.frame(t(accuracy(model))), data.frame(t(accuracy(model2))), data.frame(t(accuracy(model3))), data.frame(t(accuracy(model4,usage))) ) ACC <- round(ACC,2) ACC <- cbind(Type=c("Arima","LM1","Monthly Mean","Mean"),ACC) ACC[order(ACC$MAE),]
댓글
답변
저는 R을 사용하여 잠시 동안 부하 예측을 수행하면 forecast
패키지와 그 귀중한 기능 (예 : auto.arima
)을 사용하는 것이 좋습니다.
다음 명령으로 ARIMA 모델을 빌드 할 수 있습니다.
model = arima(y, order, xreg = exogenous_data)
y
예측 및 (I dayy
), order
모델 순서 (계절성 고려) 및 exogenous_data
온도, 일사량 등 auto.arima
함수는 최적의 모델 순서를 찾는 데 도움이됩니다. 예측패키지에 대한 간단한 자습서는 여기 에서 찾을 수 있습니다.
댓글
- 예상되는 것은 열 (집의 열 소비량)입니다.
답변
I 개인적으로는 전달 함수를 이해하지 못합니다.하지만 xtransf
와 xreg
가 반전 된 것 같습니다. 최소한 R “의 기본 arima
에서는 외부 변수를 포함하는 xreg
입니다. 전달 함수가 < 무엇 보다는 em> 어떻게 (지연된 데이터가 미래 가치에 영향을 미치는지).
xreg
를 사용해 보겠습니다. arimax
에 전달 함수가 필요한 경우 arima
를 사용하는 외생 변수입니다. 문제는 모델이 매일이지만 데이터에는 일별 및 연간 계절성입니다. 현재로서는 첫 번째 차이 (order=(*, 1, *)
)가이를 처리할지 여부를 확신 할 수 없습니다. (일일 계절성 만 고려하는 모델에서 마술적인 연중 예측을 얻을 수는 없습니다.)
PS 사용하는 time
는 무엇입니까? lm
? 리터럴 시계 시간 또는 1 업 관찰 숫자? 혼합 효과 모델 (lmer
의 lme4
패키지), 시계열에서 발생할 자기 상관을 올바르게 설명하는지 여부는 알 수 없습니다. 설명하지 않으면 lm
그렇지 않은 경우 흥미로운 적합을 얻을 수 있지만 예측의 정확성에 대한 개념은 너무 낙관적입니다.
댓글
- 측정 시간과 연중 " 일이 모두 있습니다. ".
predict()
는 예측에 사용되지만fitted()
는 과거 기간에 맞는 모델을 반환합니다. 좀 더 구체적인 도움이 필요하면 일부 코드와 함께 재현 가능한 예제를 게시해야합니다.heat
가 시간에 따라 선형 적으로 증가한 다음 시간이 1이되면 다시 아래로 점프하는 것입니다. 더미 변수를 사용하는 경우 하루 중 시간이 ' 자체 효과를 얻습니다. 예제 코드를 실행하고 xreg 개체를 구성하는 방법에주의를 기울이십시오.stats
및forecast
패키지에있는 ARIMA 함수의 한 가지 단점은 프로 버 전송 함수에 적합하지 않다는 것입니다. .stats::arima
함수에 대한 문서는 다음과 같이 설명합니다. xreg 용어가 포함 된 경우 선형 회귀 (include.mean이 참이고 차이가없는 경우 상수 용어 사용) )에는 오류 용어에 대한 ARMA 모델이 장착되어 있습니다. 따라서 실제로 전달 함수를 맞아야하는 경우TSA::arimax
함수가R
.