关于数据挖掘:R语言马尔可夫区制转移模型Markov-regime-switching

9次阅读

共计 4314 个字符,预计需要花费 11 分钟才能阅读完成。

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

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


总览

本文简要介绍了一种简略的状态转移模型,该模型形成了隐马尔可夫模型(HMM)的特例。这些模型拟合工夫序列数据中的非平稳性。从利用的角度来看,这些模型在评估经济 / 市场状态时十分有用。这里的探讨次要围绕应用这些模型的科学性。

根本案例

HMM 的次要挑战是预测暗藏局部。咱们如何辨认“不可察看”的事物?HMM 的想法是从可察看的事物来预测潜在的事物。

模仿数据

为了演示,咱们筹备一些数据并尝试进行反向揣测。通过结构,我强加了一些假如来创立咱们的数据。每个状态都具备不同的均值和稳定率。

theta_v <- data.frame(t(c(2.00,-2.00,1.00,2.00,0.95,0.85)))

kable(theta_v, "html", booktabs = F,escape = F) %>% 
        kable_styling(position = "center")

如上表所示,状态 s = 2 变成“坏”状态,其中过程 x_t 体现出较高的变动性。因而,停留在状态 2 的可能比停留在状态 1 的可能性小。

马尔可夫过程

为了模仿过程 x\_t,咱们从模仿马尔可夫过程 s\_t 开始。为了模仿 T 期间的过程,首先,咱们须要构建给定 p_ {11} 和 p_ {22} 的转换矩阵。其次,咱们须要从给定状态 s\_1 = 1 开始。从 s\_1 = 1 开始,咱们晓得有 95%的概率停留在状态 1,有 5%的概率进入状态 2。

P <- matrix(c(p11,1-p22,1-p11,p22),2,2)
P\[1,\]
## \[1\] 0.95 0.05

因为它先前的状态,模仿 s_t 是递归的。因而,咱们须要结构一个循环:

for(t in 2:T_end) {s <- c(s,st(s\[t-1\]))
}
plot(s, pch = 20,cex = 0.5)

上图阐明了过程 s_t 的持久性。在大多数状况下,状态 1 的“实现”多于状态 2。实际上,这能够由稳固概率确定,该稳固概率由下式示意:

P_stat\[1,\]
## \[1\] 0.75 0.25

因而,有 15%的概率处于 1 状态,而有 25%的概率处于状态 2。这应该反映在模仿过程中  s,从而

mean(s==1)
## \[1\] 0.69

因为咱们应用的是 100 个周期的小样本,因而咱们察看到稳固概率为 69%,靠近但不齐全等于 75%。

后果

给定模仿的马尔可夫过程,后果的模仿非常简单。一个简略的技巧是模仿 的 T 周期和 的 T  周期。而后,给定 s\_t  的模仿,咱们针对每个状态创立后果变量 x\_t。

plot(x~t_index, pch = 20)
points(x\[s == 2\]~t_index\[s==2\],col = 2)

尽管总体而言工夫序列看起来是安稳的,但咱们察看到一些周期(以红色突出显示)显示出较高的稳定。有人可能会倡议说,数据存在结构性中断,或者区制产生了变动,过程 x_t 变得越来越大,带有更多的负值。尽管如此,预先解释总是比拟容易的。次要的挑战是辨认这种状况。

预计参数

在本节中,我将应用 R 软件手动(从头开始)和非手动进行统计分解。在前者中,我将演示如何结构似然函数,而后应用束缚优化问题来预计参数。

似然函数 - 数值局部

首先,咱们须要创立一个以  Theta 向量为次要输出的函数。其次,咱们须要设置一个 MLE 的优化问题。

在优化似然函数之前。让咱们看一下工作原理。假如咱们晓得参数 Theta 的向量,并且咱们有趣味应用 x_t  上的数据评估随工夫变动的暗藏状态。

显然,这两种状态的每次过滤器的总和应为 1。看起来,咱们能够处于状态 1 或状态 2。

all(round(apply(Filter\[,-1\],1,sum),9) == 1)
## \[1\] TRUE

因为咱们设计了此数据,因而咱们晓得状态 2 的期间。

plot(Filter\[,3\]~t_index, type = "l", ylab = expression(xi\[2\]))
points(Filter\[s==2,3\]~t_index\[s==2\],pch = 20, col = 2)

过滤器背地的长处是仅应用 x_t  上的信息来辨认潜在状态。咱们察看到,状态 2 的过滤器次要在状态 2 产生时减少。这能够通过收回红点的概率减少来证实,红点示意状态 2 产生的时间段。尽管如此,上述还是存在一些大问题。首先,它假设咱们晓得参数 Theta,而实际上咱们须要对此进行预计,而后在此基础上进行推断。其次,所有这些都是在样本中结构的。从理论的角度来看,决策者对预测的概率及其对将来投资的影响感兴趣。

手动估算

为了优化下面定义的  HMM_Lik 函数,我将须要执行两个附加步骤。首先是建设一个初始估计值,作为搜索算法的终点。其次,咱们须要设置约束条件以验证预计的参数是否统一,即非负波动性和介于 0 和 1 之间的概率值。

