原文链接: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 = 100if (!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$meanx\_p\_quant =x$quantplot(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模型的交易策略在外汇市场预测利用
4.TMA三均线期指高频交易策略的R语言实现
5.r语言多均线量化策略回测比拟
6.用R语言实现神经网络预测股票实例
7.r语言预测稳定率的实现:ARCH模型与HAR-RV模型
8.R语言如何做马尔科夫转换模型markov switching model
9.matlab应用Copula仿真优化市场危险