HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    發(fā)布時(shí)間:2023-04-18 16:55:58     稿源: 創(chuàng)意嶺    閱讀: 71        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于單步預(yù)測(cè)和多步預(yù)測(cè)的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫(xiě)出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    一、預(yù)測(cè)步長(zhǎng)是什么

    計(jì)算機(jī)控制算法。多步預(yù)測(cè)控制,是用于數(shù)值算法采用多步測(cè)試,滾動(dòng)優(yōu)化和反饋校正等控制策略。預(yù)測(cè)步長(zhǎng)是一類新型的計(jì)算機(jī)控制算法,因而控制效果好,適用于控制不宜建立精確數(shù)字模型且比較復(fù)雜的工業(yè)生產(chǎn)過(guò)程。

    二、eviews預(yù)測(cè)

    如何使用EViews軟件對(duì)時(shí)間序列進(jìn)行預(yù)測(cè)

    http://jingyan.baidu.com/article/1709ad8089a69e4634c4f0ff.html

    做計(jì)量分析的目的就是為了探尋經(jīng)濟(jì)現(xiàn)象內(nèi)在的相關(guān)關(guān)系,而預(yù)測(cè)效果的好壞則是檢驗(yàn)這種關(guān)系存在與否以及解釋力度大小的標(biāo)準(zhǔn)。模型一般分為兩類,一是基于單個(gè)序列的模型,二則是我們常見(jiàn)常用的多序列模型。

    一、單序列模型的預(yù)測(cè)

    最常用的方法就是指數(shù)平滑法,這個(gè)已經(jīng)在之前詳細(xì)闡述。

    ARMA模型

    時(shí)間序列可以通過(guò)將時(shí)間序列引入轉(zhuǎn)化為多序列模型

    二、多序列模型的預(yù)測(cè)

    1、一般理解

    當(dāng)確定了序列之間的回歸方程之后即可根據(jù)回歸方程進(jìn)行擬合預(yù)測(cè)。Eviews路徑:回歸方程窗口-----forecast。

    衡量預(yù)測(cè)效果的標(biāo)準(zhǔn)是預(yù)測(cè)誤差,即預(yù)測(cè)值與實(shí)際值之間的偏差。預(yù)測(cè)輸出界面參數(shù)的理解如下:

    第一,誤差均方根(Root Mean Squared Error)。對(duì)預(yù)測(cè)誤差的等可能加權(quán)平方和求平方根

    第二,平均絕對(duì)誤差(Mean Absolute Error)。對(duì)預(yù)測(cè)誤差的絕對(duì)值求平均。

    第三,平均相對(duì)誤差(Mean Abs.Percent Error)。其計(jì)算公式與平均絕對(duì)方差一樣都是對(duì)誤差采用絕對(duì)值,但這里要除以實(shí)際值,所以最終度量的是相對(duì)誤差。因?yàn)楣匠艘粤?00,所以輸出結(jié)果中其值的度量單位為百分比。

    第四,Theil不等系數(shù)(Theil Inequality Coefficient)。它的計(jì)算公式含義也很清晰,分子就是誤差均方根,分母則是預(yù)測(cè)值等可能加權(quán)平方和開(kāi)平方根+實(shí)際值等可能加權(quán)平方和開(kāi)平方根。因此這一系數(shù)的取值區(qū)間為0-1,越靠近0,表示單位誤差均方根越小,即預(yù)測(cè)值與實(shí)際值越靠近,模型擬合效果越好。前面三個(gè)參數(shù)的值也是如此,越小表示模型擬合效果越好,只是怎樣才叫小卻是無(wú)從判定。

    預(yù)測(cè)均方差又可以分解為三個(gè)指標(biāo)之和,偏差比、方差比和協(xié)方差比之和為1:

    第一,偏差比率(Bias Proportion)

    第二,方差比率(Variance Proportion)

    第三,協(xié)方差比率(Covariance Proportion)

    偏差比率表明預(yù)測(cè)均值與序列實(shí)際均值的偏差程度(預(yù)測(cè)均值與實(shí)際均值之差的平方占誤差均方的比率);方差比表明預(yù)測(cè)方差與序列實(shí)際方差的偏離程度(預(yù)測(cè)值和實(shí)際值的分布偏差標(biāo)準(zhǔn)差之差的平方占誤差均方的比率);協(xié)方差比率衡量非系統(tǒng)誤差的大小(預(yù)測(cè)值和實(shí)際值的分布偏差協(xié)方差占誤差均方的比率)。

    如果預(yù)測(cè)結(jié)果好,那么偏差比率和方差比率應(yīng)該較小,協(xié)方差比率較大。

    2、動(dòng)態(tài)預(yù)測(cè)與靜態(tài)預(yù)測(cè)

    動(dòng)態(tài)預(yù)測(cè)是進(jìn)行多步預(yù)測(cè),除了第一個(gè)預(yù)測(cè)值是用解釋變量的實(shí)際值預(yù)測(cè)外,其后各期預(yù)測(cè)值都是采用遞推預(yù)測(cè)的方法,用滯后被解釋變量(即所謂的動(dòng)態(tài)項(xiàng))的前期預(yù)測(cè)值代入估計(jì)(預(yù)測(cè))方程來(lái)預(yù)測(cè)下一期的預(yù)測(cè)值。

    靜態(tài)預(yù)測(cè)則是對(duì)進(jìn)行一系列的一步預(yù)測(cè),即它必須用解釋變量的真實(shí)值來(lái)進(jìn)行預(yù)測(cè),而不能使用被解釋變量的預(yù)測(cè)值作為解釋變量進(jìn)行預(yù)測(cè)。靜態(tài)預(yù)測(cè)要求外生變量和任何滯后內(nèi)生變量在預(yù)測(cè)樣本中的觀測(cè)值可以獲得。如果沒(méi)有某期數(shù)據(jù),對(duì)應(yīng)該期的預(yù)測(cè)值為NA。但是,它并不會(huì)對(duì)以后預(yù)測(cè)產(chǎn)生影響。所以,如果進(jìn)行靜態(tài)預(yù)測(cè)還需要給出用于預(yù)測(cè)的解釋變量的值以及滯后被解釋變量的值。如果要以解釋變量的估計(jì)值為基礎(chǔ)進(jìn)行預(yù)測(cè),則需要先打開(kāi)解釋變量的序列窗口,在預(yù)測(cè)之前將這些估計(jì)值添加進(jìn)其相應(yīng)區(qū)間。

    3、被解釋變量為公式的預(yù)測(cè)

    如果被解釋變量的公式是簡(jiǎn)單形式,Eviews在做預(yù)測(cè)確定預(yù)測(cè)序列時(shí)會(huì)給出兩個(gè)選擇:第一,以整個(gè)公式整體作為預(yù)測(cè)序列;第二,以這個(gè)公式中第一個(gè)出現(xiàn)的序列為預(yù)測(cè)序列,如公式為x/2y,則以x為預(yù)測(cè)序列。

    但是當(dāng)公式比較復(fù)雜時(shí),Eviews則只能以整個(gè)公式作為預(yù)測(cè)序列。甚至,當(dāng)公式過(guò)于復(fù)雜時(shí),Eviews就會(huì)自己認(rèn)慫,給出一條錯(cuò)誤信息,表示它已經(jīng)hold不住場(chǎng)面,無(wú)法對(duì)這個(gè)公式求解了。

    三、r語(yǔ)言arma-garch怎樣預(yù)測(cè)

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

    本文將說(shuō)明單變量和多變量金融時(shí)間序列的不同模型,特別是條件均值和條件協(xié)方差矩陣、波動(dòng)率的模型。

    均值模型

    本節(jié)探討條件均值模型。

    iid模型

    我們從簡(jiǎn)單的iid模型開(kāi)始。iid模型假定對(duì)數(shù)收益率xt為N維高斯時(shí)間序列:

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    均值和協(xié)方差矩陣的樣本估計(jì)量分別是樣本均值

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    和樣本協(xié)方差矩陣

    我們從生成數(shù)據(jù)開(kāi)始,熟悉該過(guò)程并確保估計(jì)過(guò)程給出正確的結(jié)果(即完整性檢查)。然后使用真實(shí)的市場(chǎng)數(shù)據(jù)并擬合不同的模型。

    讓我們生成合成iid數(shù)據(jù)并估算均值和協(xié)方差矩陣:

    # 生成綜合收益數(shù)據(jù)X <- rmvnorm(n = T, mean = mu, sigma = Sigma)# 樣本估計(jì)(樣本均值和樣本協(xié)方差矩陣)mu_sm <- colMeans(X)Sigma_scm <- cov(X)# 誤差norm(mu_sm     - mu, "2")#> [1] 2.44norm(Sigma_scm - Sigma, "F")#> [1] 70.79

    現(xiàn)在,讓我們針對(duì)不同數(shù)量的觀測(cè)值T再做一次:

    # 首先生成所有數(shù)據(jù)X <- rmvnorm(n = T_max, mean = mu, sigma = Sigma)# 現(xiàn)在遍歷樣本的子集for (T_ in T_sweep) {  # 樣本估算  mu_sm <- colMeans(X_)  Sigma_scm <- cov(X_)  # 計(jì)算誤差  error_mu_vs_T    <- c(error_mu_vs_T,    norm(mu_sm     - mu, "2"))  error_Sigma_vs_T <- c(error_Sigma_vs_T, norm(Sigma_scm - Sigma, "F"))# 繪圖plot(T_sweep, error_mu_vs_T,      main = "mu估計(jì)誤差",

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    plot(T_sweep, error_Sigma_vs_T     main = "Sigma估計(jì)中的誤差", ylab = "誤差"

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    單變量ARMA模型

    對(duì)數(shù)收益率xt上的ARMA(p,q)模型是

    其中wt是均值為零且方差為σ2的白噪聲序列。模型的參數(shù)是系數(shù)ϕi,θi和噪聲方差σ2。

    請(qǐng)注意,ARIMA(p,d,q)模型是時(shí)間差分為d階的ARMA(p,q)模型。因此,如果我們用xt代替對(duì)數(shù)價(jià)格,那么先前的對(duì)數(shù)收益模型實(shí)際上就是ARIMA(p,1,q)模型,因?yàn)橐坏?duì)數(shù)價(jià)格差分,我們就獲得對(duì)數(shù)收益。

    rugarch生成數(shù)據(jù)

    我們將使用rugarch包  生成單變量ARMA數(shù)據(jù),估計(jì)參數(shù)并進(jìn)行預(yù)測(cè)。

    首先,我們需要定義模型:

    # 指定具有給定系數(shù)和參數(shù)的AR(1)模型#> #> *----------------------------------*#> *       ARFIMA Model Spec          *#> *----------------------------------*#> Conditional Mean Dynamics#> ------------------------------------#> Mean Model           : ARFIMA(1,0,0)#> Include Mean     : TRUE #> #> Conditional Distribution#> ------------------------------------#> Distribution :  norm #> Includes Skew    :  FALSE #> Includes Shape   :  FALSE #> Includes Lambda  :  FALSE#>          Level Fixed Include Estimate LB UB#> mu        0.01     1       1        0 NA NA#> ar1      -0.90     1       1        0 NA NA#> ma        0.00     0       0        0 NA NA#> arfima    0.00     0       0        0 NA NA#> archm     0.00     0       0        0 NA NA#> mxreg     0.00     0       0        0 NA NA#> sigma     0.20     1       1        0 NA NA#> alpha     0.00     0       0        0 NA NA#> beta      0.00     0       0        0 NA NA#> gamma     0.00     0       0        0 NA NA#> eta1      0.00     0       0        0 NA NA#> eta2      0.00     0       0        0 NA NA#> delta     0.00     0       0        0 NA NA#> lambda    0.00     0       0        0 NA NA#> vxreg     0.00     0       0        0 NA NA#> skew      0.00     0       0        0 NA NA#> shape     0.00     0       0        0 NA NA#> ghlambda  0.00     0       0        0 NA NA#> xi        0.00     0       0        0 NA NAfixed.pars#> $mu#> [1] 0.01#> #> $ar1#> [1] -0.9#> #> $sigma#> [1] 0.2true_params#>    mu   ar1 sigma #>  0.01 -0.90  0.20

    然后,我們可以生成時(shí)間序列:

    # 模擬一條路徑apath(spec, n.sim = T)# 轉(zhuǎn)換為xts并繪圖plot(synth_log_returns, main = "ARMA模型的對(duì)數(shù)收益率"plot(synth_log_prices, main = "ARMA模型的對(duì)數(shù)價(jià)格"

    ARMA模型

    現(xiàn)在,我們可以估計(jì)參數(shù)(我們已經(jīng)知道):

    # 指定AR(1)模型arfimaspec(mean.model = list(armaOrder = c(1,0), include.mean = TRUE))# 估計(jì)模型#>           mu          ar1        sigma #>       0.0083      -0.8887       0.1987#>    mu   ar1 sigma #>  0.01 -0.90  0.20

    我們還可以研究樣本數(shù)量T對(duì)參數(shù)估計(jì)誤差的影響:

    # 循環(huán)for (T_ in T_sweep) {  estim_coeffs_vs_T <- rbind(estim_coeffs_vs_T, coef(arma_fit))  error_coeffs_vs_T <- rbind(error_coeffs_vs_T, abs(coef(arma_fit) - true_params)/true_params)# 繪圖matplot(T_sweep, estim_coeffs_vs_T,         main = "估計(jì)的ARMA系數(shù)", xlab = "T", ylab = "值",

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    matplot(T_sweep, 100*error_coeffs_vs_T,         main = "估計(jì)ARMA系數(shù)的相對(duì)誤差", xlab = "T", ylab = "誤差 (%)",

    首先,真正的μ幾乎為零,因此相對(duì)誤差可能顯得不穩(wěn)定。在T = 800個(gè)樣本之后,其他系數(shù)得到了很好的估計(jì)。

    ARMA預(yù)測(cè)

    為了進(jìn)行健全性檢查,我們現(xiàn)在將比較兩個(gè)程序包 Forecast 和 rugarch的結(jié)果:

    # 指定具有給定系數(shù)和參數(shù)的AR(1)模型spec(mean.model = list(armaOrder = c(1,0), include.mean = TRUE),                              fixed.pars = list(mu = 0.005, ar1 = -0.9, sigma = 0.1))# 生成長(zhǎng)度為1000的序列arfima(arma_fixed_spec, n.sim = 1000)@path$seriesSim# 使用 rugarch包指定和擬合模型spec(mean.model = list(armaOrder = c(1,0), include.mean = TRUE))# 使用包“ forecast”擬合模型#> ARIMA(1,0,0) with non-zero mean #> #> Coefficients:#>           ar1    mean#>       -0.8982  0.0036#> s.e.   0.0139  0.0017#> #> sigma^2 estimated as 0.01004:  log likelihood=881.6#> AIC=-1757.2   AICc=-1757.17   BIC=-1742.47# 比較模型系數(shù)#>          ar1    intercept        sigma #> -0.898181148  0.003574781  0.100222964#>           mu          ar1        sigma #>  0.003605805 -0.898750138  0.100199956

    確實(shí),這兩個(gè)軟件包給出了相同的結(jié)果。

    ARMA模型選擇

    在先前的實(shí)驗(yàn)中,我們假設(shè)我們知道ARMA模型的階數(shù),即p = 1和q = 0。實(shí)際上,階數(shù)是未知的,因此必須嘗試不同的階數(shù)組合。階數(shù)越高,擬合越好,但這將不可避免地導(dǎo)致過(guò)度擬合。已經(jīng)開(kāi)發(fā)出許多方法來(lái)懲罰復(fù)雜性的增加以避免過(guò)度擬合,例如AIC,BIC,SIC,HQIC等。

    # 嘗試不同的組合# 查看排名#>    AR MA Mean ARFIMA         BIC converged#> 1   1  0    1      0 -0.38249098         1#> 2   1  1    1      0 -0.37883157         1#> 3   2  0    1      0 -0.37736340         1#> 4   1  2    1      0 -0.37503980         1#> 5   2  1    1      0 -0.37459177         1#> 6   3  0    1      0 -0.37164609         1#> 7   1  3    1      0 -0.37143480         1#> 8   2  2    1      0 -0.37107841         1#> 9   3  1    1      0 -0.36795491         1#> 10  2  3    1      0 -0.36732669         1#> 11  3  2    1      0 -0.36379209         1#> 12  3  3    1      0 -0.36058264         1#> 13  0  3    1      0 -0.11875575         1#> 14  0  2    1      0  0.02957266         1#> 15  0  1    1      0  0.39326050         1#> 16  0  0    1      0  1.17294875         1#選最好的armaOrder#> AR MA #>  1  0

    在這種情況下,由于觀察次數(shù)T = 1000足夠大,因此階數(shù)被正確地檢測(cè)到。相反,如果嘗試使用T = 200,則檢測(cè)到的階數(shù)為p = 1,q = 3。

    ARMA預(yù)測(cè)

    一旦估計(jì)了ARMA模型參數(shù)ϕi  ^ i和θ^j,就可以使用該模型預(yù)測(cè)未來(lái)的值。例如,根據(jù)過(guò)去的信息對(duì)xt的預(yù)測(cè)是

    并且預(yù)測(cè)誤差將為xt-x ^ t = wt(假設(shè)參數(shù)已被估計(jì)),其方差為σ2。軟件包 rugarch 使對(duì)樣本外數(shù)據(jù)的預(yù)測(cè)變得簡(jiǎn)單:

    # 估計(jì)模型(不包括樣本外)coef(arma_fit)#>           mu          ar1        sigma #>  0.007212069 -0.898745183  0.200400119# 整個(gè)樣本外的預(yù)測(cè)對(duì)數(shù)收益forecast_log_returns <- xts(arma_fore@forecast$seriesFor[1, ], dates_out_of_sample)# 恢復(fù)對(duì)數(shù)價(jià)格prev_log_price <- head(tail(synth_log_prices, out_of_sample+1), out_of_sample)# 對(duì)數(shù)收益圖plot(cbind("fitted"   = fitted(arma_fit),# 對(duì)數(shù)價(jià)格圖plot(cbind("forecast" = forecast_log_prices,     main = "對(duì)數(shù)價(jià)格預(yù)測(cè)", legend.loc = "topleft")

    多元VARMA模型

    對(duì)數(shù)收益率xt上的VARMA(p,q)模型是

    其中wt是具有零均值和協(xié)方差矩陣Σw的白噪聲序列。該模型的參數(shù)是矢量/矩陣系數(shù)ϕ0,Φi,Θj和噪聲協(xié)方差矩陣Σw。

    比較

    讓我們首先加載S&P500:

    # 加載標(biāo)普500數(shù)據(jù)head(SP500_index_prices)#>              SP500#> 2012-01-03 1277.06#> 2012-01-04 1277.30#> 2012-01-05 1281.06#> 2012-01-06 1277.81#> 2012-01-09 1280.70#> 2012-01-10 1292.08# 準(zhǔn)備訓(xùn)練和測(cè)試數(shù)據(jù)logreturns_trn <- logreturns[1:T_trn]logreturns_tst <- logreturns[-c(1:T_trn)]# 繪圖{ plot(logreturns,   addEventLines(xts("訓(xùn)練"

    現(xiàn)在,我們使用訓(xùn)練數(shù)據(jù)(即,對(duì)于t = 1,…,Ttrnt = 1,…,Ttrn)來(lái)擬合不同的模型(請(qǐng)注意,通過(guò)指示排除了樣本外數(shù)據(jù) out.sample = T_tst)。特別是,我們將考慮iid模型,AR模型,ARMA模型以及一些ARCH和GARCH模型(稍后將對(duì)方差建模進(jìn)行更詳細(xì)的研究)。

    # 擬合i.i.d.模型coef(iid_fit)#>           mu        sigma #> 0.0005712982 0.0073516993mean(logreturns_trn)#> [1] 0.0005681388sd(logreturns_trn)#> [1] 0.007360208# 擬合AR(1)模型coef(ar_fit)#>            mu           ar1         sigma #>  0.0005678014 -0.0220185181  0.0073532716# 擬合ARMA(2,2)模型coef(arma_fit)#>            mu           ar1           ar2           ma1           ma2         sigma #>  0.0007223304  0.0268612636  0.9095552008 -0.0832923604 -0.9328475211  0.0072573570# 擬合ARMA(1,1)+ ARCH(1)模型coef(arch_fit)#>            mu           ar1           ma1         omega        alpha1 #>  6.321441e-04  8.720929e-02 -9.391019e-02  4.898885e-05  9.986975e-02#擬合ARMA(0,0)+ARCH(10)模型coef(long_arch_fit)#>           mu        omega       alpha1       alpha2       alpha3       alpha4       alpha5 #> 7.490786e-04 2.452099e-05 6.888561e-02 7.207551e-02 1.419938e-01 1.909541e-02 3.082806e-02 #>       alpha6       alpha7       alpha8       alpha9      alpha10 #> 4.026539e-02 3.050040e-07 9.260183e-02 1.150128e-01 1.068426e-06# 擬合ARMA(1,1)+GARCH(1,1)模型coef(garch_fit)#>            mu           ar1           ma1         omega        alpha1         beta1 #>  6.660346e-04  9.664597e-01 -1.000000e+00  7.066506e-06  1.257786e-01  7.470725e-01

    我們使用不同的模型來(lái)預(yù)測(cè)對(duì)數(shù)收益率:

    # 準(zhǔn)備預(yù)測(cè)樣本外周期的對(duì)數(shù)收益# i.i.d.模型預(yù)測(cè)forecast(iid_fit, n.ahead = 1, n.roll = T_tst - 1)                           dates_out_of_sample)# AR(1)模型進(jìn)行預(yù)測(cè)forecast(ar_fit, n.ahead = 1, n.roll = T_tst - 1)                          dates_out_of_sample)# ARMA(2,2)模型進(jìn)行預(yù)測(cè)forecast(arma_fit, n.ahead = 1, n.roll = T_tst - 1)                            dates_out_of_sample)# 使用ARMA(1,1)+ ARCH(1)模型進(jìn)行預(yù)測(cè)forecast(arch_fit, n.ahead = 1, n.roll = T_tst - 1)                            dates_out_of_sample)# ARMA(0,0)+ARCH(10)模型預(yù)測(cè)forecast(long_arch_fit, n.ahead = 1, n.roll = T_tst - 1)                                 dates_out_of_sample)# ARMA(1,1)+GARCH(1,1)模型預(yù)測(cè)forecast(garch_fit, n.ahead = 1, n.roll = T_tst - 1)                             dates_out_of_sample)

    我們可以計(jì)算不同模型的預(yù)測(cè)誤差(樣本內(nèi)和樣本外):

    print(error_var)#>                           in-sample out-of-sample#> iid                    5.417266e-05  8.975710e-05#> AR(1)                  5.414645e-05  9.006139e-05#> ARMA(2,2)              5.265204e-05  1.353213e-04#> ARMA(1,1) + ARCH(1)    5.415836e-05  8.983266e-05#> ARCH(10)               5.417266e-05  8.975710e-05#> ARMA(1,1) + GARCH(1,1) 5.339071e-05  9.244012e-05

    我們可以觀察到,隨著模型復(fù)雜度的增加,樣本內(nèi)誤差趨于變?。ㄓ捎跀M合數(shù)據(jù)的自由度更高),盡管差異可以忽略不計(jì)。重要的實(shí)際上是樣本外誤差:我們可以看到,增加模型復(fù)雜度可能會(huì)得出較差的結(jié)果。就預(yù)測(cè)收益的誤差而言,似乎最簡(jiǎn)單的iid模型已經(jīng)足夠了。

    最后,讓我們展示一些樣本外誤差的圖表:

    plot(error,     main = "不同模型收益預(yù)測(cè)的樣本外誤差",

    請(qǐng)注意,由于我們沒(méi)有重新擬合模型,因此隨著時(shí)間的發(fā)展,誤差越大(對(duì)于ARCH建模尤其明顯)。

    滾動(dòng)窗口比較

    讓我們首先通過(guò)一個(gè)簡(jiǎn)單的示例比較靜態(tài)預(yù)測(cè)與滾動(dòng)預(yù)測(cè)的概念:

    #ARMA(2,2)模型spec <- spec(mean.model = list(armaOrder = c(2,2), include.mean = TRUE))# 靜態(tài)擬合和預(yù)測(cè)ar_static_fit <- fit(spec = spec, data = logreturns, out.sample = T_tst)#滾動(dòng)擬合和預(yù)測(cè)modelroll <- aroll(spec = spec, data = logreturns, n.ahead = 1, # 預(yù)測(cè)圖plot(cbind("static forecast"  = ar_static_fore_logreturns,     main = "使用ARMA(2,2)模型進(jìn)行預(yù)測(cè)", legend.loc = "topleft")# 預(yù)測(cè)誤差圖plot(error_logreturns, col = c("black", "red"), lwd = 2,     main = "ARMA(2,2)模型的預(yù)測(cè)誤差", legend.loc = "topleft")

    我們可以清楚地觀察到滾動(dòng)窗口過(guò)程對(duì)時(shí)間序列的影響。

    現(xiàn)在,我們可以在滾動(dòng)窗口的基礎(chǔ)上重做所有模型的所有預(yù)測(cè):

    # 基于i.i.d.模型的滾動(dòng)預(yù)測(cè)roll(iid_spec, data = logreturns, n.ahead = 1, forecast.length = T_t# AR(1)模型的滾動(dòng)預(yù)測(cè)roll(ar_spec, data = logreturns, n.ahead = 1, forecast.length = T_tst, # ARMA(2,2)模型的滾動(dòng)預(yù)測(cè)roll(arma_spec, data = logreturns, n.ahead = 1, forecast.length = T_tst, # ARMA(1,1)+ ARCH(1)模型的滾動(dòng)預(yù)測(cè)roll(arch_spec, data = logreturns, n.ahead = 1, forecast.length = T_tst,                                                refit.every = 50, refit.win# ARMA(0,0)+ ARCH(10)模型的滾動(dòng)預(yù)測(cè)roll(long_arch_spec, data = logreturns, n.ahead = 1, forecast.length = T_tst,                                                     refit.every = 50, # ARMA(1,1)+ GARCH(1,1)模型的滾動(dòng)預(yù)測(cè)roll(garch_spec, data = logreturns, n.ahead = 1, forecast.length = T_tst,                                                 refit.every = 50, refit.window

    讓我們看看滾動(dòng)基準(zhǔn)情況下的預(yù)測(cè)誤差:

    print(rolling_error_var)#>                           in-sample out-of-sample#> iid                    5.417266e-05  8.974166e-05#> AR(1)                  5.414645e-05  9.038057e-05#> ARMA(2,2)              5.265204e-05  8.924223e-05#> ARMA(1,1) + ARCH(1)    5.415836e-05  8.991902e-05#> ARCH(10)               5.417266e-05  8.976736e-05#> ARMA(1,1) + GARCH(1,1) 5.339071e-05  8.895682e-05

    和一些圖表:

    plot(error_logreturns,      main = "不同模型的滾動(dòng)預(yù)測(cè)誤差", legend.loc = "topleft"

    我們看到,現(xiàn)在所有模型都擬合了時(shí)間序列。此外,我們?cè)谀P椭g沒(méi)有發(fā)現(xiàn)任何顯著差異。

    我們最終可以比較靜態(tài)誤差和滾動(dòng)誤差:

    barplot(rbind(error_var[, "out-of-sample"], rolling_error_var[, "out-of-sample"])        col = c("darkblue", "darkgoldenrod"),         legend = c("靜態(tài)預(yù)測(cè)", "滾動(dòng)預(yù)測(cè)"),

    我們可以看到,滾動(dòng)預(yù)測(cè)在某些情況下是必須的。因此,實(shí)際上,我們需要定期進(jìn)行滾動(dòng)預(yù)測(cè)改進(jìn)。

    方差模型

    ARCH和GARCH模型

    對(duì)數(shù)收益率殘差wt的ARCH(m)模型為

    其中zt是具有零均值和恒定方差的白噪聲序列,而條件方差σ2t建模為

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    其中,m為模型階數(shù),ω> 0,αi≥0為參數(shù)。

    GARCH(m,s)模型使用σ2t上的遞歸項(xiàng)擴(kuò)展了ARCH模型:

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    其中參數(shù)ω> 0,αi≥0,βj≥0需要滿足∑mi =1αi+ ∑sj = 1βj≤1的穩(wěn)定性。

    rugarch生成數(shù)據(jù)

    首先,我們需要定義模型:

    # 指定具有給定系數(shù)和參數(shù)的GARCH模型#> #> *---------------------------------*#> *       GARCH Model Spec          *#> *---------------------------------*#> #> Conditional Variance Dynamics    #> ------------------------------------#> GARCH Model      : sGARCH(1,1)#> Variance Targeting   : FALSE #> #> Conditional Mean Dynamics#> ------------------------------------#> Mean Model       : ARFIMA(1,0,0)#> Include Mean     : TRUE #> GARCH-in-Mean        : FALSE #> #> Conditional Distribution#> ------------------------------------#> Distribution :  norm #> Includes Skew    :  FALSE #> Includes Shape   :  FALSE #> Includes Lambda  :  FALSE#>           Level Fixed Include Estimate LB UB#> mu        0.005     1       1        0 NA NA#> ar1      -0.900     1       1        0 NA NA#> ma        0.000     0       0        0 NA NA#> arfima    0.000     0       0        0 NA NA#> archm     0.000     0       0        0 NA NA#> mxreg     0.000     0       0        0 NA NA#> omega     0.001     1       1        0 NA NA#> alpha1    0.300     1       1        0 NA NA#> beta1     0.650     1       1        0 NA NA#> gamma     0.000     0       0        0 NA NA#> eta1      0.000     0       0        0 NA NA#> eta2      0.000     0       0        0 NA NA#> delta     0.000     0       0        0 NA NA#> lambda    0.000     0       0        0 NA NA#> vxreg     0.000     0       0        0 NA NA#> skew      0.000     0       0        0 NA NA#> shape     0.000     0       0        0 NA NA#> ghlambda  0.000     0       0        0 NA NA#> xi        0.000     0       0        0 NA NA#> $mu#> [1] 0.005#> #> $ar1#> [1] -0.9#> #> $omega#> [1] 0.001#> #> $alpha1#> [1] 0.3#> #> $beta1#> [1] 0.65true_params#>     mu    ar1  omega alpha1  beta1 #>  0.005 -0.900  0.001  0.300  0.650

    然后,我們可以生成收益率時(shí)間序列:

    # 模擬一條路徑hpath(garch_spec, n.sim = T)#>  num [1:2000, 1] 0.167 -0.217 # 繪圖對(duì)數(shù)收益{ plot(synth_log_returns, main = "GARCH模型的對(duì)數(shù)收益", lwd = 1.5)  lines(synth_volatility

    GARCH

    現(xiàn)在,我們可以估計(jì)參數(shù):

    # 指定一個(gè)GARCH模型ugarchspec(mean.model = list(armaOrder = c(1,0)# 估計(jì)模型coef(garch_fit)#>            mu           ar1         omega        alpha1         beta1 #>  0.0036510100 -0.8902333595  0.0008811434  0.2810460728  0.6717486402#>     mu    ar1  omega alpha1  beta1 #>  0.005 -0.900  0.001  0.300  0.650# 系數(shù)誤差#>           mu          ar1        omega       alpha1        beta1 #> 0.0013489900 0.0097666405 0.0001188566 0.0189539272 0.0217486402

    我們還可以研究樣本數(shù)量T對(duì)參數(shù)估計(jì)誤差的影響:

    # 循環(huán)for (T_ in T_sweep) {  garch_fit   error_coeffs_vs_T <- rbind(error_coeffs_vs_T, abs((coef(garch_fit) - true_params)/true_params))  estim_coeffs_vs_T <- rbind(estim_coeffs_vs_T, coef(garch_fit))# 繪圖matplot(T_sweep, 100*error_coeffs_vs_T,         main = "估計(jì)GARCH系數(shù)的相對(duì)誤差", xlab = "T", ylab = "誤差 (%)",

    真實(shí)的ω幾乎為零,因此誤差非常不穩(wěn)定。至于其他系數(shù),就像在ARMA情況下一樣,μ的估計(jì)確實(shí)很差(相對(duì)誤差超過(guò)50%),而其他系數(shù)似乎在T = 800個(gè)樣本后得到了很好的估計(jì)。

    GARCH結(jié)果比較

    作為健全性檢查,我們現(xiàn)在將比較兩個(gè)軟件包 fGarch 和 rugarch的結(jié)果:

    # 指定具有特定參數(shù)值的ARMA(0,0)-GARCH(1,1)作為數(shù)據(jù)生成過(guò)程garch_spec #生成長(zhǎng)度為1000的數(shù)據(jù)path(garch_fixed_spec, n.sim = 1000)@path$# 使用“ rugarch”包指定和擬合模型rugarch_fit <- ugarchfit(spec = garch_spec, data = x)# 使用包“ fGarch”擬合模型garchFit(formula = ~ garch(1, 1), data = x, trace = FALSE)# 比較模型系數(shù)#>         mu      omega     alpha1      beta1 #> 0.09749904 0.01395109 0.13510445 0.73938595#>         mu      omega     alpha1      beta1 #> 0.09750394 0.01392648 0.13527024 0.73971658# 比較擬合的標(biāo)準(zhǔn)偏差print(head(fGarch_fi#> [1] 0.3513549 0.3254788 0.3037747 0.2869034 0.2735266 0.2708994print(head(rugar#> [1] 0.3538569 0.3275037 0.3053974 0.2881853 0.2745264 0.2716555

    確實(shí),這兩個(gè)軟件包給出了相同的結(jié)果。

    使用rugarch包進(jìn)行GARCH預(yù)測(cè)

    一旦估計(jì)出GARCH模型的參數(shù),就可以使用該模型預(yù)測(cè)未來(lái)的值。例如,基于過(guò)去的信息對(duì)條件方差的單步預(yù)測(cè)為

    給定ω^ /(1-∑mi =1α^ i-∑sj =1β^ j)。軟件包 rugarch 使對(duì)樣本外數(shù)據(jù)的預(yù)測(cè)變得簡(jiǎn)單:

    # 估計(jì)模型,不包括樣本外garch_fit coef(garch_fit)#>            mu           ar1         omega        alpha1         beta1 #>  0.0034964331 -0.8996287630  0.0006531088  0.3058756796  0.6815452241# 預(yù)測(cè)整個(gè)樣本的對(duì)數(shù)收益garch_fore@forecast$sigmaFor[1, ]# 對(duì)數(shù)收益圖plot(cbind("fitted"   = fitted(garch_fit),     main = "合成對(duì)數(shù)收益預(yù)測(cè)", legend.loc = "topleft")

    #波動(dòng)率對(duì)數(shù)收益圖plot(cbind("fitted volatility"   = sigma(garch_fit),     main = "預(yù)測(cè)合成對(duì)數(shù)收益率的波動(dòng)性", legend.loc = "topleft")

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    不同方法

    讓我們首先加載S&P500:

    # 加載標(biāo)準(zhǔn)普爾500指數(shù)數(shù)據(jù)head(SP500_index_prices)#>              SP500#> 2008-01-02 1447.16#> 2008-01-03 1447.16#> 2008-01-04 1411.63#> 2008-01-07 1416.18#> 2008-01-08 1390.19#> 2008-01-09 1409.13# 準(zhǔn)備訓(xùn)練和測(cè)試數(shù)據(jù)x_trn <- x[1:T_trn]x_tst <- x[-c(1:T_trn)]# 繪圖{ plot(x, main = "收益"  addEventLines(xts("訓(xùn)練", in

    常數(shù)

    讓我們從常數(shù)開(kāi)始:

    plot(cbind(sqrt(var_constant), x_trn)     main = "常數(shù)")

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    移動(dòng)平均值

    現(xiàn)在,讓我們使用平方收益的移動(dòng)平均值:

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    plot(cbind(sqrt(var_t), x_trn),      main = "基于簡(jiǎn)單滾動(dòng)平方均值的包絡(luò)線(時(shí)間段=20)

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    EWMA

    指數(shù)加權(quán)移動(dòng)平均線(EWMA):

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    請(qǐng)注意,這也可以建模為ETS(A,N,N)狀態(tài)空間模型:

    plot(cbind(std_t, x_trn),      main = "基于平方EWMA的包絡(luò)")

    乘法ETS

    我們還可以嘗試ETS模型的不同變體。例如,具有狀態(tài)空間模型的乘性噪聲版本ETS(M,N,N):

    四、看到你之前關(guān)于matlab神經(jīng)網(wǎng)絡(luò)多步滾動(dòng)預(yù)測(cè)的提問(wèn),你說(shuō)你解決了。我想問(wèn)你具體的程序如何,謝謝。

    奇怪,百度還多這樣的功能。

    其實(shí)是一個(gè)比較取巧的方法,是從訓(xùn)練數(shù)據(jù)從新編排入手的,舉例來(lái)說(shuō),你就只有一列數(shù)據(jù),例如自然數(shù)列,1,2,3,4,5,6,7,你把數(shù)列從新編成一個(gè)矩陣

    1 2 3

    2 3 4

    3 4 5

    4 5 6

    5 6 7

    矩陣前兩列做訓(xùn)練的輸入矩陣p,第三列做輸出那個(gè)t,然后訓(xùn)練網(wǎng)絡(luò)直到滿足你的條件

    這樣訓(xùn)練后的網(wǎng)絡(luò)就可以用了,當(dāng)你想預(yù)測(cè)第八個(gè)數(shù)的時(shí)候,仿真輸入6 7,他就預(yù)測(cè)第八個(gè)數(shù),假設(shè)輸出是8,想繼續(xù)預(yù)測(cè)第九個(gè)數(shù),把預(yù)測(cè)的8和之前的7組成新矩陣,也就是輸入7 8,他就會(huì)出第九個(gè)數(shù),9

    至于你要的矩陣是2列,3列,4列就隨便了,看你的結(jié)果和之前的那幾個(gè)數(shù)相關(guān)大的,按需要組矩陣吧

    上面也可以用

    1 2

    2 3

    3 4

    ……

    這樣的矩陣,第一列p,第二列t,來(lái)訓(xùn)練,這樣就是一輸入一輸出了

    原理都一樣,這是多步預(yù)測(cè),誤差其實(shí)越到后面越大

    滾動(dòng)預(yù)測(cè)就是把新預(yù)測(cè)的數(shù)再放進(jìn)數(shù)列里面,當(dāng)作這數(shù)列是新的,再做新訓(xùn)練和仿真

    其實(shí)新編矩陣很簡(jiǎn)單了,for循環(huán)就可以,然后歸一化,再訓(xùn)練,最后仿真

    以上就是關(guān)于單步預(yù)測(cè)和多步預(yù)測(cè)相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    單步預(yù)測(cè)和多步預(yù)測(cè)(單步預(yù)測(cè)和多步預(yù)測(cè)優(yōu)缺點(diǎn))

    多多出評(píng)大白軟件

    景觀設(shè)計(jì)園林公司(園林綠化公司)