最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

拓端tecdat|【視頻】Python和R使用指數(shù)加權(quán)平均(EWMA),ARIMA自回歸移動平均模型預(yù)測

2021-07-19 11:21 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=21773

原文出處:拓端數(shù)據(jù)部落公眾號

視頻

在Python和R語言中建立EWMA,ARIMA模型預(yù)測時間序列

概述

  • 學(xué)習(xí)創(chuàng)建時間序列預(yù)測的步驟

  • 關(guān)注Dickey-Fuller檢驗和ARIMA(自回歸移動平均)模型

  • 從理論上學(xué)習(xí)這些概念以及它們在python中的實現(xiàn)

介紹

時間序列(從現(xiàn)在起稱為TS)被認(rèn)為是數(shù)據(jù)科學(xué)領(lǐng)域中鮮為人知的技能之一。

使用python創(chuàng)建時間序列預(yù)測

我們使用以下步驟:

  1. 時間序列是什么

  2. 加載和處理時間序列

  3. 如何檢驗時間序列的平穩(wěn)性?

  4. 如何使時間序列平穩(wěn)?

  5. 預(yù)測時間序列

1.什么是時間序列?

顧名思義,TS是以固定時間間隔收集的數(shù)據(jù)點的集合。

對這些數(shù)據(jù)進(jìn)行分析,以確定長期趨勢,從而預(yù)測未來或進(jìn)行其他形式的分析。

但是什么使TS不同于常規(guī)回歸問題呢?

  1. 它取決于時間。所以線性回歸模型的基本假設(shè),即觀測值是獨立的,在這種情況下不成立。

  2. 隨著一個增加或減少的趨勢,大多數(shù)TS具有某種形式的季節(jié)性趨勢,即特定于特定時間范圍的變化。例如,如果你看到一件羊毛夾克的銷售隨著時間的推移,你一定會發(fā)現(xiàn)冬季的銷售量更高。

由于其固有的特性,對其進(jìn)行分析涉及到各種步驟。下面將詳細(xì)討論這些問題。讓我們從在Python中加載一個TS對象開始。我們使用航空乘客數(shù)據(jù)。

2加載和處理時間序列

Pandas有專門的庫來處理TS對象,特別是datatime64[ns]類,它存儲時間信息,我們可以快速執(zhí)行一些操作。讓我們從啟動所需的庫開始:



  1. %matplotlib inline


  2. from matplotlib.pylab import rcParams



  3. data = pd.read_csv('AirPassengers.csv', parse_dates=['Month'], index_col='Month')


讓我們逐一理解這些論點:

  1. parse? dates:指定包含日期時間信息的列。如上所述,列名是'Month'。

  2. index_col:將Pandas用于TS數(shù)據(jù)背后的一個關(guān)鍵思想是,索引必須是描述日期時間信息的變量。所以這個參數(shù)告訴panda使用'Month'列作為索引。

  3. date parse:指定一個函數(shù),將輸入字符串轉(zhuǎn)換為datetime變量。默認(rèn)情況下,讀取格式為“YYYY-MM-DD HH:MM:SS”的數(shù)據(jù)。如果數(shù)據(jù)不是此格式,則必須手動定義格式。類似于這里定義的dataparse函數(shù)的東西可以用于此目的。

現(xiàn)在我們可以看到數(shù)據(jù)以time對象作為索引,#Passengers作為列。我們可以使用以下命令交叉檢查索引的數(shù)據(jù)類型:

