[時間序列分析][5]--非平穩時間序列模型與差分

非平穩時間序列模型

通過差分平穩化

差分是什麼

  1. 由Cramer分解定理 : 時間序列 = 確定性影響 + 隨機性影響 , 而確定性影響又可以由多項式決定 , 而對多項式求n次差分 , 既能變成常數
  2. 差分在連續情況下可以理解為導數

    下面我們來看一個例子

f[x_] := x^2 + 3*x + 3;data = Table[f[i], {i, 0, 10, .1}];(*原始圖像*)ListPlot[data, AxesOrigin -> {0, 0}, PlotLabel -> "原始圖像"](*進行第一次差分*)temp = Differences[data];(*第一次差分後的圖像*)ListPlot[temp, PlotLabel -> "第一次差分"](*進行第二次差分*)ListPlot[Differences[temp], PlotLabel -> "第二次差分"]

可以得到如下的圖形

我們可以看到做兩次差分後的圖形是一條直線,即可以將非平穩的時間序列變成平穩的。我們後面會舉一個更好的例子,這個例子先讓大家看一下差分是什麼,差分和求導的聯繫。

是否要做差分–單位根檢驗

單位根檢驗原理 : 對時間序列 data 執行假設檢驗,其中零假設 Subscript[H, 0] 為滿足 AR 模型的時間序列在相應的傳遞函數的分母中有一個單位根,而置換假設 Subscript[H, a] 則相反.

在 mathematica的函數為 UnitRootTest

該函數返回的是p-value , 若p-value越小,則越拒絕原假設,即p-value越小,越不需要進行差分

做多少次差分

  1. v足夠多次的差分運算可以充分地提取原序列中的非平穩確定性信息
  2. v但過度的差分會造成有用信息的浪費

一個例子

我們看一個實際的例子

- 首先通過累加生成一組隨機數

sample = RandomFunction[ARIMAProcess[{-.1}, 2, {.2}, .1], {1, 20^2}];temp = sample[[2]][[1, 1]];ListPlot[sample]

  • 單位根檢驗– 判斷是否要做差分

UnitRootTest[temp, Automatic, "HypothesisTestData"]["TestDataTable"]

可以看到p值很大,即我們需要做差分。

  • 第一次差分

ListPlot@Differences[temp]

做完一次差分後數據還是非平穩的

- 第二次差分

ListPlot@Differences[temp, 2]

可以看到再做了兩次差分之後,數據就已經把趨勢去掉了,就可以用做完差分後的數據去做分析了

  • 再次做單位根檢驗

UnitRootTest[Differences[temp, 2], Automatic, "HypothesisTestData"]["TestDataTable"]

可以看到做完兩次差分後再做單位根檢驗p值就很小了,即不需要再做單位根檢驗了。

ARIMA模型

現在我們有了差分這個工具,於是我們繼續優化我們之前的ARMA模型,改進後的模型稱為ARIMA模型。

ARIMA(p,d,q)–p表示自回歸(AR)的係數,d表示差分的階數,q表示滑動平均(MA)的係數

在mathematica中,我們可以直接調用ARIMA來擬合數據。

隨機遊動

講一個和這個有點關係的,又挺有意思的一個問題。

模型產生典故

§Karl Pearson(1905)在《自然》雜誌上提問:假如有個醉漢醉得非常嚴重,完全喪失方向感,把他放在荒郊野外,一段時間之後再去找他,在什麼地方找到他的概率最大呢?

  • 首先生成一組隨機遊走的數據

data = Accumulate[RandomReal[{-1, 1}, 100]];ListLinePlot[data]

  • 對數據進行一階差分

ListLinePlot[Differences[data]]

可以看到做完一階差分之後數據就已經平穩了。於是我們想到了對差分後的數據檢驗一下是否是白雜訊。我們知道,這些數據是隨機生成的,那麼檢驗出來的結果應該就是白雜訊。我們下面看一下是不是白雜訊。

  • 白雜訊檢驗

