日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

非平稳时间序列及建模

發布時間:2023/12/31 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 非平稳时间序列及建模 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

#差分運算

#差分示例

#ARIMA模型

? ?? #Box-Jenkins建模流程

? ?? #案例

實際上我們經常會遇到一些非平穩時間序列,往往會呈現明顯的趨勢性或周期性,可以通過適當差分等手段,將它化為平穩時間序列,再采用ARMA模型建模

?

  • 差分運算

差分運算公式

?

一階差分?

?

二階差分?

?

d 階差分? ,其中 B 表示后移算子,

?

季節差分?

?

D階季節差分 ?

?

差分示例

有時候差分還是不能夠讓序列平穩,那么我就可以使用對數轉換等方式,然后再進行差分

?

  • ARIMA模型

?

  • 差分方式的選擇

序列蘊含著顯著的線性趨勢,一階差分就可以實現趨勢平穩

?

序列蘊含著曲線趨勢,通常低階(二階或三階)差分可以提取出曲線趨勢的影響,有時則需要對序列做非線性變換

?

對于蘊含著固定周期的序列進行步長為周期長度s的差分運算(季節差分),可以較好地提取周期信息

?

?

  • Box-Jenkins建模流程

模型識別

? ??自相關系數

? ?? 自相關系數

模型估計

? ??最小化殘差平方和

? ??最小化AIC等等

模型驗證

? ??一些診斷方法會被用于檢測模型的有效性

? ??殘差白噪聲檢驗,模型系數顯著性檢驗

? ??用驗證集數據來驗證

模型預測

? ??模型確定,用于預測

?

案例

> plot(tsdata) #做時序圖觀察,是否為平穩的序列,其實可以直接adf.test() 檢測,如果顯著則滿足平穩,如下圖

> log_tsdata<-log(tsdata) #因為數據變化幅度大,恐直接差分可能無法平穩,所以非線性變換,如進行log變換 > plot.ts(log_tsdata) #再繪制圖形如下,發現變化幅度減小了

> log_tsdata_diff1=diff(log_tsdata,lag=12,differences=1)#lay=12表示差分周期(步長)12,differences=1表示一階 > par(mfrow=c(3,1)) > plot.ts(log_tsdata_diff1) > acf(log_tsdata_diff1) #繪制 acf、pacf確定p、q的值 > pacf(log_tsdata_diff1) > adfTest(log_tsdata_diff1,type='nc') #平穩性檢驗Title:Augmented Dickey-Fuller TestTest Results:PARAMETER:Lag Order: 1STATISTIC:Dickey-Fuller: -1.3524P VALUE:0.1828 #不顯著,結果并不平穩,在進行處理一次Description:Wed Oct 18 09:47:53 2017 by user: Xu> log_tsdata_diff2=diff(log_tsdata_diff1,lag=1,differences=1)#步長為1的普通差分 > par(mfrow=c(3,1)) > plot.ts(log_tsdata_diff2) > acf(log_tsdata_diff2) > pacf(log_tsdata_diff2) > adfTest(log_tsdata_diff2,type='nc')Title:Augmented Dickey-Fuller TestTest Results:PARAMETER:Lag Order: 1STATISTIC:Dickey-Fuller: -9.3424P VALUE:0.01 #顯著表示平穩

?

#建立模型并評價模型 > arima.mod=arima(log(tsdata), c(0, 1, 1),seasonal = list(order = c(0, 1, 1), period = 12)) #preiod周期為12#第一個c(0,1,1)表示一階普通差分#第二個seasonal = list(order = c(0, 1, 1), period = 12)表示按照周期12的步長,進行季節性差分 > arima.modCall: arima(x = log(tsdata), order = c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))Coefficients:ma1 sma1-0.4018 -0.5569 s.e. 0.0896 0.0731sigma^2 estimated as 0.001348: log likelihood = 244.7, aic = -483.4> resid=arima.mod$residuals #模型進行評價 > Box.test(resid)Box-Pierce testdata: resid X-squared = 0.03, df = 1, p-value = 0.8624> par(mfrow=c(1,1)) > qqnorm(resid) > qqline(resid)

?

#預測數據 > library(forecast) > arima.pred<-forecast(arima.mod,h=5*12) #預測5年的目標 > plot.forecast(arima.pred) > ts.plot(tsdata,exp(arima.pred$mean), lty = c(1,3)) > AIC(arima(log(tsdata), c(0, 1, 1),seasonal = list(order = c(0, 1, 1), period = 12)))#通過AIC判斷那個模型參數最好,可手動設置c(p,d,q)中的參數進行嘗試,選取AIC最小的 [1] -483.3991 > AIC(arima(log(tsdata), c(0, 1, 2),seasonal = list(order = c(0, 1, 1), period = 12))) [1] -481.6165

自動選擇模型

> arima.new<-auto.arima(log(tsdata))#直接通過auto.arima來判斷參數最合適 > arima.new Series: log(tsdata) ARIMA(0,1,1)(0,1,1)[12] Coefficients:ma1 sma1-0.4018 -0.5569 s.e. 0.0896 0.0731sigma^2 estimated as 0.001371: log likelihood=244.7 AIC=-483.4 AICc=-483.21 BIC=-474.77

?

轉載于:https://my.oschina.net/u/1785519/blog/1572619

總結

以上是生活随笔為你收集整理的非平稳时间序列及建模的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。