注意dtype='datetime[ns]'確認(rèn)它是一個datetime對象。作為個人偏好,我會將列轉(zhuǎn)換為Series對象,以防止每次使用TS時都引用列名稱。

  1. ts = data[‘#Passengers’] ts.head(10)


在進(jìn)一步討論之前,我將討論一些TS數(shù)據(jù)的索引技術(shù)。讓我們從選擇Series對象中的特定值開始。這可以通過以下兩種方式實現(xiàn):

  1. #1.指定索引為字符串常量:

  2. ts['1949-01-01']


  3. #2.導(dǎo)入datetime庫并使用'datetime'函數(shù):

  4. from datetime import datetime

兩者都將返回值“112”,這也可以從以前的輸出中確認(rèn)。假設(shè)我們想要1949年5月之前的所有數(shù)據(jù)。這可以通過兩種方式實現(xiàn):

  1. #1. 指定整個范圍:

  2. ts['1949-01-01':'1949-05-01']


  3. #2. 如果其中一個索引位于末尾,請使用“:”:

  4. ts[:'1949-05-01']

兩者都將產(chǎn)生以下輸出:

這里有兩點需要注意:

  1. 與數(shù)字索引不同的是,結(jié)束索引包含在這里。例如,如果我們將列表索引為[:5],那么它將返回索引處的值–[0,1,2,3,4]。但這里的索引“1949-05-01”包含在輸出中。

  2. 必須對索引進(jìn)行排序,才能使范圍發(fā)揮作用。?

考慮另一個需要1949年所有值的例子。這可以通過以下方式實現(xiàn):

ts['1949']

月份部分被省略了。類似地,如果您選擇某個月的所有日期,則可以省略日期部分。
現(xiàn)在,讓我們繼續(xù)分析TS。

3.如何檢驗時間序列的平穩(wěn)性?

如果TS的統(tǒng)計特性(如均值、方差)隨時間保持不變,則稱其為平穩(wěn)的。但為什么重要呢?大多數(shù)TS模型都假設(shè)TS是平穩(wěn)的。直覺上,我們可以假設(shè),如果一個TS在一段時間內(nèi)有一個特定的行為,那么它很有可能在將來也會有同樣的行為。與非平穩(wěn)序列相比,平穩(wěn)序列的相關(guān)理論更為成熟和易于實現(xiàn)。
平穩(wěn)性是使用非常嚴(yán)格的標(biāo)準(zhǔn)來定義的。然而,出于實際目的,我們可以假設(shè)序列是平穩(wěn)的,如果它隨時間具有恒定的統(tǒng)計特性,即:

  1. 恒定平均值

  2. 恒定方差

  3. 不依賴于時間的自協(xié)方差。

我將跳過這些細(xì)節(jié),因為在本文中對其進(jìn)行了非常明確的定義。讓我們開始測試平穩(wěn)性的方法。首先也是最重要的是簡單地繪制數(shù)據(jù)并進(jìn)行可視化分析??梢允褂靡韵旅罾L制數(shù)據(jù):

plt.plot(ts)

很明顯,隨著一些季節(jié)性變化,數(shù)據(jù)總體呈上升趨勢。然而,可能并不總是能夠做出這樣的視覺直觀推斷(我們稍后會看到這樣的情況)。因此,更正式地說,我們可以使用以下方法檢查平穩(wěn)性:

  1. 繪制滾動統(tǒng)計:我們可以繪制移動平均值或移動方差,看它是否隨時間變化。移動平均值/方差,我的意思是,在任何時刻‘t’,我們將取去年的平均值/方差,即過去12個月的平均值/方差。但這更像是一種視覺技術(shù)。

  2. Dickey-Fuller檢驗:這是檢驗平穩(wěn)性的統(tǒng)計檢驗之一。這里的零假設(shè)是TS是非平穩(wěn)的。檢驗結(jié)果包括檢驗統(tǒng)計量和不同置信水平的一些臨界值。如果“檢驗統(tǒng)計量”小于“臨界值”,我們可以拒絕零假設(shè)并說序列是平穩(wěn)的。

在這一點上,這些概念聽起來可能不是很直觀。
回到平穩(wěn)性檢查,我們將使用滾動統(tǒng)計圖以及Dickey-Fuller檢驗結(jié)果很多,所以我定義了一個函數(shù),它以TS作為輸入并為我們生成它們。請注意,我繪制了標(biāo)準(zhǔn)差而不是方差,以保持單位與平均值相似。

  1. def test_stat(timeseries):


  2. orig = plt.plot(timeseries, color='blue',label='原始序列')

  3. mean = plt.plot(rolmean, color='red', label='滾動平均')

  4. std = plt.plot(rolstd, color='black', label = '滾動標(biāo)準(zhǔn)差')

  5. plt.title('滾動平均數(shù)和標(biāo)準(zhǔn)偏差',fontproperties=myfont)



  6. #執(zhí)行Dickey-Fumer 檢驗:

  7. dftest = adfuller(timeseries, maxlag=13, regression='ctt', autolag='BIC')


讓我們?yōu)檩斎胄蛄羞\行它:

