R语言如何做马尔科夫转换模型markov switching model

科技   科技互联网   2024-11-04 17:04   浙江  

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


假设 有时间序列数据,如下所示。经验表明,目标变量y似乎与解释变量x有关。然而,乍一看,y的水平在中间移动,所以它似乎并不总是有固定的关系(背后有多个状态)点击文末“阅读原文”获取完整代码数据


 

 

上面的样本数据创建如下。数据根据时间改变x和y之间的关系。

 

x <- rpois(500, lambda = 10)y1 <- x * 4 + 20y2 <- x * 2 + 60
noise <- rnorm(1:500, mean = 10, sd = 5)y1 <- y1 + noisey2 <- y2 + noise
y <- c(y1[1:200], y2[201:400], y1[401:500]) observed <- data.frame(x = x, y = y)

x和y1,y2之间的关系如下图所示。如果您知道x和y有两种状态,则x和y看起来像这样。


数据 

 在马尔可夫转换模型中,观察数据被认为是从几个状态生成的,并且如上所示很好地分离。


观察到的数据

创建马尔可夫转换模型

 

模型公式 

 

 
# Call:# lm(formula = y ~ x, data = observed)## Residuals:#     Min      1Q  Median      3Q     Max# -24.303  -9.354  -1.914   9.617  29.224## Coefficients:#             Estimate Std. Error t value Pr(>|t|)# (Intercept)  45.7468     1.7202   26.59   <2e-16 ***# x             3.2262     0.1636   19.71   <2e-16 ***# ---# Signif. codes:# 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1## Residual standard error: 11.51 on 498 degrees of freedom# Multiple R-squared:  0.4383, Adjusted R-squared:  0.4372# F-statistic: 388.7 on 1 and 498 DF,  p-value: < 2.2e-16

 

 参数的含义是

  • k:马尔可夫转换模型的状态数。在这里,它被指定为后面有两个状态。

  • sw:使用逻辑指定每个参数在状态更改时是否更改

  • p:AR模型系数

  • family:(在GLM的情况下)概率分布族

 # Markov Switching Model ##        AIC      BIC    logLik#   3038.846 3101.397 -1513.423## Coefficients:## Regime 1# ---------#                Estimate Std. Error t value Pr(>|t|)# (Intercept)(S)  69.3263     4.0606 17.0729   <2e-16 ***# x(S)             2.1795     0.1187 18.3614   <2e-16 ***# y_1(S)          -0.0103     0.0429 -0.2401   0.8103# ---# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1## Residual standard error: 4.99756# Multiple R-squared: 0.6288## Standardized Residuals:#           Min            Q1           Med            Q3           Max# -1.431396e+01 -2.056292e-02 -1.536781e-03 -1.098923e-05  1.584478e+01## Regime 2# ---------#                Estimate Std. Error t value Pr(>|t|)# (Intercept)(S)  30.2820     1.7687 17.1210   <2e-16 ***# x(S)             3.9964     0.0913 43.7722   <2e-16 ***# y_1(S)          -0.0045     0.0203 -0.2217   0.8245# ---# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1## Residual standard error: 4.836684# Multiple R-squared: 0.8663## Standardized Residuals:#           Min            Q1           Med            Q3           Max# -13.202056966  -0.771854514   0.002211602   1.162769110  12.417873232## Transition probabilities:#             Regime 1    Regime 2# Regime 1 0.994973376 0.003347279# Regime 2 0.005026624 0.996652721
输出中的制度1和制度2表示后面的两个状态 。# Regime 1# ---------# Estimate Std. Error t value Pr(>|t|)# (Intercept)(S) 69.3263 4.0606 17.0729 <2e-16 ***# x(S) 2.1795 0.1187 18.3614 <2e-16 ***# y_1(S) -0.0103 0.0429 -0.2401 0.8103

y1 <- x * 4 + 20 可以看到Regime 2 与之兼容。

 可以说从调整后的R平方值整体上有所改善。

# Regime 2# ---------#                Estimate Std. Error t value Pr(>|t|)# (Intercept)(S)  30.2820     1.7687 17.1210   <2e-16 ***# x(S)             3.9964     0.0913 43.7722   <2e-16 ***# y_1(S)          -0.0045     0.0203 -0.2217   0.8245

模型

对于每个regime,目标变量+指定的解释变量和处于该状态的概率以阴影绘制

每个时间点的概率 

每次获取状态和更改点

如果你想知道你在某个特定时间点所在的regime,那么就选择那个时刻概率最高的 。

> probable  [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 [30] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2...

异常值/变化点是Regime更改的时间 

c(FALSE, diff(probable) != 0)  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [11] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE...[181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE[191] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE[201] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE...[381] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE[391] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE[401] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE...[491] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

因此,我们可以看到检测到在第一次数据创建时指定的变化点(201,401th)附近的点。




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



资料获取


在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。



点击文末“阅读原文”

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


本文选自《R语言如何做马尔科夫转换模型markov switching model》。


点击标题查阅往期内容

Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率
Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
马尔可夫Markov区制转移模型分析基金利率
马尔可夫区制转移模型Markov regime switching
时变马尔可夫区制转换MRS自回归模型分析经济时间序列
马尔可夫转换模型研究交通伤亡人数事故时间序列预测
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?
Matlab用BUGS马尔可夫区制转换Markov switching随机波动率模型、序列蒙特卡罗SMC、M H采样分析时间序列
R语言BUGS序列蒙特卡罗SMC、马尔可夫转换随机波动率SV模型、粒子滤波、Metropolis Hasting采样时间序列分析
matlab用马尔可夫链蒙特卡罗 (MCMC) 的Logistic逻辑回归模型分析汽车实验数据
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年,提供专业的数据分析与挖掘服务,致力于充分挖掘数据价值。
 最新文章