ARIMAX 모델을 R에 맞추는 방법은 무엇입니까?

시간별 측정에 대한 네 가지 시계열이 있습니다.

  1. 집 내부의 열 소비량
  2. 집 외부 온도
  3. 일사량
  4. 풍속

집 내부의 열 소비량을 예측하고 싶습니다. . 매년 및 매일 모두 분명한 계절적 추세가 있습니다. 서로 다른 시리즈간에 명확한 상관 관계가 있기 때문에 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 모델보다 훨씬 빠르고 쉽게 적합 할 수 있으며 다양한 계절성 수준에 대해 더미 변수를 사용하면 종종 매우 정확합니다.

  1. 시간별 데이터가 있다고 가정합니다. 따라서 TS 개체가 24의 빈도로 설정되어 있는지 확인하십시오.
  2. 다른 수준의 더미 변수를 사용하는 계절성입니다. 예를 들어 한 해의 달을 나타내는 0/1 더미 세트를 원할 수 있습니다.
  3. xreg에 더미 변수를 포함합니다. 공변량 (예 : temperatu re).
  4. 기본 R의 arima 함수로 모델을 맞 춥니 다.이 함수는 xreg 인수를 사용하여 ARMAX 모델을 처리 할 수 있습니다.
  5. 예측 패키지에서 Arima auto.arima 함수를 사용해보세요. auto.arima는 arima 모델에 적합한 매개 변수를 자동으로 찾기 때문에 좋습니다. 그러나 데이터 세트에 맞추려면 영원히 걸립니다.
  6. 각 계절성 수준에 대해 더미 변수를 사용하여 arima 패키지의 tslm 함수를 사용해보십시오. 이것은 Arima 모델보다 훨씬 빠르며 상황에서 더 잘 작동 할 수 있습니다.
  7. 4/5/6이 작동하지 않으면 전달 함수에 대해 걱정하기 시작합니다. 전에 크롤링해야합니다. 걸을 수 있습니다.
  8. 미래를 예측할 계획이라면 먼저 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),] 

댓글

  • fitted () 함수는 무엇입니까? 이것을 사용하면 predict (model10, newxreg = regParams)보다 훨씬 좋은 결과를 얻습니다.
  • @utdiscant : predict()는 예측에 사용되지만 fitted()는 과거 기간에 맞는 모델을 반환합니다. 좀 더 구체적인 도움이 필요하면 일부 코드와 함께 재현 가능한 예제를 게시해야합니다.
  • @utdiscant : 또한 dayy를 xreg로 사용하면 24 개의 관찰 만 있기 때문에 과적 합의 위험이 있습니다. 하루. 월을 사용하면 더 나은 예측 결과를 얻을 수 있습니다.
  • @utdiscant : 또한 시간 기반 xreg는 더미 변수 여야합니다. 지금 모델링 한 방식은 heat가 시간에 따라 선형 적으로 증가한 다음 시간이 1이되면 다시 아래로 점프하는 것입니다. 더미 변수를 사용하는 경우 하루 중 시간이 ' 자체 효과를 얻습니다. 예제 코드를 실행하고 xreg 개체를 구성하는 방법에주의를 기울이십시오.
  • statsforecast 패키지에있는 ARIMA 함수의 한 가지 단점은 프로 버 전송 함수에 적합하지 않다는 것입니다. . stats::arima 함수에 대한 문서는 다음과 같이 설명합니다. xreg 용어가 포함 된 경우 선형 회귀 (include.mean이 참이고 차이가없는 경우 상수 용어 사용) )에는 오류 용어에 대한 ARMA 모델이 장착되어 있습니다. 따라서 실제로 전달 함수를 맞아야하는 경우 TSA::arimax 함수가 R.

답변

저는 R을 사용하여 잠시 동안 부하 예측을 수행하면 forecast 패키지와 그 귀중한 기능 (예 : auto.arima)을 사용하는 것이 좋습니다.

다음 명령으로 ARIMA 모델을 빌드 할 수 있습니다.

model = arima(y, order, xreg = exogenous_data) 

y 예측 및 (I dayy), order 모델 순서 (계절성 고려) 및 exogenous_data 온도, 일사량 등 auto.arima 함수는 최적의 모델 순서를 찾는 데 도움이됩니다. 예측패키지에 대한 간단한 자습서는 여기 에서 찾을 수 있습니다.

댓글

  • 예상되는 것은 열 (집의 열 소비량)입니다.

답변

I 개인적으로는 전달 함수를 이해하지 못합니다.하지만 xtransfxreg가 반전 된 것 같습니다. 최소한 R “의 기본 arima에서는 외부 변수를 포함하는 xreg입니다. 전달 함수가 < 무엇 보다는 em> 어떻게 (지연된 데이터가 미래 가치에 영향을 미치는지).

xreg를 사용해 보겠습니다. arimax에 전달 함수가 필요한 경우 arima를 사용하는 외생 변수입니다. 문제는 모델이 매일이지만 데이터에는 일별 및 연간 계절성입니다. 현재로서는 첫 번째 차이 (order=(*, 1, *))가이를 처리할지 여부를 확신 할 수 없습니다. (일일 계절성 만 고려하는 모델에서 마술적인 연중 예측을 얻을 수는 없습니다.)

PS 사용하는 time는 무엇입니까? lm? 리터럴 시계 시간 또는 1 업 관찰 숫자? 혼합 효과 모델 (lmerlme4 패키지), 시계열에서 발생할 자기 상관을 올바르게 설명하는지 여부는 알 수 없습니다. 설명하지 않으면 lm 그렇지 않은 경우 흥미로운 적합을 얻을 수 있지만 예측의 정확성에 대한 개념은 너무 낙관적입니다.

댓글

  • 측정 시간과 연중 " 일이 모두 있습니다. ".

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다