?test_stat(ts)


雖然標(biāo)準(zhǔn)差的變化很小,但平均值明顯隨時間增加,這不是一個平穩(wěn)序列。而且,檢驗統(tǒng)計量遠(yuǎn)大于臨界值。請注意,應(yīng)該比較有符號的值,而不是絕對值。
下一步,我們將討論可以用來將這個TS轉(zhuǎn)換平穩(wěn)的方法。

4如何使時間序列平穩(wěn)?

雖然許多TS模型都采用平穩(wěn)性假設(shè),但實際時間序列中幾乎沒有一個是平穩(wěn)的。統(tǒng)計學(xué)家們已經(jīng)找到了使序列平穩(wěn)的方法,我們現(xiàn)在就來討論。實際上,要使一個序列完全平穩(wěn)幾乎是不可能的,但我們要盡量接近它。
讓我們了解是什么使TS不穩(wěn)定。TS的非平穩(wěn)性有兩個主要原因:

  1. 趨勢-隨時間變化的平均值。例如,在這個例子中,我們看到平均而言,乘客人數(shù)隨著時間的推移而增長。

  2. 季節(jié)性-特定時間范圍內(nèi)的變化。由于加薪或節(jié)日的原因,人們可能有在特定月份出現(xiàn)的傾向。

其基本原理是對序列中的趨勢和季節(jié)性進(jìn)行建模或估計,并從序列中去除這些趨勢和季節(jié)性以得到平穩(wěn)序列。然后統(tǒng)計預(yù)測技術(shù)就可以在這個序列上實現(xiàn)。最后一步是通過應(yīng)用趨勢和季節(jié)性約束將預(yù)測值轉(zhuǎn)換為原始規(guī)模。
注意:我將討論一些方法。在這種情況下,有些可能工作得很好,而有些可能不行。但我們的想法是掌握所有的方法,而不是只關(guān)注手頭的問題。
讓我們從趨勢部分開始。

估計和消除趨勢

減少趨勢的第一個技巧之一可以轉(zhuǎn)換。例如,在這種情況下,我們可以清楚地看到存在顯著的增長趨勢。因此,我們可以應(yīng)用轉(zhuǎn)換,以懲罰更高的值,而不是較小的值。這些可以取對數(shù),平方根,立方根等。在此處取對數(shù)轉(zhuǎn)換簡便簡單:

np.log(ts)

在這種簡單的情況下,很容易看到數(shù)據(jù)的未來趨勢。但在有噪音的情況下,它不是很直觀。因此,我們可以使用一些技術(shù)來估計或模擬這一趨勢,然后將其從序列中刪除。有很多方法可以做到這一點,其中最常用的有:

  1. 聚合-取一段時間的平均值,如月/周平均值

  2. 平滑-取滾動平均值

  3. 多項式擬合-擬合回歸模型

我將在這里討論平滑,你應(yīng)該嘗試其他技術(shù),以及可能解決其他問題。平滑是指采取滾動估計,即考慮過去的幾個實例。有很多種方法,但我將在這里討論其中的兩種。

移動(滾動)平均

在這種方法中,我們根據(jù)時間序列的頻率取“k”連續(xù)值的平均值。這里我們可以取過去一年的平均值,也就是最近12個值。pandas有確定滾動統(tǒng)計的特定功能。

pd.rolling_mean(ts_log,12)

紅線表示滾動平均值。我們從原來的數(shù)列中減去這個。注意,因為我們?nèi)∽詈?2個值的平均值,所以滾動平均值沒有定義前11個值。這可以觀察到:

ts_log - moving_avg

注意前11個是Nan。讓我們刪除這些NaN值并檢查圖以檢驗平穩(wěn)性。

moving_avg_diff.dropna(inplace=True)


