R語言:時間序列經典分析法(二)

2021-02-13 易學統計

      前面一章,介紹了時間序列中涉及到的基本概念,本章將在此基礎上介紹如何對時間序列的資料進行分析,怎麼選擇合適的模型。時間序列的分析方法,已經給大家整理出一個流程圖,如下圖。本章介紹時間序列經典分析法。

      根據前文中,時間序列是四大影響因素的綜合影響結果(長期趨勢,循環周期,季節變動和不規則變動,R語言:時間序列(一)),在各個分量按照加性組合的假定下,對加性模型各分量進行分解,R中使用decompose()函數將各分量分解。下圖為使用加性效應關係繪製的分解圖。

     下圖,從上往下分別是原圖,長期趨勢,季節變動和不規則隨機變動圖。長期趨勢有下降的趨勢;季節分量反應有年度變化周期;隨機分量曲線繞著0水平波動。

        時間序列中的確定性趨勢和季節變動可以用線性回歸模型識別,但時間序列的回歸模型不同於標準回歸模型,因為殘差之間存在自相關性,本質上也是一個時間序列,因此這類模型要仔細檢查殘差。

       1.線性回歸擬合

###書籍集為每年國王的壽命kingsts <- ts(kings)  ##轉成時間序列格式len <- length(kingsts)t <- seq(1,len)/10    ##產生有序變量kingsts.fit <- lm(kingsts~t)  ##配合最小二乘法回歸模型summary(kingsts.fit)  ##輸出主要計算結果par(mfrow=c(3,1),mar=c(3,3,1.6,1),mgp=c(1.8,0.5,0))plot.ts(kingsts)  ##繪製時間序列圖plot(resid(kingsts.fit),cex.axis=0.8,cex.lab=0.8)  ##畫出殘差圖acf(resid(kingsts.fit),cex.axis=0.8,cex.lab=0.8)  ##做殘差的acf圖Box.test(kingsts.fit.fit$residuals) ##對殘差做檢驗## p-value = 0.08575

       2.曲性回歸擬合

kingsts.fit1 <- lm(kingsts~t+I(t^2))  ##二次擬合summary(kingsts.fit1)  ##調整R2=0.2542summary(kingsts.fit)   ##調整R2=0.1419 Box.test(kingsts.fit1$residuals)  ##p-value = 0.4331acf(kingsts.fit1$residuals)  ##無相關性

       3.結果解釋

        1.國王壽命的數據作圖(上上圖1),可看到有一個先下降後上升的長期趨勢,因此可以做趨勢擬合。

        2.先配合一階回歸模型,並對擬合的模型做殘差檢驗,分別用acf()和Box.test()函數檢驗(上上圖2和3)。可看到殘差圖沒有任何趨勢,殘差相關圖無相關性,殘差檢驗的P值大於0.05,也證實無相關性。

        3.根據其數據先下降後上升的趨勢,可以嘗試擬合下二次曲線,並對擬合完的模型殘差檢驗,其殘差沒有相關性,且比對第一個模型和第二個模型的調整R2發現,第二個模型的R2更大,說明二次曲線更適合這個數據,上圖的藍色線為擬合的直線模型,紅線為擬合的曲線模型,看上去曲線模型擬合更好。

      根據不同的歷史間隔遠近在預報中所起的作用不同而給予不同的權重,歷史較近的觀察值對當前值影響較大,應給予較大的權重;反之,歷史較遠的觀察值對當前值的影響較小,應賦予較小的權重。該方法特別適合變化比較緩慢的時間序列資料的分析。

      簡單指數勻滑法適合不含趨勢和季節變動資料,Holt-Winters法則是將簡單指數勻滑推廣到含有趨勢和季節變動的時間序列資料的分析。在R中都採用HoltWinter()函數分析,其具有下面的基本結構:

HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL,            seasonal = c("additive", "multiplicative"),            start.periods = 2, l.start = NULL, b.start = NULL,            s.start = NULL,            optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1),            optim.control = list())

       函數中的x為時間序列資料的名稱,alpha為水平參數α,beta為趨勢參數β,gamma為季節參數γ。當beta和gamma都賦值為FALSE時,模型就沒有趨勢分量和季節分量,也就是簡單指數勻滑法。當gamma賦值為FALSE時,模型就沒有季節分量。

        簡單指數勻滑法

  空氣中顆粒物PM10數據集為例 pm10.ts <- ts(pm_10$PM10,start = c(2007,1),frequency = 365) pm10.ts.hw <- HoltWinters(pm10.ts,gamma = F,beta = F) coef <- pm10.ts.hw$coefficients with(pm10.ts.hw,c(alpha,beta,gamma,coef,SSE))

       不含季節趨勢指數勻滑

pm10.ts.hw.NS <- HoltWinters(pm10.ts,gamma = F)coef <- pm10.ts.hw.NS$coefficientswith(pm10.ts.hw.NS,c(alpha,beta,gamma,coef,SSE))

       包含長期趨勢和季節趨勢的Holt-Winters勻滑

pm10.ts.hw.S <- HoltWinters(pm10.ts)coef <- pm10.ts.hw.S$coefficients[1:2]with(pm10.ts.hw.S,c(alpha,beta,gamma,coef,SSE)) ##提取勻滑參數和當前基礎水平a和趨勢分量bpm10.ts.hw.S$coefficients[c(3:6,365+2)]  ##提取前4個和最後一個季節的勻滑參數s

     上述三個不同模型的結果解釋

     1.該序列沒有明顯的長期趨勢,但可見明顯的季節周期,這裡為了和後面對比,因此姑且以此數據作為例子進行簡單指數平滑。其水平參數α=0.73,說明某一天的pm10濃度受近期的影響比較大。其趨勢和季節參數為0,SSE為0.57。

      2. 第二部分,仍以該例子,假使其沒有季節分量gamma=F。看到β=0.02,說明其長期趨勢不明顯。SSE=0.59

      3.第三部分,考慮長期趨勢和季節變動,看到α=0.61,表明近期汙染水平對當前值影響大於遠期汙染水平。β=0表明趨勢分量不需要隨時間更新,γ=0.7,該序列存在明顯季節周期。a=0.082是當前的基礎水平,b=-1.1699e-06是當前的趨勢,s1,s2等則是每天的季節指數。輸出的SSE=0.52,誤差低於前面兩個模型,該模型構建比較合適。

    採用Holt-winters法的加性模型配合時間序列資料的圖形見下圖:

plot(pm10.ts.hw.S$fitted)  ##加性模型擬合圖

     圖中xhat 為用模型參數估計值回代所得的期望值;level為水平值圖,即穩定部分的估計值;trend為時間趨勢圖,結果未顯示趨勢,故為一條平行線;season為季節分量圖,顯示兩個周期。2008-2009和2009到2010,預報未來一年的pm10含量圖形見下圖。

pm10.ts.hw.S.pre <- predict(pm10.ts.hw.S,365)ts.plot(pm10.ts,pm10.ts.hw.S.pre,lty=1:2)

上圖中2007-2010年的實線部分為觀察值,2010-2011年的虛線部分為預測值。

      本文作為時間序列的第二章,主要介紹經典時間序列的分析方法,包括組分分解,趨勢擬合和平滑法,詳細介紹HoltWinter()函數的使用和結果解讀,趨勢擬合的缺點要有長期穩定趨勢,而在商業和經濟中往往只有一段線性特徵,這種情況要用隨機時間序列分析,後面的ARMA模型。

彭曉武等.R軟體及其環境流行病學應用.中國環境出版社

Jonathan D.Cryer .時間序列分析及應用.機械工業出版社

Cory Leismester.精通機器學習:基於R.人民郵電出版社

作者介紹:醫療大數據統計分析師,擅長R語言。

歡迎各位在後臺留言,懇請斧正!

