首页 > 其他分享 >Matlab用BUGS马尔可夫区制转换Markov switching随机波动率SV模型、序列蒙特卡罗SMC、Metropolis Hastings采样分析时间序列数据

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

时间:2024-04-30 23:45:01浏览次数:24  
标签:plot Metropolis tmax BUGS 马尔可夫 tk 序列 模型 mean

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

原文出处:拓端数据部落公众号

在这个例子中,我们考虑马尔可夫转换随机波动率模型。

统计模型

让 $y_t$ 是因变量和 $x_t$ 未观察到的对数波动率 $y_t$. 随机波动率模型定义如下 $t\leq t_{max}$

$$x_t|(x_{t-1},\alpha,\phi,\sigma,c_t) \sim \mathcal N (\alpha_{c_t} + \phi x_{t-1}, \sigma^2)$ $

$$ y_t|x_t \sim \mathcal N (0, \exp(x_t)) $$

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

$$p_{ij}=Pr(c_t=j|c_{t-1}=i)$$

$\mathcal N(m,\sigma^2)$ 表示均值的正态分布 百万美元 和方差 $\sigma^2$.

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 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(2, 2, 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(2, 2, 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(2, 2, k)
    plot(x(t).x, dpi.x(tk).f, 'r');
    hold on
    plot(xtrue(tk), 0, '*g');
    box off
end

Biips 敏感性分析

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

算法参数

   
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.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

标签:plot,Metropolis,tmax,BUGS,马尔可夫,tk,序列,模型,mean
From: https://www.cnblogs.com/tecdat/p/18168895

相关文章

  • pandas:时间序列数据的周期转换
    时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,然后再看数据是否会在新的周期上产生新的特性。下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换。1.创建测试数据首先创建测试数据......
  • openGauss 创建和管理序列
    创建和管理序列背景信息序列Sequence是用来产生唯一整数的数据库对象。序列的值是按照一定规则自增的整数。因为自增所以不重复,因此说Sequence具有唯一标识性。这也是Sequence常被用作主键的原因。通过序列使某字段成为唯一标识符的方法有两种:一种是声明字段的类型为序列整型......
  • 用Mermaid画流程图、序列图、类图、甘特图
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取编程资料Mermaid简介Mermaid是一种基于文本的图表定义语言,它允许开发者使用文本和代码的形式来创建图表。这种语言的设计初衷是为了方便版本控制和多人协作,同时简化图表的维护和更新过程。......
  • [postgres]序列
    前言序列都是用createsequence命令创建的单行表,常用于为表的行生成唯一的标识符。相关函数函数作用nextval()递增序列并返回新值currval()返回最近一次用nextval()函数获取的指定序列的值lastval()返回最近一次用nextval()函数获取的任何序列的值setval(......
  • PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克
    原文链接:http://tecdat.cn/?p=27099最近我们被客户要求撰写关于蒙特卡罗的研究报告,包括一些图形和统计输出。金融资产/证券已使用多种技术进行建模。该项目的主要目标是使用几何布朗运动模型和蒙特卡罗模拟来模拟股票价格。该模型基于受乘性噪声影响的随机(与确定性相反)变量该项......
  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器  %matplot......
  • R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归|附代码数据
    原文链接:http://tecdat.cn/?p=4146 原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于用电负荷时间序列的研究报告,包括一些图形和统计输出。通过对用电负荷的消费者进行聚类,我们可以提取典型的负荷曲线,提高后续用电量预测的准确性,检测异常或监控整个智能电网(Laurinec等......
  • [TJOI2018] 碱基序列(题库给的什么鬼名字)
    题目描述小豆参加了生物实验室。在实验室里,他主要研究蛋臼质。他现在研究的蛋臼质是由k个氨基酸按一定顺序构成的。每一个氨基酸都可能有a种碱基序列si_j构成。现在小豆有一个碱基串s,小豆想知道在这个碱基上都多少中不同的组合方式可能得到这个蛋白质。即求由k段字符串有序合......
  • 基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述3.1混沌系统特性       混沌系统是一类具有确定性、非线性、初值敏感性、遍历性和伪随机性等特性的动力学系统。其主要特性包括: 确定性:混沌系统由一组确定性微分方程或差分方程描述......
  • 利用栈序列实现进制转换(D->H)
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......