這看起來是一個更好的系列。滾動值似乎略有變化,但沒有具體趨勢。而且,檢驗統(tǒng)計量小于5%的臨界值,所以我們可以用95%的置信度說這是一個平穩(wěn)序列。

加權(quán)移動平均值(EWMA)

然而,這種方法的一個缺點是,時間段必須嚴(yán)格定義,在這種情況下,我們可以取年平均數(shù),但在預(yù)測股票價格等復(fù)雜情況下,很難得出一個數(shù)字。所以我們?nèi)∫粋€“加權(quán)移動平均值”,其中最近的值被賦予更高的權(quán)重。分配權(quán)重的方法有很多種,一種流行的方法是指數(shù)加權(quán)移動平均法,即用衰減因子將權(quán)重分配給所有先前的值。請在此處查找詳細(xì)信息。這可以實現(xiàn)為:

ewma(ts_log, half=12)

請注意,這里的參數(shù)“半衰期”用于定義指數(shù)衰減的量。這只是一個假設(shè),很大程度上取決于業(yè)務(wù)領(lǐng)域。其他參數(shù),如跨度和質(zhì)心,也可以用來定義衰變,這將在上面共享的鏈接中討論?,F(xiàn)在,讓我們從序列中刪除此項并檢查平穩(wěn)性:

?ts_log - expwighted_avg

這個TS在平均值和標(biāo)準(zhǔn)偏差上的變化甚至更小。此外,檢驗統(tǒng)計量小于1%的臨界值,這比前一種情況要好。注意,在這種情況下,不會出現(xiàn)缺失值,因為從開始算起的所有值都是給定的權(quán)重。所以即使沒有以前的值,它也能工作。

消除趨勢和季節(jié)性

以前討論過的簡單的趨勢減少技術(shù)并不適用于所有情況,特別是那些具有高季節(jié)性的情況。讓我們討論兩種消除趨勢和季節(jié)性的方法:

  1. 差分-用特定的時間差取差分

  2. 分解–對趨勢和季節(jié)性進(jìn)行建模,并將其從模型中移除。

差分

處理趨勢性和季節(jié)性最常用的方法之一是差分。在這項技術(shù)中,我們?nèi)∧骋粫r刻的觀測值與前一時刻的觀測值之差。這在改善平穩(wěn)性方面效果很好。一階差分可按如下方式進(jìn)行:

ts_log - ts_log.shift()

這似乎大大減少了這一趨勢。讓我們使用繪圖進(jìn)行驗證:


我們可以看到平均值和標(biāo)準(zhǔn)差隨時間的變化很小。同時,Dickey-Fuller檢驗統(tǒng)計量小于10%的臨界值,因此TS是平穩(wěn)的,置信度為90%。我們也可以取二階或三階差,在某些應(yīng)用中可能會得到更好的結(jié)果。

分解

在這種方法中,趨勢和季節(jié)性都被分別建模,序列的其余部分被返回。我將跳過統(tǒng)計數(shù)據(jù)得出結(jié)果:

  1. decompose(ts_log)


  2. decomposition.trend

  3. decomposition.seasonal

  4. decomposition.resid

在這里我們可以看到趨勢,季節(jié)性是從數(shù)據(jù)中分離出來的,我們可以對殘差進(jìn)行建模。讓我們檢查殘差的平穩(wěn)性:

ts_log_decompose = residual


Dickey-Fuller檢驗統(tǒng)計量顯著低于1%的臨界值。所以這個t非常接近平穩(wěn)。另外,您應(yīng)該注意到,在本例中,將殘差轉(zhuǎn)換為未來數(shù)據(jù)的原始值不是很直觀。

5預(yù)測時間序列

我們看到了不同的技術(shù),所有這些技術(shù)都相當(dāng)好地使TS平穩(wěn)。因為這是一種非常流行的技術(shù),所以讓我們在差分后在TS上建立模型。此外,在這種情況下,將噪聲和季節(jié)性添加回預(yù)測殘差中相對容易。執(zhí)行趨勢和季節(jié)性估計技術(shù)后,可能有兩種情況:

  1. 一個嚴(yán)格平穩(wěn)的序列,值之間沒有依賴關(guān)系。這是一個簡單的例子,我們可以將殘差建模為白噪聲。但這是非常罕見的。

  2. 值之間有顯著相關(guān)性的一系列。在這種情況下,我們需要使用一些統(tǒng)計模型,如ARIMA來預(yù)測數(shù)據(jù)。

