1. 程式人生 > >R語言-時間序列

R語言-時間序列

star sse 流量 forecast bind 時序圖 period 分布 使用

時間序列:可以用來預測未來的參數,

1.生成時間序列對象

 1 sales <- c(18, 33, 41,  7, 34, 35, 24, 25, 24, 21, 25, 20, 
 2            22, 31, 40, 29, 25, 21, 22, 54, 31, 25, 26, 35)
 3 # 1.生成時序對象
 4 tsales <- ts(sales,start = c(2003,1),frequency = 12)
 5 plot(tsales)
 6 # 2.獲得對象信息
 7 start(tsales)
 8 end(tsales)
 9 frequency(tsales)
10 # 3.對相同取子集 11 tsales.subset <- window(tsales,start=c(2003,5),end=c(2004,6)) 12 tsales.subset

技術分享圖片

技術分享圖片

  結論:手動生成的時序圖

2.簡單移動平均

案例:尼羅河流量和年份的關系

1 library(forecast)
2 opar <- par(no.readonly = T)
3 par(mfrow=c(2,2))
4 ylim <- c(min(Nile),max(Nile))
5 plot(Nile,main=Raw time series)
6 plot(ma(Nile,3),main = 
Simple Moving Averages (k=3),ylim = ylim) 7 plot(ma(Nile,7),main = Simple Moving Averages (k=3),ylim = ylim) 8 plot(ma(Nile,15),main = Simple Moving Averages (k=3),ylim = ylim) 9 par(opar)

技術分享圖片

  結論:隨著K值的增大,圖像越來越平滑我們需要找到最能反映規律的K值

3.使用stl做季節性分解

案例:Arirpassengers年份和乘客的關系

 1 # 1.畫出時間序列
 2 plot(AirPassengers)
3 lAirpassengers <- log(AirPassengers) 4 plot(lAirpassengers,ylab = log(Airpassengers)) 5 # 2.分解時間序列 6 fit <- stl(lAirpassengers,s.window = period) 7 plot(fit) 8 fit$time.series 9 par(mfrow=c(2,1)) 10 # 3.月度圖可視化 11 monthplot(AirPassengers,xlab=‘‘,ylab=‘‘) 12 # 4.季度圖可視化 13 seasonplot(AirPassengers,year.labels = T,main = ‘‘)

技術分享圖片技術分享圖片

               原始圖 對數變換

技術分享圖片技術分享圖片

                  總體趨勢圖 月度季度圖

4.指數預測模型

  4.1單指數平滑

    案例:預測康涅狄格州的氣溫變化

# 1.擬合模型
fit2 <- ets(nhtemp,model = ANN)
fit2
# 2.向前預測
forecast(fit2,1)
plot(forecast(fit2,1),xlab = Year,
     ylab = expression(paste("Temperature (",degree*F,")",)),
     main="New Haven Annual Mean Temperature")
# 3.得到準確的度量
accuracy(fit2)

技術分享圖片

      結論:淺灰色是80%的置信區間,深灰色是95%的置信區間

技術分享圖片

  4.2有水平項,斜率和季節項的指數模型

    案例:預測5個月的乘客流量

 1 # 1.光滑參數
 2 fit3 <- ets(log(AirPassengers),model = AAA)
 3 accuracy(fit3)
 4 # 2.未來值預測
 5 pred <- forecast(fit3,5)
 6 pred
 7 plot(pred,main=Forecast for air Travel,ylab = Log(Airpassengers),xlab = Time)
 8 # 3.使用原始尺度預測
 9 pred$mean <- exp(pred$mean)
10 pred$lower <- exp(pred$lower)
11 pred$upper <- exp(pred$upper)
12 p <- cbind(pred$mean,pred$lower,pred$upper)
13 dimnames(p)[[2]] <- c(mean,Lo 80,Lo 95,Hi 80,Hi 95)
14 p

技術分享圖片

技術分享圖片

      結論:從表格中可知3月份的將會有509200乘客,95%的置信區間是[454900,570000]

  4.3ets自動預測

    案例:自動預測JohnsonJohnson股票的趨勢

1 fit4 <- ets(JohnsonJohnson)
2 fit4
3 plot(forecast(fit4),main=Johnson and Johnson Forecasts,
4      ylab="Quarterly Earnings (Dollars)", xlab="Time")

技術分享圖片

      結論:預測值使用藍色線表示,淺灰色表示80%置信空間,深灰色表示95%置信空間

5.ARIMA預測

步驟:

  1.確保時序是平穩的

  2.找出合理的模型(選定可能的p值或者q值)

  3.擬合模型

  4.從統計假設和預測準確性等角度評估模型

  5.預測

library(tseries)
plot(Nile)
# 1.原始序列差分一次
ndiffs(Nile)

dNile <- diff(Nile)
# 2.差分後的圖形
plot(dNile)
adf.test(dNile)
Acf(dNile)
Pacf(dNile)
# 3.擬合模型
fit5 <- arima(Nile,order = c(0,1,1))
fit5
accuracy(fit5)
# 4.評價模型
qqnorm(fit5$residuals)
qqline(fit5$residuals)
Box.test(fit5$residuals,type = Ljung-Box)
# 5.預測模型
forecast(fit5,3)
plot(forecast(fit5,3),xlab = Year,ylab = Annual Flow)

技術分享圖片技術分享圖片

                原始圖 一次差分圖形

技術分享圖片技術分享圖片

            正態Q-Q圖(如果滿足正態分布,點會落在圖中的線上) 使用Arima(0,1,1)模型的預測值

Arima自動預測

  案例:預測3個月之後的太陽黑子

1 fit6 <- auto.arima(sunspots)
2 fit6
3 forecast(fit6,3)
4 accuracy(fit6)
5 plot(forecast(fit6,3), xlab = "Year",
6      ylab = "Monthly sunspot numbers")

技術分享圖片

     結論:函數自動選定(2,1,2)與其他模型相比,AIC的值最小,預測結果更準確

R語言-時間序列