R語言使用ARIMA模型預測股票收益
原文鏈接:http://tecdat.cn/?p=2831
?
“預測非常困難,特別是關于未來”。丹麥物理學家尼爾斯·波爾(Neils Bohr)
很多人都會看到這句名言。預測是這篇博文的主題。在這篇文章中,我們將介紹流行的ARIMA預測模型,以預測股票的收益,并演示使用R編程的ARIMA建模的逐步過程。
時間序列中的預測模型是什么?
預測涉及使用其歷史數(shù)據(jù)點預測變量的值,或者還可以涉及在給定另一個變量的值的變化的情況下預測一個變量的變化。預測方法主要分為定性預測和定量預測。時間序列預測屬于定量預測的范疇,其中統(tǒng)計原理和概念應用于變量的給定歷史數(shù)據(jù)以預測同一變量的未來值。使用的一些時間序列預測技術包括:
自回歸模型(AR)
移動平均模型(MA)
季節(jié)回歸模型
分布式滯后模型
什么是自回歸移動平均模型(ARIMA)?
ARIMA代表Autoregressive Integrated Moving Average。ARIMA也被稱為Box-Jenkins方法。Box和Jenkins聲稱,通過對系列Y t進行差分,可以使非平穩(wěn)數(shù)據(jù)平穩(wěn)。Y t的一般模型寫成,
ARIMA模型結合了三種基本方法:
自回歸(AR) - 在自回歸的一個給定的時間序列數(shù)據(jù)在他們自己的滯后值,這是由在模型中的“P”值表示回歸的值。
差分(I-for Integrated) - 這涉及對時間序列數(shù)據(jù)進行差分以消除趨勢并將非平穩(wěn)時間序列轉換為平穩(wěn)時間序列。這由模型中的“d”值表示。如果d = 1,則查看兩個時間序列條目之間的差分,如果d = 2,則查看在d = 1處獲得的差分的差分,等等。
移動平均線(MA) - 模型的移動平均性質由“q”值表示,“q”值是誤差項的滯后值的數(shù)量。
該模型稱為自回歸整合移動平均值或Y t的 ARIMA(p,d,q)。我們將按照下面列舉的步驟來構建我們的模型。
第1步:測試和確保平穩(wěn)性
要使用Box-Jenkins方法對時間序列進行建模,該系列必須是平穩(wěn)的。平穩(wěn)時間序列表示沒有趨勢的時間序列,其中一個具有恒定的均值和隨時間的方差,這使得預測值變得容易。
測試平穩(wěn)性 -我們使用Augmented Dickey-Fuller單位根測試測試平穩(wěn)性。對于平穩(wěn)的時間序列,由ADF測試得到的p值必須小于0.05或5%。如果p值大于0.05或5%,則可以得出結論:時間序列具有單位根,這意味著它是一個非平穩(wěn)過程。
差分 -為了將非平穩(wěn)過程轉換為平穩(wěn)過程,我們應用差分方法。區(qū)分時間序列意味著找出時間序列數(shù)據(jù)的連續(xù)值之間的差分。差分值形成新的時間序列數(shù)據(jù)集,可以對其進行測試以發(fā)現(xiàn)新的相關性或其他有趣的統(tǒng)計特性。
我們可以連續(xù)多次應用差分方法,產(chǎn)生“一階差分”,“二階差分”等。
在我們進行下一步之前,我們應用適當?shù)牟罘猪樞颍╠)使時間序列平穩(wěn)。
第2步:識別p和q
在此步驟中,我們通過使用自相關函數(shù)(ACF)和偏相關函數(shù)(PACF)來確定自回歸(AR)和移動平均(MA)過程的適當順序。
識別AR模型的p階
對于AR模型,ACF將以指數(shù)方式衰減,PACF將用于識別AR模型的順序(p)。如果我們在PACF上的滯后1處有一個顯著峰值,那么我們有一個1階AR模型,即AR(1)。如果我們在PACF上有滯后1,2和3的顯著峰值,那么我們有一個3階AR模型,即AR(3)。
識別MA模型的q階
對于MA模型,PACF將以指數(shù)方式衰減,ACF圖將用于識別MA過程的順序。如果我們在ACF上的滯后1處有一個顯著的峰值,那么我們有一個1階的MA模型,即MA(1)。如果我們在ACF上的滯后1,2和3處有顯著的峰值,那么我們有一個3階的MA模型,即MA(3)。
第3步:估算和預測
一旦我們確定了參數(shù)(p,d,q),我們就可以估算ARIMA模型在訓練數(shù)據(jù)集上的準確性,然后使用擬合模型使用預測函數(shù)預測測試數(shù)據(jù)集的值。最后,我們交叉檢查我們的預測值是否與實際值一致。
使用R編程構建ARIMA模型
現(xiàn)在,讓我們按照解釋的步驟在R中構建ARIMA模型。有許多軟件包可用于時間序列分析和預測。我們加載相關的R包進行時間序列分析,并從雅虎財經(jīng)中提取股票數(shù)據(jù)。
#從雅虎財經(jīng)中提取數(shù)據(jù)
getSymbols('TECHM.NS',from ='2012-01-01',to =''2015-01-01')
#選擇相關的收盤價序列
stock_prices = TECHM.NS [,4]
在下一步中,我們計算股票的對數(shù)收益,因為我們希望ARIMA模型預測對數(shù)收益而不是股票價格。我們還使用繪圖函數(shù)繪制了對數(shù)收益序列。
#計算股票 一階差分
stock = diff(log(stock_prices),lag = 1)
plot(stock,type ='l',main ='log return plot')

接下來,我們對收益序列數(shù)據(jù)調用ADF測試以檢查平穩(wěn)性。來自ADF測試的p值為0.01告訴我們該序列是平穩(wěn)的。如果序列是非平穩(wěn)的,我們首先會對回歸序列進行差分,使其序列平穩(wěn)。

在下一步中,我們將數(shù)據(jù)集拆分為兩部分 - 訓練和測試
acf.stock = acf(stock [c(1:breakpoint),],main ='ACF Plot',lag.max = 100)


我們可以觀察這些圖并得出自回歸(AR)階數(shù)和移動平均(MA)階數(shù)。
我們知道,對于AR模型,ACF將呈指數(shù)衰減,PACF圖將用于識別AR模型的階數(shù)(p)。對于MA模型,PACF將以指數(shù)方式衰減,ACF圖將用于識別MA模型的階數(shù)(q)。從這些圖中我們選擇AR order = 2和MA order = 2.因此,我們的ARIMA參數(shù)將是(2,0,2)。
我們的目標是從斷點開始預測整個收益序列。我們將在R中使用For循環(huán)語句,在此循環(huán)中,我們預測測試數(shù)據(jù)集中每個數(shù)據(jù)點的收益值。
在下面給出的代碼中,我們首先初始化一個序列,它將存儲實際的收益,另一個系列來存儲預測的收益。在For循環(huán)中,我們首先根據(jù)動態(tài)分割點劃分訓練數(shù)據(jù)集和測試數(shù)據(jù)集。
我們在訓練數(shù)據(jù)集上調用arima函數(shù),其指定的階數(shù)為(2,0,2)。我們使用這個擬合模型通過使用forecast.Arima函數(shù)來預測下一個數(shù)據(jù)點。該功能設置為99%置信水平??梢允褂弥眯哦葏?shù)來增強模型。我們將使用模型中的預測點估計。預測函數(shù)中的“h”參數(shù)表示我們要預測的值的數(shù)量。
我們可以使用摘要功能確認ARIMA模型的結果在可接受的范圍內(nèi)。在最后一部分中,我們將每個預測收益和實際收益分別附加到預測收益序列和實際收益序列。
#初始化實際對數(shù)收益率的xts對象
Actual_series = xts(0,as.Date(“2014-11-25”,“%Y-%m-%d”))
#初始化預測收益序列的數(shù)據(jù)
fit = arima(stock_train,order = c(2,0,2),include.mean = FALSE)
#繪制殘差的acf圖
acf(適合$ residuals,main =“Residuals plot”)
arima.forecast = forecast.Arima(fit,h = 1,level = 99)
#繪制預測
#為預測期創(chuàng)建一系列預測收益
forecasted_series = rbind(forecasted_series,arima.forecast $ mean [1])
#為預測期創(chuàng)建一系列實際收益
Actual_series = c(Actual_series,xts(Actual_return))
RM(Actual_return)
在我們轉到代碼的最后部分之前,讓我們從測試數(shù)據(jù)集中檢查ARIMA模型的結果以獲取樣本數(shù)據(jù)點。