讓我簡單介紹一下ARIMA。我不會深入討論技術(shù)細(xì)節(jié),但如果您希望更有效地應(yīng)用它們,您應(yīng)該詳細(xì)了解這些概念。ARIMA代表自回歸綜合移動平均線。平穩(wěn)時間序列的ARIMA預(yù)測只不過是一個線性(類似于線性回歸)方程。預(yù)測因子取決于ARIMA模型的參數(shù)(p,d,q):

  1. AR(自回歸)項數(shù)(p): AR項是因變量的滯后。例如,如果p為5,x(t)的預(yù)測因子為x(t-1)....x(t-5)。

  2. 移動平均線項數(shù)(q):移動平均線項是預(yù)測方程中的滯后預(yù)測誤差。例如,如果q是5,x(t)的預(yù)測因子將是e(t-1)....e(t-5),其中e(i)是移動平均在第一個瞬間和實際值之間的差值。

  3. 差分的數(shù)量(d):這些是非季節(jié)性差分的數(shù)量,即在這種情況下,我們?nèi)∫浑A差分。所以我們可以傳遞這個變量,讓d=0或者傳遞原始變量,讓d=1。兩者都會產(chǎn)生相同的結(jié)果。

這里的一個重要問題是如何確定“p”和“q”的值。我們先來討論一下。

  1. 自相關(guān)函數(shù)(ACF):它是TS與自身滯后之間相關(guān)性的度量。例如,在滯后5時,ACF會將“t1”…“t2”時刻的序列與“t1-5”…“t2-5”時刻的序列進(jìn)行比較(t1-5和t2是終點)。

  2. 偏自相關(guān)函數(shù)(PACF):它測量了TS之間的相關(guān)性, 但在消除了已經(jīng)解釋的變化之后。例如,在滯后5,它將檢查相關(guān)性,但消除已經(jīng)由滯后1到4解釋的影響。

差分后TS的ACF和PACF圖可以繪制為:


  1. #繪圖ACF:

  2. plt.subplot(121)

  3. plt.plot(lag_acf)

  4. plt.axhline(y=0,linestyle='--',color='gray')


  5. #繪圖PACF:

  6. plt.subplot(122)

  7. plt.plot(lag_pacf)

  8. plt.axhline(y=0,linestyle='--',color='gray')


  9. plt.tight_layout()

在這個圖中,0兩邊的兩條虛線是置信區(qū)間。這些可用于確定“p”和“q”值,如下所示:

  1. p–PACF圖表第一次穿過置信區(qū)間上限的滯后值。如果你仔細(xì)觀察,在這種情況下,p=2。

  2. q–ACF圖表首次穿過置信區(qū)間上限的滯后值。如果你仔細(xì)觀察,在這種情況下,q=2。

現(xiàn)在,讓我們建立3種不同的ARIMA模型,既考慮個體效應(yīng),也考慮組合效應(yīng)。我也會輸出RSS。請注意,這里的RSS是殘差值,而不是實際序列。
我們需要先加載ARIMA模型:

可以使用ARIMA的order參數(shù)指定p、d、q值,該參數(shù)采用元組(p、d、q)。讓我們模擬3個案例:

AR模型

  1. model.fit(disp=-1)

  2. plt.plot(ts_log_diff)

MA模型

  1. results_MA = model.fit(disp=-1)

  2. plt.plot(ts_log_diff)

組合模型


  1. plt.plot(ts_log_diff)

  2. plt.plot(results_ARIMA.fittedvalues, color='red')

在這里,我們可以看到AR和MA模型有幾乎相同的RSS,但是結(jié)合起來會更好?,F(xiàn)在,我們剩下最后一步,即將這些值恢復(fù)到原始比例。

回到原來的比例

