簡體   English   中英

ARMA預測,趨勢消除問題

[英]ARMA forecasting, problems with trend elimination

我想對此進行一次粗略的ARMA預測,即獲得更多有關如何使用統計模型庫並了解其工作原理的知識。 因此,首先,我啟動了位於網絡中某個位置的示例,但是ARMA擬合和預測不起作用,因為MLE無法收斂。 我認為系列不是固定的,所以首先,我想消除趨勢,這對我來說是一個挑戰。 這是代碼:

   import pandas.io.data as web
import statsmodels.api as sm
import statsmodels.tsa.api as tsa
import datetime
import statsmodels.formula.api as smf


start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2010, 1, 27)
f = web.DataReader("F", 'yahoo', start, end)
print f

#+++++++++++++++TREND+++++++++++++++
atrend = tsa.add_trend(f['Close'].values,trend='ctt')
print atrend
#+++++++++++++++fitting ARMA++++++++

arma =tsa.ARMA(f['Close'].values, order =(2,2))
results= arma.fit()

因此,打印“冒險”給我:

[[  10.28    1.      1.      1.  ]
 [  10.96    1.      2.      4.  ]
 [  11.37    1.      3.      9.  ]
 [  11.66    1.      4.     16.  ]
 [  11.69    1.      5.     25.  ]
 [  12.11    1.      6.     36.  ]
 [  11.87    1.      7.     49.  ]
 [  11.68    1.      8.     64.  ]
 [  11.76    1.      9.     81.  ]
 [  11.6     1.     10.    100.  ]
 [  11.75    1.     11.    121.  ]
 [  11.51    1.     12.    144.  ]
 [  11.18    1.     13.    169.  ]
 [  10.52    1.     14.    196.  ]
 [  11.03    1.     15.    225.  ]
 [  11.19    1.     16.    256.  ]
 [  11.55    1.     17.    289.  ]]

我不完全了解。 我要求有一個ctt趨勢,它是:at ^ 2 + bt + c我為比較計算了Excel中的at ^ 2 + bt + c,at ^ 3 + bt ^ 2 + ct + d,得到了以下結果價值觀。

10,494523
10,780752
11,031687
11,247328
11,427675
11,572728
11,682487
11,756952
11,796123
11,8
11,768583
11,701872
11,599867
11,462568
11,289975
11,082088
10,838907

對於拋物線,y = -1.7647x2 + 33.917x + 1017.3,並且:

10,00432
10,65848
11,1547
11,5105
11,7434
11,87092
11,91058
11,8799
11,7964
11,6776
11,54102
11,40418
11,2846
11,1998
11,1673
11,20462
11,32928

對於三次方程y = 0.292x3-9.649x2 + 92.319x + 917.47。 即使是現在,我仍然不知道如何將這些值插入arma = tsa.ARMA( f ['Close']。values ,order =(2,2))以檢查是否可以執行下一個任務。

總而言之,我的想法是簡要介紹一下ARMA預測如何在python中使用,但是對我而言並非如此。

它本來應該很容易,但是處理解釋變量,exog和趨勢仍然有一些棘手的部分。 exog處理是ARMA的新增功能。)

ARMA使用exog關鍵字表示平均值預測的其他解釋變量。 該常數通過fit方法的trend關鍵字包含,當前不能包含在exog 不幸的是,趨勢關鍵字不允許任意定單趨勢。

所以在您的情況下,這樣的事情應該起作用:

arma = tsa.ARMA(f['Close'].values, exog=f[['trend1', 'trend2']] order=(2,2))

您將需要同樣的趨勢exog對樣品進行預測的predict

這里https://gist.github.com/josef-pkt/1ea164439b239b228557是我的秘密要點,我曾經弄清楚了如何在ARMA中使用exog。

當我們對樣本外預測有所了解時,當前的主模型和即將推出的statsmodels 0.7解決了一些計時問題。

通常,可以使用OLS或其他方法對解釋變量上的時間序列進行回歸,然后使用殘差來估計ARMA模型。 這適用於預測,但是ARMA估計的標准誤差和預測標准誤差將是錯誤的,因為它們沒有考慮初始估計(AFAIK)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM