本文我們使用4個時間序列模型對每周的溫度序列建模。第一個是通過auto.arima獲得的,然后兩個是SARIMA模型,最后一個是Buys-Ballot方法。
我們使用以下數據
k=620
n=nrow(elec)
futu=(k+1):n
y=electricite$Load[1:k]
plot(y,type="l")
我們開始對溫度序列進行建模(溫度序列對電力負荷的影響很大)
y=Temp
plot(y,type="l")
abline(lm(y[ :k]~y[( :k)-52]),col="red")
時間序列是自相關的,在52階
acf(y,lag=120)
model1=auto.arima(Y)
acf(residuals(model1),120)
我們將這個模型保存在工作空間中,然后查看其預測。讓我們在這里嘗試一下SARIMA
arima(Y,order = c(0,0,0),
seasonal = list(order = c(1,0,0)))
然后讓我們嘗試使用季節性單位根
Z=diff(Y,52)
arima(Z,order = c(0,0,1),
seasonal = list(order = c(0,0,1)))
然后,我們可以嘗試Buys-Ballot模型
lm(Temp~0+as.factor(NumWeek)
對模型進行預測
plot(y,type="l",xlim=c(0,n )
abline(v=k,col="red")
lines(pre4,col="blue")
plot(y,type="l",xlim=c(0,n))
abline(v=k,col="red")
plot(y,type="l",xlim=c(0,n))
plot(y,type="l",xlim=c(0,n))
abline(v=k,col="red")
最后比較4個模型的結果
lines( MODEL$y1,col="
lines( MODEL$y2,col="green")
lines( MODEL$y3,col="orange")
lines( MODEL$y4,col="blue")
然后,我們可以嘗試加權平均值來優化模型,而不是找出四個中的哪一個模型是“最優”,y ^ T = ∑iωiy ^ t(i)其中ω=(ωi),ω1+ ... +ωk= 1。然后,我們想要找到“最佳”權重。我們將在第一個m值上校准我們的四個模型,然后比較下111個值(和真實值)的預測組合,
我們使用前200個值。
然后,我們在這200個值上擬合4個模型
然后我們進行預測
y1=predict(model1,n.ahead = 111)$pred,
y2=predict(model2,n.ahead = 111)$pred,
y3=predict(model3,n.ahead = 111)$pred,
y4=predict(model4,n.ahead = 111)$pred+
為了創建預測的線性組合,我們使用
a=rep(1/4,4)
y_pr = as.matrix(DOS[,1:4]) %*% a
因此,我們可視化這4個預測,它們的線性組合(帶有等權重)及其觀察值
為了找到權重的“最佳”值,最小化誤差平方和,我們使用以下代碼
function(a) sum( DONN[,1:4 %*% a-DONN[,5 )^2
我們得到最優權重
optim(par=c(0,0,0),erreur2)$par
然后,我們需要確保兩種算法的收斂性:SARIMA參數的估計算法和權重參數的研究算法。
if(inherits(TRY, "try-error") arima(y,order = c(4,0,0)
seasonal = list(order = c(1,0,0)),method="CSS")
然后,我們查看權重隨時間的變化。
獲得下圖,其中粉紅色的是Buys-Ballot,粉紅色的是SARIMA模型,綠色是季節性單位根,
barplot(va,legend = rownames(counts)
我們發現權重最大的模型是Buys Ballot模型。
可以更改損失函數,例如,我們使用90%的分位數,
tau=.9
function(e) (tau-(e<=0))*e
在函數中,我們使用
這次,權重最大的兩個模型是SARIMA和Buys-Ballot。