第一步,我应用样本创立初始参数向量 Theta_0 

在第二步中,我为估算设置了束缚

请留神,参数的初始向量应满足约束条件

all(A%*%theta0 >= B)
## \[1\] TRUE

最初,回忆一下,通过构建大多数优化算法都能够搜寻最小点。因而,咱们须要将似然函数的输入更改为负值。

## $par
## \[1\]  1.7119528 -1.9981224  0.8345350  2.2183230  0.9365507  0.8487511
## 
## $value
## \[1\] 174.7445
## 
## $counts
## function gradient 
##     1002       NA 
## 
## $convergence
## \[1\] 0
## 
## $message
## NULL
## 
## $outer.iterations
## \[1\] 3
## 
## $barrier.value
## \[1\] 6.538295e-05

为了查看 MLE 值是否与实在参数统一,咱们绘制估计值与实在值的关系图:

plot(opt$par ~ theta_known,pch = 20,cex=2,ylab="MLE",xlab = "True")
abline(a=0,b=1,lty=2)

 

总体而言,咱们察看到估计值十分统一。

估算 

我将在上面演示如何应用 r 软件复制人工估算的后果。

如果咱们要疏忽过程中的任何区制转换,咱们能够简略地将参数 mu 和 sigma 预计为

kable(mod_est, "html", booktabs = F,escape = F) %>% 
        kable_styling(position = "center")

均匀而言,咱们应该冀望过程平均值约为 1,即。这是由冀望定律得出的,其中咱们晓得

EX <- 0.75\*2 + 0.25\*-2
EX
## \[1\] 1

对于稳定率,实用雷同的逻辑。

## \[1\] 2.179449

咱们留神到,回归估计值与稳定率的一致性高于均值。

下面的观点是,估计值并未涵盖数据的实在性质。如果咱们假如数据是稳固的,那么咱们谬误地预计过程的平均值为 62%。然而,与此同时,咱们通过结构晓得该过程体现出两个均匀后果 - 一个侧面和一个负面。波动性也是如此。

为了揭示这些模式,咱们在上面演示如何应用下面的线性模型建设区制转移模型:

次要输出是拟合模型,mod咱们将其演绎为拟合转移状态。第二个  k是区制的数量。因为咱们晓得咱们要解决两个状态,因而将其设置为 2。然而,实际上,须要参考一种信息规范来确定最佳状态数。依据定义,咱们有两个参数,均值 mu\_s 和稳定率 sigma\_s。因而,咱们增加一个 true / false 向量来批示正在转移的参数。在下面的命令中,咱们容许两个参数都转移。最初,咱们能够指定预计过程是否正在应用并行计算进行。

要理解模型的输入,让咱们看一下

## Markov Switching Model
## 
## 
##        AIC     BIC    logLik
##   352.2843 366.705 -174.1422
## 
## Coefficients:
##         (Intercept)(S)    Std(S)
## Model 1       1.711693 0.8346013
## Model 2      -2.004137 2.2155742
## 
## Transition probabilities:
##            Regime 1  Regime 2
## Regime 1 0.93767719 0.1510052
## Regime 2 0.06232281 0.8489948

下面的输入次要报告咱们尝试手动估算的六个估算参数。首先,系数表报告了每个状态的均值和稳定。模型 1 的平均值为 1.71,稳定率靠近 1。模型 2 的平均值为 -2,稳定率约为 2。显然,该模型针对数据确定了两种具备不同均值和稳定率的不同状态。其次,在输入的底部,拟合的模型报告了转移概率。

乏味的是,就每种状态的过滤器而言,咱们将从包中检索到的状态与手动提取的状态进行比拟。依据定义,能够应用图函数  来理解平滑概率以及确定的计划。

par(mar = 2*c(1,1,1,1),mfrow = c(2,1))

 

顶部的图示意随工夫变动的过程 x_t,其中灰色暗影区域示意 的时间段。换句话说,灰色区域示意状态 1 占优势的时间段。

plot(x~t_index,type ="l",col = 0,xlim=c(1,100))

 

过滤器会在一个周期内检测到第二种状态。产生这种状况是因为在这种状况下,返回的是平滑概率,即在实现整个样本 T  后处于每种状态的概率,即。另一方面,来自手动预计的推断概率

无论如何,因为咱们晓得状态的实在值,因而能够确定咱们是否处于实在状态。咱们在下面的图中应用黑点突出显示状态 2。总的来说,咱们察看到模型在检测数据状态方面体现十分好。惟一的例外是第 60 天,其中推断概率大于 50%。要查看推断概率多长时间正确一次,咱们运行以下命令

mean(Filter$Regime_1 == (s==1)*1)
## \[1\] 0.96

结束语

在理论数据实现方面依然存在许多挑战。首先,咱们不具备无关数据生成过程的常识。其次,状态不肯定实现。因而,这两个问题可能会毁坏区制转移模型的可靠性。在利用方面,通常部署此类模型来评估经济或市场情况。从决策上来说,这也能够为策略调配提供乏味的倡议。

正文完
 0