R語(yǔ)言馬爾可夫區(qū)制轉(zhuǎn)移模型Markov regime switching
原文鏈接:http://tecdat.cn/?p=12280
?
總覽
本文簡(jiǎn)要介紹了一種簡(jiǎn)單的狀態(tài)轉(zhuǎn)移模型,該模型構(gòu)成了隱馬爾可夫模型(HMM)的特例。這些模型擬合時(shí)間序列數(shù)據(jù)中的非平穩(wěn)性。從應(yīng)用的角度來(lái)看,這些模型在評(píng)估經(jīng)濟(jì)/市場(chǎng)狀態(tài)時(shí)非常有用。這里的討論主要圍繞使用這些模型的科學(xué)性。
基本案例
HMM的主要挑戰(zhàn)是預(yù)測(cè)隱藏部分。我們?nèi)绾巫R(shí)別“不可觀察”的事物?HMM的想法是從可觀察的事物來(lái)預(yù)測(cè)潛在的事物。
模擬數(shù)據(jù)
為了演示,我們準(zhǔn)備一些數(shù)據(jù)并嘗試進(jìn)行反向推測(cè)。通過(guò)構(gòu)造,我強(qiáng)加了一些假設(shè)來(lái)創(chuàng)建我們的數(shù)據(jù)。每個(gè)狀態(tài)都具有不同的均值和波動(dòng)率。
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")
如上表所示,狀態(tài)s = 2變成“壞”狀態(tài),其中過(guò)程x_t表現(xiàn)出較高的變化性。 因此,停留在狀態(tài)2的可能比停留在狀態(tài)1的可能性小。
馬爾可夫過(guò)程
為了模擬過(guò)程x_t ,我們從模擬馬爾可夫過(guò)程s_t 開(kāi)始。為了模擬T 期間的過(guò)程,首先,我們需要構(gòu)建給定p_ {11} 和p_ {22} 的轉(zhuǎn)換矩陣。其次,我們需要從給定狀態(tài)s_1 = 1 開(kāi)始。從s_1 = 1 開(kāi)始,我們知道有95%的概率停留在狀態(tài)1,有5%的概率進(jìn)入狀態(tài)2。
P <- matrix(c(p11,1-p22,1-p11,p22),2,2)
P[1,]
## [1] 0.95 0.05
因?yàn)樗惹暗臓顟B(tài),模擬s_t 是遞歸的。因此,我們需要構(gòu)造一個(gè)循環(huán):
for(t in 2:T_end) {
s <- c(s,st(s[t-1]))
}
plot(s, pch = 20,cex = 0.5)
上圖說(shuō)明了過(guò)程s_t的持久性。在大多數(shù)情況下,狀態(tài)1的“實(shí)現(xiàn)”多于狀態(tài)2。實(shí)際上,這可以由穩(wěn)定概率確定,該穩(wěn)定概率由下式表示:
P_stat[1,]
## [1] 0.75 0.25
因此,有15%的概率處于1狀態(tài),而有25%的概率處于狀態(tài)2。這應(yīng)該反映在模擬過(guò)程中??s
,從而
mean(s==1)
## [1] 0.69
由于我們使用的是100個(gè)周期的小樣本,因此我們觀察到穩(wěn)定概率為69%,接近但不完全等于75%。
結(jié)果
給定模擬的馬爾可夫過(guò)程,結(jié)果的模擬非常簡(jiǎn)單。一個(gè)簡(jiǎn)單的技巧是模擬
的T周期和
的 T? 周期。然后,給定 s_t? 的模擬,我們針對(duì)每個(gè)狀態(tài)創(chuàng)建結(jié)果變量 x_t? 。
plot(x~t_index, pch = 20)
points(x[s == 2]~t_index[s==2],col = 2)
雖然總體而言時(shí)間序列看起來(lái)是平穩(wěn)的,但我們觀察到一些周期(以紅色突出顯示)顯示出較高的波動(dòng)。有人可能會(huì)建議說(shuō),數(shù)據(jù)存在結(jié)構(gòu)性中斷,或者區(qū)制發(fā)生了變化,過(guò)程 x_t 變得越來(lái)越大,帶有更多的負(fù)值。雖然如此,事后解釋總是比較容易的。主要的挑戰(zhàn)是識(shí)別這種情況。
估計(jì)參數(shù)
在本節(jié)中,我將使用R軟件手動(dòng)(從頭開(kāi)始)和非手動(dòng)進(jìn)行統(tǒng)計(jì)分解。在前者中,我將演示如何構(gòu)造似然函數(shù),然后使用約束優(yōu)化問(wèn)題來(lái)估計(jì)參數(shù)。
似然函數(shù)-數(shù)值部分
首先,我們需要?jiǎng)?chuàng)建一個(gè)以? Theta 向量為主要輸入的函數(shù)。其次,我們需要設(shè)置一個(gè)MLE的優(yōu)化問(wèn)題。
在優(yōu)化似然函數(shù)之前。讓我們看一下工作原理。假設(shè)我們知道參數(shù) Theta 的向量,并且我們有興趣使用 x_t? 上的數(shù)據(jù)評(píng)估隨時(shí)間變化的隱藏狀態(tài)。
顯然,這兩種狀態(tài)的每次過(guò)濾器的總和應(yīng)為1??雌饋?lái),我們可以處于狀態(tài)1或狀態(tài)2。
all(round(apply(Filter[,-1],1,sum),9) == 1)
## [1] TRUE
由于我們?cè)O(shè)計(jì)了此數(shù)據(jù),因此我們知道狀態(tài)2的時(shí)期。
plot(Filter[,3]~t_index, type = "l", ylab = expression(xi[2]))
points(Filter[s==2,3]~t_index[s==2],pch = 20, col = 2)
?
過(guò)濾器背后的優(yōu)點(diǎn)是僅使用 x_t? 上的信息來(lái)識(shí)別潛在狀態(tài)。我們觀察到,狀態(tài)2的過(guò)濾器主要在狀態(tài)2發(fā)生時(shí)增加。這可以通過(guò)發(fā)出紅點(diǎn)的概率增加來(lái)證明,紅點(diǎn)表示狀態(tài)2發(fā)生的時(shí)間段。盡管如此,上述還是存在一些大問(wèn)題。首先,它假定我們知道參數(shù) Theta ,而實(shí)際上我們需要對(duì)此進(jìn)行估計(jì),然后在此基礎(chǔ)上進(jìn)行推斷。其次,所有這些都是在樣本中構(gòu)造的。從實(shí)際的角度來(lái)看,決策者對(duì)預(yù)測(cè)的概率及其對(duì)未來(lái)投資的影響感興趣。
手動(dòng)估算
為了優(yōu)化上面定義的??HMM_Lik
?函數(shù),我將需要執(zhí)行兩個(gè)附加步驟。首先是建立一個(gè)初始估計(jì)值,作為搜索算法的起點(diǎn)。其次,我們需要設(shè)置約束條件以驗(yàn)證估計(jì)的參數(shù)是否一致,即非負(fù)波動(dòng)性和介于0和1之間的概率值。
第一步,我使用樣本創(chuàng)建初始參數(shù)向量Theta_0?
在第二步中,我為估算設(shè)置了約束
請(qǐng)注意,參數(shù)的初始向量應(yīng)滿足約束條件
all(A%*%theta0 >= B)
## [1] TRUE
最后,回想一下,通過(guò)構(gòu)建大多數(shù)優(yōu)化算法都可以搜索最小點(diǎn)。因此,我們需要將似然函數(shù)的輸出更改為負(fù)值。
## $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值是否與真實(shí)參數(shù)一致,我們繪制估計(jì)值與真實(shí)值的關(guān)系圖:
plot(opt$par ~ theta_known,pch = 20,cex=2,ylab="MLE",xlab = "True")
abline(a=0,b=1,lty=2)
?
?
總體而言,我們觀察到估計(jì)值非常一致。
估算?
我將在下面演示如何使用r軟件復(fù)制人工估算的結(jié)果? 。
如果我們要忽略過(guò)程中的任何區(qū)制轉(zhuǎn)換,我們可以簡(jiǎn)單地將參數(shù) mu 和 sigma 估計(jì)為
kable(mod_est, "html", booktabs = F,escape = F) %>%
kable_styling(position = "center")
平均而言,我們應(yīng)該期望過(guò)程平均值約為1,即
。這是由期望定律得出的,其中我們知道
?
EX <- 0.75*2 + 0.25*-2
EX
## [1] 1
對(duì)于波動(dòng)率,適用相同的邏輯。
## [1] 2.179449
我們注意到,回歸估計(jì)值與波動(dòng)率的一致性高于均值。
上面的觀點(diǎn)是,估計(jì)值并未涵蓋數(shù)據(jù)的真實(shí)性質(zhì)。如果我們假設(shè)數(shù)據(jù)是穩(wěn)定的,那么我們錯(cuò)誤地估計(jì)過(guò)程的平均值為62%。但是,與此同時(shí),我們通過(guò)構(gòu)造知道該過(guò)程表現(xiàn)出兩個(gè)平均結(jié)果-一個(gè)正面和一個(gè)負(fù)面。波動(dòng)性也是如此。
為了揭示這些模式,我們?cè)谙旅嫜菔救绾问褂蒙厦娴木€性模型建立區(qū)制轉(zhuǎn)移模型:
主要輸入是擬合模型,??mod
我們將其歸納為擬合轉(zhuǎn)移狀態(tài)。第二個(gè)??k
是區(qū)制的數(shù)量。由于我們知道我們要處理兩個(gè)狀態(tài),因此將其設(shè)置為2。但是,實(shí)際上,需要參考一種信息標(biāo)準(zhǔn)來(lái)確定最佳狀態(tài)數(shù)。根據(jù)定義,我們有兩個(gè)參數(shù),均值 mu_s 和波動(dòng)率 sigma_s 。因此,我們添加一個(gè)true / false向量來(lái)指示正在轉(zhuǎn)移的參數(shù)。在上面的命令中,我們?cè)试S兩個(gè)參數(shù)都轉(zhuǎn)移。最后,我們可以指定估計(jì)過(guò)程是否正在使用并行計(jì)算進(jìn)行。
要了解模型的輸出,讓我們看一下
## 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
上面的輸出主要報(bào)告我們嘗試手動(dòng)估算的六個(gè)估算參數(shù)。首先,系數(shù)表報(bào)告了每個(gè)狀態(tài)的均值和波動(dòng)。模型1的平均值為1.71,波動(dòng)率接近1。模型2的平均值為-2,波動(dòng)率約為2。顯然,該模型針對(duì)數(shù)據(jù)確定了兩種具有不同均值和波動(dòng)率的不同狀態(tài)。其次,在輸出的底部,擬合的模型報(bào)告了轉(zhuǎn)移概率。
有趣的是,就每種狀態(tài)的過(guò)濾器而言,我們將從包中檢索到的狀態(tài)與手動(dòng)提取的狀態(tài)進(jìn)行比較。根據(jù)定義,可以使用圖函數(shù)? 來(lái)了解平滑概率以及確定的方案。
par(mar = 2*c(1,1,1,1),mfrow = c(2,1))
?
?
頂部的圖表示隨時(shí)間變化的過(guò)程 x_t ,其中灰色陰影區(qū)域表示
的時(shí)間段。換句話說(shuō),灰色區(qū)域表示狀態(tài)1占優(yōu)勢(shì)的時(shí)間段。
plot(x~t_index,type ="l",col = 0,xlim=c(1,100))
?
?
過(guò)濾器會(huì)在一個(gè)周期內(nèi)檢測(cè)到第二種狀態(tài)。發(fā)生這種情況是因?yàn)樵谶@種情況下,返回的是平滑概率,即在實(shí)現(xiàn)整個(gè)樣本 T? 后處于每種狀態(tài)的概率,即
。另一方面,來(lái)自手動(dòng)估計(jì)的推斷概率
。
無(wú)論如何,由于我們知道狀態(tài)的真實(shí)值,因此可以確定我們是否處于真實(shí)狀態(tài)。我們?cè)谏厦娴膱D中使用黑點(diǎn)突出顯示狀態(tài)2。總的來(lái)說(shuō),我們觀察到模型在檢測(cè)數(shù)據(jù)狀態(tài)方面表現(xiàn)非常好。唯一的例外是第60天,其中推斷概率大于50%。要查看推斷概率多長(zhǎng)時(shí)間正確一次,我們運(yùn)行以下命令
mean(Filter$Regime_1 == (s==1)*1)
## [1] 0.96
結(jié)束語(yǔ)
在實(shí)際數(shù)據(jù)實(shí)現(xiàn)方面仍然存在許多挑戰(zhàn)。首先,我們不具備有關(guān)數(shù)據(jù)生成過(guò)程的知識(shí)。其次,狀態(tài)不一定實(shí)現(xiàn)。因此,這兩個(gè)問(wèn)題可能會(huì)破壞區(qū)制轉(zhuǎn)移模型的可靠性。在應(yīng)用方面,通常部署此類(lèi)模型來(lái)評(píng)估經(jīng)濟(jì)或市場(chǎng)狀況。從決策上來(lái)說(shuō),這也可以為策略分配提供有趣的建議。