拓端tecdat|R語言隨機波動率(SV)模型、MCMC的Metropolis-Hastings演算法金融應用:預測標準普爾SP500指數
阿新 • • 發佈:2021-10-17
原文連結:http://tecdat.cn/?p=23991
原文出處:拓端資料部落公眾號
在這個例子中,我們考慮隨機波動率模型 SV0 的應用,例如在金融領域。
統計模型
隨機波動率模型定義如下
併為
其中 yt 是因變數,xt是 yt 的未觀察到的對數波動率。N(m,σ2) 表示均值 m和方差 σ2 的正態分佈。
α、β和 σ是需要估計的未知引數。
BUGS語言統計模型
檔案內容'sv.bug'
:
- moelfle = 'sv.bug' # BUGS模型檔名
- cat(readLies(moelfle ), sep = "\n")
- # 隨機波動率模型SV_0
- # 用於隨機波動率模型
- var y[t_max], x[t_max], prec_y[t_max]
- model
- {
- alha ~ dnorm(0,10000)
- logteta ~ dnorm(0,.1)
- bea <- ilogit(loit_ta)
- lg_sima ~ dnorm(0, 1)
- sia <- exp(log_sigma)
- x[1] ~ dnorm(0, 1/sma^2)
- pr_y[1] <- exp(-x[1])
- y[1] ~ dnorm(0, prec_y[1])
- for (t in 2:t_max)
- {
- x[t] ~ dnorm(aa + eta*(t-1]-alha, 1/ia^2)
- pr_y[t] <- exp(-x[t])
- y[t] ~ dnorm(0, prec_y[t])
- }
設定
設定隨機數生成器種子以實現可重複性
set.seed(0)
載入模型並載入或模擬資料
- sample_data = TRUE # 模擬資料或SP500資料
- t_max = 100
- if (!sampe_ata) {
- # 載入資料 tab = read.csv('SP500.csv')
- y = diff(log(rev(tab$ose)))
- SP5ate_str = revtab$te[-1])
- ind = 1:t_max
- y = y[ind]
- SP500_dae_r = SP0dae_tr[ind]
- SP500_e_num = as.Date(SP500_dtetr)
模型引數
- if (!smle_dta) {
- dat = list(t_ma=ax, y=y)
- } else {
- sigrue = .4; alpa_rue = 0; bettrue=.99;
- dat = list(t_mx=_mx, sigm_tue=simarue,
- alpatrue=alhatrue, bet_tue=e_true)
- }
如果模擬資料,編譯BUGS模型和樣本資料
data = mdl$da()
繪製資料
對數收益率
Biips粒子邊際Metropolis-Hastings
我們現在執行Biips粒子邊際Metropolis-Hastings(Particle Marginal Metropolis-Hastings),以獲得引數 α、β和 σ以及變數 x 的後驗 MCMC 樣本。
PMMH的引數
- n_brn = 5000 # 預燒/適應迭代的數量
- n_ir = 10000 #預燒後的迭代次數
- thn = 5 #對MCMC輸出進行稀釋
- n_art = 50 # 用於SMC的nb個粒子
- para_nmes = c('apha', 'loit_bta', 'logsgma') # 用MCMC更新的變數名稱(其他變數用SMC更新)。
- latetnams = c('x') # 用SMC更新的、需要監測的變數名稱
初始化PMMH
執行 PMMH
update(b_pmh, n_bun, _rt) #預燒和擬合迭代
samples(oj_mh, ter, n_art, thin=hn) # 取樣
彙總統計
summary(otmmh, prob=c(.025, .975))
計算核密度估計
density(out_mh)
引數的後驗均值和置信區間
- for (k in 1:length(pram_names)) {
- suparam = su_pmm[[pam_as[k]]]
- cat(param$q)
- }
引數的MCMC樣本的蹤跡
- if (amldata)
- para_tue = c(lp_tue, log(dt$bea_rue/(-dta$eatru)), log(smtue))
- )
- for (k in 1:length(param_aes)) {
- smps_pm = tmmh[[paranesk]]
- plot(samlespram[1,]
PMMH:跟蹤樣本引數
引數後驗的直方圖和 KDE 估計
- for (k in 1:length(paramns)) {
- samps_aram = out_mmh[[pramnaes[k]]]
- hist(sple_param)
- if (sample_data)
- points(parm_true)
- }
PMMH:直方圖後驗引數
- for (k in 1:length(parm) {
- kd_pram =kde_mm[[paramames[k]]]
- plot(kd_arm, col'blue
- if (smpldata)
- points(ar_true[k])
- }
PMMH:KDE 估計後驗引數
x 的後均值和分位數
- x_m_mean = x$mean
- x_p_quant =x$quant
- plot(xx, yy)
- polygon(xx, yy)
- lines(1:t_max, x_p_man)
- if (ame_at) {
- lines(1:t_ax, x_true)
- } else
- legend(
- bt='n)
PMMH:後驗均值和分位數
x 的 MCMC 樣本的蹤跡
- par(mfrow=c(2,2))
- for (k in 1:length) {
- tk = ie_inex[k]
- if (sample_data)
- points(0, dtax_t
- }
- if (sml_aa) {
- plot(0
- legend('center')
- }
PMMH:跟蹤樣本 x
x 後驗的直方圖和核密度估計
- par(mfow=c(2,2))
- for (k in 1:length(tie_dex)) {
- tk = tmnex[k]
- hist(ot_m$x[tk,]
- main=aste(t=', t, se='')
- if (sample_data)
- points(ata$x_re[t],
- }
- if (saml_dta) {
- plot(0, type='n', bty='n', x
- legend('center
- bty='n')
- }
PMMH:後邊際直方圖
- par(mfrow=c(2,2))
- for (k in 1:length(idx)) {
- tk =m_dx[k]
- plot(kmmk]] if (alata)
- point(dat_r[k], 0)
- }
- if (aldt) {
- plot(0, type='n', bty='n', x, pt.bg=c(4,NA)')
- }
最受歡迎的見解
1.R語言對S&P500股票指數進行ARIMA + GARCH交易策略
2.R語言改進的股票配對交易策略分析SPY—TLT組合和中國股市投資組合
3.R語言時間序列:ARIMA GARCH模型的交易策略在外匯市場預測應用
8.R語言如何做馬爾科夫轉換模型markov switching model
▍關注我們 【大資料部落】第三方資料服務提供商,提供全面的統計分析與資料探勘諮詢服務,為客戶定製個性化的資料解決方案與行業報告等。 ▍諮詢連結:http://y0.cn/teradat ▍聯絡郵箱:[email protected]