由于組合模型給出了最佳結(jié)果,讓我們將其縮放回原始值,看看它的預(yù)測表現(xiàn)如何。第一步是將預(yù)測結(jié)果存儲為一個單獨的序列并觀察它。

請注意,這些開始于'1949-02-01',而不是第一個月。為什么?這是因為我們?nèi)×艘粋€滯后1,第一個元素之前沒有任何東西可以減去。將差分轉(zhuǎn)換為對數(shù)刻度的方法是將這些差分連續(xù)地添加到基數(shù)上。一個簡單的方法是首先確定索引處的累積和,然后將其添加到基數(shù)中。累積總和如下所示:

您可以使用前面的輸出快速地做一些計算,以檢查這些是否正確。接下來我們要把它們加到底數(shù)上。為此,讓我們創(chuàng)建一個以所有值作為基數(shù)的序列,并將其差分相加。這可以這樣做:

這里的第一個元素是基數(shù)本身,然后從那里累計加值。最后一步是取指數(shù)并與原數(shù)列進(jìn)行比較。


  1. plt.plot(predictions_ARIMA)

這些都是Python中的內(nèi)容。我們來學(xué)習(xí)一下如何在R中實現(xiàn)時間序列預(yù)測。

R時間序列預(yù)測

第一步:讀取數(shù)據(jù),計算基本總結(jié)

  1. #安裝包并調(diào)用庫

  2. install.packages("tseries")


  3. #讀取Airpaseengers數(shù)據(jù)

  4. tsdata<-AirPassengers

  5. #識別數(shù)據(jù)類別

  6. class(tsdata)

  7. #觀察時間序列數(shù)據(jù)

  8. tsdata

  9. #數(shù)據(jù)摘要

  10. dfSummary(tsdata)

輸出

  1. class(tsdata)

  2. "ts"

  3. > #觀察時間序列數(shù)據(jù)

  4. > tsdata

  5. Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

  6. 1949 112 118 132 129 121 135 148 148 136 119 104 118

  7. 1950 115 126 141 135 125 149 170 170 158 133 114 140

  8. 1951 145 150 178 163 172 178 199 199 184 162 146 166

  9. 1952 171 180 193 181 183 218 230 242 209 191 172 194

  10. 1953 196 196 236 235 229 243 264 272 237 211 180 201

  11. 1954 204 188 235 227 234 264 302 293 259 229 203 229

  12. 1955 242 233 267 269 270 315 364 347 312 274 237 278

  13. 1956 284 277 317 313 318 374 413 405 355 306 271 306

  14. 1957 315 301 356 348 355 422 465 467 404 347 305 336

  15. 1958 340 318 362 348 363 435 491 505 404 359 310 337

  16. 1959 360 342 406 396 420 472 548 559 463 407 362 405

  17. 1960 417 391 419 461 472 535 622 606 508 461 390 432

  18. > #


  19. tsdata

  20. Dimensions: 144 x 1

  21. Duplicates: 26


  22. ----------------------------------------------------------------------------------------------------

  23. No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing

  24. ---- ---------- -------------------------- ----------------------- --------------------- -------- --

  25. 1 tsdata Mean (sd) : 280.3 (120) 118 distinct values . : . 144 0

  26. [ts] min < med < max: Start: 1949-01 : : . . : (100%) (0%)

  27. 104 < 265.5 < 622 End : 1960-12 : : : : :

  28. IQR (CV) : 180.5 (0.4) : : : : : : :

  29. : : : : : : : : . .

  30. ----------------------------------------------------------------------------------------------------

第2步:檢查時間序列數(shù)據(jù)的周期并繪制原始數(shù)據(jù)

  1. #檢查數(shù)據(jù)并繪制原始數(shù)據(jù)


  2. plot(tsdata, ylab="乘客(1000人)", type="o")

