當前位置:編程學習大全網 - 源碼下載 - 均值模型

均值模型

原文鏈接:/?p=20015?

本文將說明單變量和多變量金融時間序列的不同模型,特別是條件均值和條件協方差矩陣、波動率的模型。

均值模型

本節探討條件均值模型。

iid模型

我們從簡單的iid模型開始。iid模型假定對數收益率xt為N維高斯時間序列:

均值和協方差矩陣的樣本估計量分別是樣本均值

和樣本協方差矩陣

我們從生成數據開始,熟悉該過程並確保估計過程給出正確的結果(即完整性檢查)。然後使用真實的市場數據並擬合不同的模型。

讓我們生成合成iid數據並估算均值和協方差矩陣:

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

現在,讓我們針對不同數量的觀測值T再做壹次:

# 首先生成所有數據X <- rmvnorm(n = T_max, mean = mu, sigma = Sigma)# 現在遍歷樣本的子集for (T_ in T_sweep) { ?# 樣本估算 ?mu_sm <- colMeans(X_) ?Sigma_scm <- cov(X_) ?# 計算誤差 ?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估計誤差",

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

單變量ARMA模型

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

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

請註意,ARIMA(p,d,q)模型是時間差分為d階的ARMA(p,q)模型。因此,如果我們用xt代替對數價格,那麽先前的對數收益模型實際上就是ARIMA(p,1,q)模型,因為壹旦對數價格差分,我們就獲得對數收益。

rugarch生成數據?

我們將使用rugarch包?生成單變量ARMA數據,估計參數並進行預測。

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

# 指定具有給定系數和參數的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

然後,我們可以生成時間序列:

# 模擬壹條路徑apath(spec, n.sim = T)# 轉換為xts並繪圖plot(synth_log_returns, main = "ARMA模型的對數收益率"plot(synth_log_prices, main = "ARMA模型的對數價格"

ARMA模型

現在,我們可以估計參數(我們已經知道):

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

我們還可以研究樣本數量T對參數估計誤差的影響:

# 循環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 = "估計的ARMA系數", xlab = "T", ylab = "值",

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

首先,真正的μ幾乎為零,因此相對誤差可能顯得不穩定。在T = 800個樣本之後,其他系數得到了很好的估計。

ARMA預測

為了進行健全性檢查,我們現在將比較兩個程序包?Forecast?和?rugarch的結果:

# 指定具有給定系數和參數的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))# 生成長度為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# 比較模型系數#> ?ar1 intercept sigma #> -0.898181148 ?0.003574781 ?0.100222964#> ? mu ?ar1 sigma #> ?0.003605805 -0.898750138 ?0.100199956

確實,這兩個軟件包給出了相同的結果。

ARMA模型選擇?

在先前的實驗中,我們假設我們知道ARMA模型的階數,即p = 1和q = 0。實際上,階數是未知的,因此必須嘗試不同的階數組合。階數越高,擬合越好,但這將不可避免地導致過度擬合。已經開發出許多方法來懲罰復雜性的增加以避免過度擬合,例如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

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

ARMA預測?

壹旦估計了ARMA模型參數?i? ^ i和θ^j,就可以使用該模型預測未來的值。例如,根據過去的信息對xt的預測是

並且預測誤差將為xt-x ^ t = wt(假設參數已被估計),其方差為σ2。軟件包?rugarch?使對樣本外數據的預測變得簡單:

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

多元VARMA模型

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

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

比較

讓我們首先加載S&P500:

# 加載標普500數據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# 準備訓練和測試數據logreturns_trn <- logreturns[1:T_trn]logreturns_tst <- logreturns[-c(1:T_trn)]# 繪圖{ plot(logreturns, ?addEventLines(xts("訓練"

現在,我們使用訓練數據(即,對於t = 1,…,Ttrnt = 1,…,Ttrn)來擬合不同的模型(請註意,通過指示排除了樣本外數據?out.sample = T_tst)。特別是,我們將考慮iid模型,AR模型,ARMA模型以及壹些ARCH和GARCH模型(稍後將對方差建模進行更詳細的研究)。

# 擬合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

  • 上一篇:億級 Elasticsearch 性能優化
  • 下一篇:港股現在有什麽好的投資機會嗎?港股通互聯網ETF(159792)如何?
  • copyright 2024編程學習大全網