ListPlot[Table[AutocorrelationTest[Differences[data], i], {i, 1, 10}], Filling -> Axis]

從圖中,我們可以看到p值較大,則數據是白雜訊。(p值已經大於.5了)

  • 最後我們解決一下上面的問題,在哪裡找到醉漢的概率最大。我們採取模擬的辦法,模擬1000次,統計醉漢第100步的位置。

Histogram@Table[Total[RandomReal[{-1, 1}, {100}]], {1000}]

得到下面的圖像

我們可以看到還是在零點附近找到醉漢的概率最大。大家可以推導一下具體的概率的表達式。

疏係數模型–中間有項可以是0

什麼是疏係數模型

  1. ARIMA(p,d,q)模型是指d階差分後自相關最高階數為p,移動平均最高階數為q的模型,通常它包含p+q個獨立的未知係數
  2. 如果該模型中有部分自相關係數部分移動平滑係數,即原模型中有部分係數省缺了,那麼該模型稱為疏係數模型。

如何判斷是疏係數模型

我們可以通過自相關圖和偏自相關圖來判別是否是稀疏模型

我們來看下面的一個例子,下面是數據–1917年-1975年美國23歲婦女每萬人生育率序列

  • 數據

{{1917., 183.1}, {1918., 183.9}, {1919., 163.1}, {1920., 179.5}, {1921., 181.4}, {1922., 173.4}, {1923., 167.6}, {1924., 177.4}, {1925., 171.7}, {1926., 170.1}, {1927., 163.7}, {1928., 151.9}, {1929., 145.4}, {1930., 145.}, {1931., 138.9}, {1932., 131.5}, {1933., 125.7}, {1934., 129.5}, {1935., 129.6}, {1936., 129.5}, {1937., 132.2}, {1938., 134.1}, {1939., 132.1}, {1940., 137.4}, {1941., 148.1}, {1942., 174.1}, {1943., 174.7}, {1944., 156.7}, {1945., 143.3}, {1946., 189.7}, {1947., 212.}, {1948., 200.4}, {1949., 201.8}, {1950., 200.7}, {1951., 215.6}, {1952., 222.5}, {1953., 231.5}, {1954., 237.9}, {1955., 244.}, {1956., 259.4}, {1957., 268.8}, {1958., 264.3}, {1959., 264.5}, {1960., 268.1}, {1961., 264.}, {1962., 252.8}, {1963., 240.}, {1964., 229.1}, {1965., 204.8}, {1966., 193.3}, {1967., 179.}, {1968., 178.1}, {1969., 181.1}, {1970., 165.6}, {1971., 159.8}, {1972., 136.1}, {1973., 126.3}, {1974., 123.3}, {1975., 118.5}}

我們看一下時序圖

可以看到數據不是平穩的,我們做一下單位根檢驗

- 單位根檢驗

可以看到p值>0.5,而且從圖上看也不平穩,故做一階差分。

  • 做一階差分

ListLinePlot[Differences[data[[All, 2]]], PlotMarkers -> {"[FilledDiamond]", 7}]

對做了差分後的數據做單位根檢驗

可以看到p值為10^-6次方,故不需要再做差分

  • 求自相關圖和偏自相關圖

我們可以從自相關圖和偏自相關圖中看出疏係數模型。如在這裡,模型為ARIMA ((1, 4, 5), 1, 0),從自相關圖中可以看出滯後1,4,5比較大,則第一第二個自相關係數為0。其餘同理。

2017/5/21


推薦閱讀:

小白學數據 | 除了計算大姨媽周期,時間序列分析還有什麼用
時序數據分析有哪些套路(一)
EGARCH與GARCH的區別?
時間序列的Garch模型怎麼定階?
目前的時間序列預測的state of the art 方法?

TAG:时间序列分析 | WolframMathematica | 应用数学 |