輸出

  1. cycle(tsdata)

  2. Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

  3. 1949 1 2 3 4 5 6 7 8 9 10 11 12

  4. 1950 1 2 3 4 5 6 7 8 9 10 11 12

  5. 1951 1 2 3 4 5 6 7 8 9 10 11 12

  6. 1952 1 2 3 4 5 6 7 8 9 10 11 12

  7. 1953 1 2 3 4 5 6 7 8 9 10 11 12

  8. 1954 1 2 3 4 5 6 7 8 9 10 11 12

  9. 1955 1 2 3 4 5 6 7 8 9 10 11 12

  10. 1956 1 2 3 4 5 6 7 8 9 10 11 12

  11. 1957 1 2 3 4 5 6 7 8 9 10 11 12

  12. 1958 1 2 3 4 5 6 7 8 9 10 11 12

  13. 1959 1 2 3 4 5 6 7 8 9 10 11 12

  14. 1960 1 2 3 4 5 6 7 8 9 10 11 12

步驟3:分解時間序列數(shù)據(jù)

  1. #將數(shù)據(jù)分解為趨勢、季節(jié)性和隨機(jī)誤差分量

  2. plot(tsdata_decom)

輸出

第四步:檢驗數(shù)據(jù)的平穩(wěn)性

  1. #測試數(shù)據(jù)的平穩(wěn)性

  2. #單位根檢驗

  3. adf(tsdata)


  4. #自相關(guān)檢驗

  5. plot(acf(tsdata,plot=FALSE))+ labs(title="航空旅客數(shù)據(jù)相關(guān)圖")


  6. plot(acf(tsdata_decom$random,plot=FALSE))

輸出

  1. Augmented Dickey-Fuller Test


  2. data: tsdata

  3. Dickey-Fuller = -7.3186, Lag order = 5, p-value = 0.01

  4. alternative hypothesis: stationary

the p-value is 0.01 which ip值為0.01,小于0.05,因此,我們拒絕了零假設(shè),因此時間序列是平穩(wěn)的。s <0.05, therefore, we reject the null hypothesis and hence time series is stationary.

最大滯后為1個月或12個月,表明與12個月周期正相關(guān)。
自動繪制7:138的隨機(jī)時間序列觀測值,不包括NA值

步驟5:擬合模型

  1. #擬合模型

  2. #線性模型

  3. plot(tsdata) + smooth(method="lm")



  4. #ARIMA 模型

  5. arimats

  1. Series: tsdata

  2. ARIMA(2,1,1)(0,1,0)[12]


  3. Coefficients:

  4. ar1 ar2 ma1

  5. 0.5960 0.2143 -0.9819

  6. s.e. 0.0888 0.0880 0.0292


  7. sigma^2 estimated as 132.3: log likelihood=-504.92

  8. AIC=1017.85 AICc=1018.17 BIC=1029.35

第6步:預(yù)測


  1. #Arima模型的預(yù)測

  2. fore(arimats, level = c(95))

最后我們有一個原始數(shù)據(jù)的預(yù)測。

最受歡迎的見解

1.在python中使用lstm和pytorch進(jìn)行時間序列預(yù)測

2.python中利用長短期記憶模型lstm進(jìn)行時間序列預(yù)測分析

3.使用r語言進(jìn)行時間序列(arima,指數(shù)平滑)分析

4.r語言多元copula-garch-模型時間序列預(yù)測

5.r語言copulas和金融時間序列案例

6.使用r語言隨機(jī)波動模型sv處理時間序列中的隨機(jī)波動

7.r語言時間序列tar閾值自回歸模型

8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類

9.python3用arima模型進(jìn)行時間序列預(yù)測


拓端tecdat|【視頻】Python和R使用指數(shù)加權(quán)平均(EWMA),ARIMA自回歸移動平均模型預(yù)測的評論 (共 條)

分享到微博請遵守國家法律
陆川县| 靖西县| 平武县| 阿拉善左旗| 渝中区| 大埔区| 峨眉山市| 民权县| 旬阳县| 崇阳县| 兴安县| 大石桥市| 开江县| 建瓯市| 南木林县| 甘谷县| 陆河县| 安仁县| 崇义县| 新和县| 大丰市| 西畴县| 普兰店市| 天镇县| 喀喇| 扶余县| 绍兴市| 林甸县| 忻城县| 武汉市| 嵊泗县| 定西市| 万安县| 孝感市| 琼中| 清流县| 连云港市| 阿尔山市| 丰宁| 郴州市| 金阳县|