Matlab用BUGS马尔可夫区制转换Markov switching随机波动率模型、序列蒙特卡罗SMC、M H采样分析时间序列

科技   科技   2024-11-18 17:06   浙江  

原文链接:http://tecdat.cn/?p=24498


在这个例子中,我们考虑马尔可夫转换随机波动率模型点击文末“阅读原文”获取完整代码数据

相关视频


统计模型

让  是因变量和  未观察到的对数波动率 . 随机波动率模型定义如下 

区制变量  遵循具有转移概率的二态马尔可夫过程

 表示均值的正态分布  和方差 .

BUGS语言统计模型

文件“ssv.bug”的内容:

file = 'ssv.bug'% BUGS模型文件名

model
{
  x\[1\] ~ dnorm(mm\[1\], 1/sig^2)
  y\[1\] ~ dnorm(0, exp(-x\[1\]))

  for (t in 2:tmax)
  {
    c\[t\] ~ dcat(ifelse(c\[t-1\]==1, pi\[1,\], pi\[2,\]))
    mm\[t\] <- alp\[1\] * (c\[t\]==1) + alp\[2\]*(c\[t\]==2) + ph*x\[t-1\]

安装

  • 下载Matlab最新版本

  • 将存档解压缩到某个文件夹中

  • 将程序文件夹添加到 Matlab 搜索路径

addpath(path)

通用设置

lightblue 
lightred 

% 设置随机数生成器的种子以实现可重复性
if eLan 'matlab''7.2')
    rnd('state'0)
else
    rng('default')
end

加载模型和数据

模型参数

tmax = 100;
sig = .4;

解析编译BUGS模型,以及样本数据

model(file, data, 'sample', true);
data = model;

绘制数据

figure('nae''Lrtrs')
plot(1:tmax, dt.y)



点击标题查阅往期内容


PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列


左右滑动查看更多


01

02

03

04




Biips 序列蒙特卡罗SMC

运行SMC

n_part = 5000% 粒子数
  {'x'}; % 要监控的变量
 smc =  samples(npart);

算法的诊断。

diag   (smc);

绘图平滑 ESS

sem(ess)

plot(1:tmax, 30*(tmax,1)'--k')

绘制加权粒子

for ttt=1:tttmax
    va = unique(outtt.x.s.vaues(ttt,:));

    wegh = arrayfun(@(x) sum(outtt.x.s.weittt(ttt, outtt.x.s.vaues(ttt,:) == x)), va);

    scatttttter(ttt\*ones(size(va)), va, min(50.5\*n_parttt*wegh), 'r',...
        'markerf''r')
end

汇总统计

summary(out, 'pro'\[.025, .975\]);

绘图滤波估计

mean = susmc.x.f.mean;
xfqu = susmc.x.f.quant;
h = fill(\[1:tmax, tmax:-1:1\], \[xfqu{1}; flipud(xfqu{2})\], 0);

plot(1:tmax, mean,)
plot(1:tmax, data.x_true)

绘图平滑估计

mean = smcx.s.mean;
quant = smcx.s.quant;

plot(1:t_max, mean,  3)
plot(1:t\_max, data.x\_true'g')

边际滤波和平滑密度

kde = density(out);
for k=1:numel(time)
    tk = time(k);
    plot(kde.x.f(tk).x, kde.x.f(tk).f);
    hold on
    plot(kde.x.s(tk).x, kde.x.s(tk).f, 'r');
    plot(data.xtrue(tk));
    box off
end

Biips 粒子独立 Metropolis-Hastings

PIMH 参数

thi= 1;
nprt = 50;

运行 PIMH

init(moel, vaibls);
upda(obj, urn, npat); % 预烧迭代
sample(obj,...
    nier, npat, 'thin', thn);

一些汇总统计

summary(out'prs');

后均值和分位数

mean = sumx.man;
quant = su.x.qunt;

hold on
plot(1:tax, man, 'r''liith'3)
plot(1:tax, xrue, 'g')

MCMC 样本的踪迹

for k=1:nmel(timndx)
    tk = tieinx(k);
    sublt(22, k)
    plot(outm.x(tk, :), 'liedh', 1)
    hold on
    plot(0, d_retk), '*g');
    box off
end

后验直方图

for k=1:numel(tim_ix)
    tk = tim_ix(k);
    subplot(22, k)
    hist(o_hx(tk, :), 20);
    h = fidobj(gca, 'ype, 'ptc');    hold on
    plot(daau(k), 0, '*g');
   
    box off
end

后验的核密度估计

pmh = desity(otmh);
for k=1:numel(tenx)
    tk = tim_ix(k);
    subplot(22, k)
    plot(x(t).x, dpi.x(tk).f, 'r');
    hold on
    plot(xtrue(tk), 0'*g');
    box off
end

Biips 敏感性分析

我们想研究对参数值的敏感性 

算法参数

n50; % 粒子数
para = {'alpha}; % 我们要研究灵敏度的参数
 % 两个分量的值网格
pvs = {A(:, B(:'
;

使用 SMC 运行灵敏度分析

smcs(modl, par, parvlu, npt);

绘制对数边际似然和惩罚对数边际似然率

surf(A, B, reshape(ouma_i, sizeA)
box off






本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 



点击文末“阅读原文”

获取全文完整代码数据资料


本文选自《Matlab用BUGS马尔可夫区制转换Markov switching随机波动率模型、序列蒙特卡罗SMC、M H采样分析时间序列》。


点击标题查阅往期内容

matlab用马尔可夫链蒙特卡罗 (MCMC) 的Logistic逻辑回归模型分析汽车实验数据
R语言BUGS序列蒙特卡罗SMC、马尔可夫转换随机波动率SV模型、粒子滤波、Metropolis Hasting采样时间序列分析
stata马尔可夫Markov区制转移模型分析基金利率
PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列
R语言使用马尔可夫链对营销中的渠道归因建模
matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计
R语言隐马尔可夫模型HMM识别不断变化的股票市场条件
R语言中的隐马尔可夫HMM模型实例
用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)
Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
MATLAB中的马尔可夫区制转移(Markov regime switching)模型
Matlab马尔可夫区制转换动态回归模型估计GDP增长率
R语言马尔可夫区制转移模型Markov regime switching
stata马尔可夫Markov区制转移模型分析基金利率
R语言如何做马尔可夫转换模型markov switching model
R语言隐马尔可夫模型HMM识别股市变化分析报告
R语言中实现马尔可夫链蒙特卡罗MCMC模型


拓端数据部落
拓端(tecdat.cn)创立于2016年,提供专业的数据分析与挖掘服务,致力于充分挖掘数据价值。
 最新文章