相關焦點

  • r語言檢驗時間序列平穩性_r中時間序列平穩怎麼檢驗 - CSDN
    讀時間序列數據您要分析時間序列數據的第一件事就是將其讀入R,並繪製時間序列。您可以使用scan()函數將數據讀入R,該函數假定連續時間點的數據位於包含一列的簡單文本文件中。一旦將時間序列數據讀入R,下一步就是將數據存儲在R中的時間序列對象中,這樣就可以使用R的許多函數來分析時間序列數據。要將數據存儲在時間序列對象中,我們使用R中的ts()函數。
  • r語言檢驗序列相關 - CSDN
    時間序列概述按照時間的順序把隨機事件變化發展的過程記錄下來就構成了一個時間序列對時間序列進行觀察、研究,找尋它變化發展的規律,預測它將來的走勢就是時間序列分析時間序列建模基本步驟:平穩性判別2.1 時序圖繪製時序圖是一張二維平面圖,一般橫坐標表示時間,縱坐標表示序列取值,觀察時序圖,我們能獲得序列值的趨勢和走向時序圖的繪製用函數ts()#將美國愛荷華州杜比克 (Dubic) 市 144 個月的平均氣溫 (單位:#°F) 按時間順序記錄下來, 就得到長度為 144 的觀察值序列 > t <- scan
  • r語言tseries - CSDN
    (x,as.Date(charvec)) #包timeSeries#規則的時間序列,數據在規定的時間間隔內出現tm = ts(x,start = c(2010,1), frequency=12 ) #12為按月份,4為按季度,1為按年度zm = zooreg(x,start = c(2010,1), frequency=12 ) #包zooxm
  • R語言ARIMA集成模型預測時間序列分析
    p=18493 本文我們使用4個時間序列模型對每周的溫度序列建模。第一個是通過auto.arima獲得的,然後兩個是SARIMA模型,最後一個是Buys-Ballot方法。我們使用以下數據k=620n=nrow(elec)futu=(k+1):ny=electricite$Load[1:k]plot(y,type="l")我們開始對溫度序列進行建模(溫度序列對電力負荷的影響很大)
  • R語言arma模型診斷_arma模型實現模型r語言 - CSDN
    【數據處理】#具體說明見文檔1#轉成時間序列類型x = rnorm(2)charvec = c(「2010-01-01」,」2010-02-01」)zoo(x,as.Date(charvec))     #包zooxts(x, as.Date(charvec))     #包xtstimeSeries(x,as.Date(charvec))  #包timeSeries#規則的時間序列,數據在規定的時間間隔內出現tm = ts(x,start = c(2010,1
  • 數據統計方法:確定性時間序列的分析法
    通常影響時間序列變化的4個要素如下:長期趨勢(T):是時間序列在長時期內呈現出來的持續向上或持續向下的變動。季節變動(S):是時間序列在一年內重複出現的周期性波動。循環波動:是時間序列呈現出得非固定長度的周期性變動。
  • 從經典結構到改進方法,神經網絡語言模型綜述
    神經網絡語言模型(NNLM)克服了維數的限制,提升了傳統語言模型的性能。本文對 NNLM 進行了綜述,首先描述了經典的 NNLM 的結構,然後介紹並分析了一些主要的改進方法。研究者總結並對比了 NNLM 的一些語料庫和工具包。此外,本文還討論了 NNLM 的一些研究方向。
  • 時間序列分析法中,既看不出數據的離散程度,也不能反映近、遠期
    時間序列分析法中,既看不出數據的離散程度,也不能反映近、遠期數據變化趨勢的方法是(  )。
  • R時間序列分析學習筆記(二十四)—— ARIMA建模和模擬(十六)
    本筆記中原始數據及代碼均來源於李東風先生的R語言教程,在此對李東風先生的無私分享表示感謝。
  • 時間序列之加權移動平均
    前面介紹了一次移動平均和二次移動平均,其實,不管是一次還是二次,都是可以算是加權移動平均的特殊情況。
  • 時間序列深度學習:狀態 LSTM 模型預測太陽黑子(上)
    藉助 rsample 包在初始抽樣上滾動預測,實現時間序列的交叉檢驗。藉助 ggplot2 和 cowplot 可視化回測和預測結果。通過自相關函數(Autocorrelation Function,ACF)圖評估時間序列數據是否適合應用 LSTM 模型。
  • 從字符級的語言建模開始,了解語言模型與序列建模的基本概念
    生成文本序列的通常方式是訓練模型在給定所有先前詞/字符的條件下預測下一個詞/字符出現的概率。此類模型叫作統計語言模型,這種模型會嘗試捕捉訓練文本的統計結構,本文從字符級語言模型和名字預測出發向讀者介紹了語言建模的核心概念。循環神經網絡(RNN)模型常用於訓練這種語言模型,因為它們使用高維隱藏狀態單元處理信息的能力非常強大,建模長期依賴關係的能力也非常強。
  • R語言-stringr-字符串處理
    ,不用轉義路徑複製和直接可用charchar <- r"(我是一名'R語言'學習者)"cat(char)常用函數截取字符串,匹配字符串,添加指定字符籌齊長度,去除左右兩邊空格,分割字符串,添加字符str_pad() 函數向字符串添加字符像工作中處理月份的時候,1,2,3,4,5,6,7,8,9,10,11,12變成01,02,03,04,05,06,07,08,09,10,11,12.按照日期時間輸出文件名稱
  • adf檢驗r語言分析_r語言adf檢驗 - CSDN
    協整檢驗是為了檢驗非平穩序列的因果關係,協整檢驗是解決偽回歸為問題的重要方法。首先回歸偽回歸例子:偽回歸Spurious regression 偽回歸方程的擬合優度、顯著性水平等指標都很好,但是其殘差序列是一個非平穩序列,擬合一個偽回歸:
  • 醫學統計與R語言:GiViTI Calibration Belt
    https://cran.r-project.org/web/packages/givitiR/vignettes/givitiR.htmlNattino, G., Finazzi, S., & Bertolini, G. (2016).
  • 掌握R語言for循環一文就夠了(認真臉)
    R語言相信大家在利用R語言進行數據分析的時候可能會有大數據分析需求。比如醫學數據,數據量大,維度極高,因為醫學的檢測指標多,而且隨著基因測序特別是二代測序等高通量測序(High-throughput sequencing)技術的普及,能一次測上萬的基因,這樣就有幾萬的維度;各種真實世界的統計數據,這些數據比如汽車損耗、公司盈虧也有著大樣本的特點。
  • r 平穩性檢驗 語言_r語言平穩性檢驗方法 - CSDN
    協整檢驗是為了檢驗非平穩序列的因果關係,協整檢驗是解決偽回歸為問題的重要方法。首先回歸偽回歸例子:偽回歸Spurious regression 偽回歸方程的擬合優度、顯著性水平等指標都很好,但是其殘差序列是一個非平穩序列,擬合一個偽回歸:
  • r語言的p值檢驗 - CSDN
    輸入1: rdata = matrix(rnorm(1000* 6, 0, 3), 6) rvar = apply(rdata, 2, var) mean(rvar)結果1: 醫學統計與R語言:一份簡單的數據整理分析醫學統計與R語言:利用金字塔圖比較多個指標醫學統計與R語言:點圖(dotplot)醫學統計與R語言:幕後高手出馬!醫學統計與R語言:Calibration plot with 置信區間醫學統計與R語言:還說自己不會畫Calibration plot!
  • R語言:Newton法、似然函數
    hello,大家好,上一篇分享了如何用R語言實現蒙特卡洛模擬,並用蒙特卡洛模擬計算了分布的均值和方差,今天給大家分享如何用R語言來進行矩估計和似然函數的求解。因為在求解矩估計和似然函數時,可能會遇到非線性方程組,所以先給大家介紹一下如何用Newton法來求解非線性方程組。
  • r語言 動態面板模型 - CSDN
    面板數據面板數據(Panel Data),也成平行數據,具有時間序列和截面兩個維度,整個表格排列起來像是一個面板。何為平穩,一般認為時間序列提出時間趨勢和不變均值(截距)後,剩餘序列為白噪聲序列即零均值、同方差。常用的單位根檢驗的辦法有LLC檢驗和不同單位根的Fisher-ADF檢驗,若兩種檢驗均拒絕存在單位根的原假設則認為序列為平穩的,反之不平穩(對於水平序列,若非平穩,則對序列進行一階差分,再進行後續檢驗,若仍存在單位根,則繼續進行高階差分,直至平穩,I(0)即為零階單整,I(N)為N階單整)。