原文鏈接:http:///?p=12280 總覽本文簡(jiǎn)要介紹了一種簡(jiǎn)單的狀態(tài)切換模型,該模型構(gòu)成了隱馬爾可夫模型(HMM)的特例。這些模型適應(yīng)時(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)率。 library(knitr) library(kableExtra) library(dplyr) theta_v <- data.frame(t(c(2.00,-2.00,1.00,2.00,0.95,0.85))) names(theta_v) <- c("$\\mu_1$","$\\mu_2$","$\\sigma_1$","$\\sigma_2$","$p_{11}$","$p_{22}$") 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 \)開始。為了模擬\(T \)期間的過(guò)程,首先,我們需要構(gòu)建給定\(p_ {11} \)和\(p_ {22} \)的轉(zhuǎn)換矩陣。其次,我們需要從給定狀態(tài)\(s_1 = 1 \)開始。從\(s_1 = 1 \)開始,我們知道有95%的概率停留在狀態(tài)1,有5%的概率進(jìn)入狀態(tài)2。 p11 <- theta_v[1,5] p22 <- theta_v[1,6] P <- matrix(c(p11,1-p22,1-p11,p22),2,2) P[1,] ## [1] 0.95 0.05
模擬\(s_t \)是遞歸的,因?yàn)樗惹跋惹暗臓顟B(tài)。因此,我們需要構(gòu)造一個(gè)循環(huán): set.seed(13) T_end <- 10^2
s0 <- 1 st <- function(i) sample(1:2,1,prob = P[i,])
s <- st(s0) 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í)際上,這可以由固定概率確定,該固定概率由下式表示: P_stat[1,] ## [1] 0.75 0.25 因此,經(jīng)歷時(shí)間的流逝,有15%的概率處于1狀態(tài),而有25%的概率處于狀態(tài)2。這應(yīng)該反映在模擬過(guò)程中 mean(s==1) # [1] 0.69 由于我們使用的是100個(gè)周期的小樣本,因此我們觀察到穩(wěn)定概率為69%,接近但不完全等于75%。 結(jié)果給定模擬的馬爾可夫過(guò)程,結(jié)果過(guò)程的模擬非常簡(jiǎn)單。一個(gè)簡(jiǎn)單的技巧是模擬\(x_t \ mid s_t = 1 \)的\(T \)周期和\ (x_t \ mid s_t = 2 \)的\(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)性中斷,或者體制發(fā)生了變化,過(guò)程\(x_t \)變得越來(lái)越大,帶有更多的負(fù)值。雖然如此,事后解釋總是比較容易的。主要的挑戰(zhàn)是識(shí)別這種情況。 估計(jì)參數(shù)在本節(jié)中,我將使用R軟件手動(dòng)(從頭開始)和非手動(dòng)進(jìn)行統(tǒng)計(jì)分解。在前者中,我將演示如何構(gòu)造似然函數(shù),然后使用約束優(yōu)化問(wèn)題來(lái)估計(jì)參數(shù)。我將說(shuō)明如何在不經(jīng)歷解析推導(dǎo)的情況下進(jìn)行復(fù)制。 似然函數(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)估隱藏狀態(tài)隨時(shí)間的變化。
顯然,這兩種狀態(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)化上面定義的 第一步,我使用樣本創(chuàng)建初始參數(shù)向量\(\ Theta_0 \) 在第二步中,我為估算制定了約束 請(qǐng)注意,參數(shù)的初始向量應(yīng)滿足約束條件 *%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ì)值非常一致,由于MLE的一致性屬性,這不足為奇。 估算我將在下面演示如何使用r軟件復(fù)制人工估算的結(jié)果 。 如果我們要忽略過(guò)程中的任何體制轉(zhuǎn)換,我們可以簡(jiǎn)單地將參數(shù)\(\ mu \)和\(\ sigma \)估計(jì)為 kable(mod_est, "html", booktabs = F,escape = F) %>% kable_styling(position = "center")
平均而言,我們應(yīng)該期望過(guò)程平均值約為1,即\(0.75 \ times 2 + 0.25 \ times(-1)= 1 \)。這是由總期望屬性定律得出的,其中我們知道\ [\ begin {equation} \ mathbb {E} [x] = \ sum _ {\ forall s} \ mathbb {E} \ left [x \ mid s \右] \ mathbb {P}(s)= \ sum _ {\ forall s} \ mu_ {s} \ pi_ {s} \ end {equation} \] 這樣 EX <- 0.75*2 + 0.25*-2 EX ## [1] 1 對(duì)于波動(dòng)率,適用相同的邏輯。 EX2 <- (2^2 + 1^2)*0.75 + ((-2)^2 + 2^2)*0.25 VX <- EX2 - EX^2 sqrt(VX) ## [1] 2.179449 我們注意到,回歸估計(jì)值與波動(dòng)率的一致性高于均值。這主要是由于估算第一時(shí)刻與第二時(shí)刻的工作比較繁瑣。 上面的觀點(diǎn)是,估計(jì)值并未涵蓋數(shù)據(jù)的真實(shí)性質(zhì)。如果我們假設(shè)數(shù)據(jù)是固定的,那么我們錯(cuò)誤地估計(jì)過(guò)程的平均值為62%。但是,與此同時(shí),我們通過(guò)構(gòu)造知道該過(guò)程表現(xiàn)出兩個(gè)平均結(jié)果-一個(gè)正面和一個(gè)負(fù)面。波動(dòng)性也是如此。 為了揭示這些模式,我們?cè)谙旅嫜菔救绾问褂蒙厦娴木€性模型部署狀態(tài)切換模型: 主要輸入是擬合模型, 要了解模型的輸出,讓我們看一下 # 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)的均值和波幅。模型1的平均值為1.71,波動(dòng)率接近1。模型2的平均值為-2,波動(dòng)率約為2。顯然,該模型針對(duì)數(shù)據(jù)確定了兩種具有不同均值和波動(dòng)率的不同狀態(tài)。其次,在輸出的底部,擬合的模型報(bào)告過(guò)渡概率。 plot(opt$par ~ theta_known,pch = 20,cex=2,ylab="MLE",xlab = "True") points(theta_mswm~theta_known,pch = 1,col = 2, cex = 2,lwd = 2) abline(a=0,b=1,lty=2) legend("topleft",c("Manual","MSwM"), pch = c(20,1), col = 1:2) 有趣的是,就每種狀態(tài)的過(guò)濾器而言,我們將從包中檢索到的狀態(tài)與手動(dòng)提取的狀態(tài)進(jìn)行比較。根據(jù)定義,可以使用 par(mar = 2*c(1,1,1,1),mfrow = c(2,1)) plotProb(mod.mswm,2) 頂部的圖表示隨時(shí)間變化的過(guò)程\(x_t \),其中灰色陰影區(qū)域表示\(\ hat {\ xi} _ {T \ mid t,1}> 0.5 \)的時(shí)間段。換句話說(shuō),灰色區(qū)域表示狀態(tài)1占優(yōu)勢(shì)的時(shí)間段。 plot(x~t_index,type ="l",col = 0,xlim=c(1,100)) rect(xx-1,-10,xx,10,col = "lightgray",lty = 0) lines(x~t_index) points(x[s==2] ~ t_index[s==2],col = 1,pch = 20) 過(guò)濾器會(huì)在一個(gè)周期內(nèi)檢測(cè)到第二種狀態(tài)。發(fā)生這種情況是因?yàn)?nbsp; 無(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)行以下命令 Regime_1 == (s==1)*1) # [1] 0.96
結(jié)束語(yǔ)此過(guò)程似乎運(yùn)行良好。然而,在實(shí)際數(shù)據(jù)實(shí)現(xiàn)方面仍然存在許多挑戰(zhàn)。首先,我們不具備有關(guān)數(shù)據(jù)生成過(guò)程的知識(shí)。其次,狀態(tài)不一定實(shí)現(xiàn)。因此,這兩個(gè)問(wèn)題可能會(huì)破壞狀態(tài)切換模式的可靠性。在應(yīng)用方面,通常部署此類模型以評(píng)估經(jīng)濟(jì)或市場(chǎng)狀況。從決策上來(lái)說(shuō),這也可以為策略分配提供有趣的應(yīng)用。 |
|
來(lái)自: 拓端數(shù)據(jù) > 《待分類》