原文链接: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\]

装置

  1. 下载Matlab最新版本
  2. 将存档解压缩到某个文件夹中
  3. 将程序文件夹增加到 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)

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 offend

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 onplot(1:tax, man, 'r', 'liith', 3)plot(1:tax, xrue, 'g')

MCMC 样本的形迹

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

后验直方图

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

后验的核密度估计

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

Biips 敏感性剖析

咱们想钻研对参数值的敏感性 

算法参数

n= 50; % 粒子数para = {'alpha}; % 咱们要钻研灵敏度的参数 % 两个重量的值网格pvs = {A(:, B(:';

应用 SMC 运行灵敏度剖析

smcs(modl, par, parvlu, npt);

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

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


最受欢迎的见解

1.用R语言模仿混合制排队随机服务排队零碎

2.R语言中应用排队论预测等待时间

3.R语言中实现马尔可夫链蒙特卡罗MCMC模型

4.R语言中的马尔科夫机制转换(Markov regime switching)模型模型")

5.matlab贝叶斯隐马尔可夫hmm模型

6.用R语言模仿混合制排队随机服务排队零碎

7.Python基于粒子群优化的投资组合优化

8.R语言马尔可夫转换模型钻研交通伤亡人数事变预测

9.用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用