從得到的系數(shù),收益方程可寫為:
Y t = 0.6072 * Y (t-1) -0.8818 * Y (t-2) -0.5447ε (t-1)+0.8972ε (t-2)
系數(shù)給出了標準誤差,這需要在可接受的范圍內(nèi)。Akaike信息標準(AIC)評分是ARIMA模型準確性的良好指標。模型更好地降低AIC得分。我們還可以查看殘差的ACF圖; 良好的ARIMA模型的自相關性將低于閾值限制。預測的點收益為-0.001326978,在輸出的最后一行中給出。

讓我們通過比較預測回報與實際回報來檢查ARIMA模型的準確性。代碼的最后一部分計算此準確性信息。
#調整實際收益率序列的長度
Actual_series = Actual_series [-1]
#創(chuàng)建預測序列的時間序列對象
forecasted_series = xts(forecasted_series,index(Actual_series))
#創(chuàng)建兩個回歸系列的圖 - 實際與預測
#創(chuàng)建一個表格,用于預測的準確性
comparsion = merge(Actual_series,forecasted_series)
comparsion $ Accuracy = sign(comparsion $ Actual_series)== sign(comparsion $ Precasted)
#計算準確度百分比指標
Accuracy_percentage = sum(comparsion $ Accuracy == 1)* 100 / length(comparsion $ Accuracy)


模型的準確率百分比達到55%左右??梢試L試運行模型以獲得(p,d,q)的其他可能組合,或者使用auto.arima函數(shù)選擇最佳的最佳參數(shù)來運行模型。
結論
最后,在本文中,我們介紹了ARIMA模型,并將其應用于使用R編程語言預測股票價格收益。我們還通過實際收益檢查了我們的預測結果。
? ?

最受歡迎的見解
1.在python中使用lstm和pytorch進行時間序列預測
2.python中利用長短期記憶模型lstm進行時間序列預測分析
3.使用r語言進行時間序列(arima,指數(shù)平滑)分析
4.r語言多元copula-garch-模型時間序列預測
5.r語言copulas和金融時間序列案例
6.使用r語言隨機波動模型sv處理時間序列中的隨機波動
7.r語言時間序列tar閾值自回歸模型
8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類
9.python3用arima模型進行時間序列預測