R語言中的馬爾可夫區(qū)制轉(zhuǎn)移(Markov regime switching)模型
原文鏈接:http://tecdat.cn/?p=12187
金融分析師通常關(guān)心檢測市場何時(shí)“發(fā)生變化”:幾個(gè)月或至幾年內(nèi)市場的典型行為可以立即轉(zhuǎn)變?yōu)榉浅2煌男袨?。投資者希望及時(shí)發(fā)現(xiàn)這些變化,以便可以相應(yīng)地調(diào)整其策略,但是這樣做可能很困難。
RHmm從CRAN不再可用,因此我想使用其他軟件包復(fù)制功能實(shí)現(xiàn)馬爾可夫區(qū)制轉(zhuǎn)移(Markov regime switching)模型從而對典型的市場行為進(jìn)行預(yù)測,并且增加模型中對參數(shù)的線性約束功能。
?
load.packages('quantmod')
y=returns
ResFit = HMM(y, nStates=2)
matplot(fb$Gamma, type='l', main='Smoothed Probabilities', ylab='Probability')
legend(x='topright', c('State1','State2'), ?fill=1:2, bty='n')
?

?
fm2 = fit(mod, verbose = FALSE)
使用logLik在迭代69處收斂:125.6168
?
probs = posterior(fm2)
layout(1:2)
plot(probs$state, type='s', main='Implied States', xlab='', ylab='State')
matplot(probs[,-1], type='l', main='Probabilities', ylab='Probability')
legend(x='topright', c('State1','State2'), ?fill=1:2, bty='n')

?
#*****************************************************************
# #添加一些數(shù)據(jù),看看模型是否能夠識(shí)別狀態(tài)
#******************************************************************
bear2 ?= rnorm( 100, -0.01, 0.20 )
bull3 = rnorm( 100, 0.10, 0.10 )
bear3 ?= rnorm( 100, -0.01, 0.25 )
true.states = c(true.states, rep(2,100),rep(1,100),rep(2,100))
y = c( bull1, bear, ?bull2, bear2, bull3, bear3 )
DimObs = 1
plot(data, type='h', x.highlight=T)
plota.legend('Returns + Detected Regimes')

?
#*****************************************************************
# 加載歷史價(jià)格
#******************************************************************
data = env()
getSymbols('SPY', src = 'yahoo', from = '1970-01-01', env = data, auto.assign = T)
price = Cl(data$SPY)
open = Op(data$SPY)
ret = diff(log(price))
ret = log(price) - log(open)
atr = ATR(HLC(data$SPY))[,'atr']
fm2 = fit(mod, verbose = FALSE)
使用logLik在迭代30處收斂:18358.98
print(summary(fm2))
?
Initial state probabilties model pr1 pr2 pr3 pr4 0 0 1 0
Transition matrix toS1 toS2 toS3 toS4 fromS1 9.821940e-01 1.629595e-02 1.510069e-03 8.514403e-45 fromS2 1.167011e-02 9.790209e-01 8.775478e-68 9.308946e-03 fromS3 3.266616e-03 8.586650e-47 9.967334e-01 1.350529e-69 fromS4 3.608394e-65 1.047516e-02 1.922545e-130 9.895248e-01
Response parameters Resp 1 : gaussian Resp 2 : gaussian Re1.(Intercept) Re1.sd Re2.(Intercept) Re2.sd St1 2.897594e-04 0.006285514 1.1647547 0.1181514 St2 -6.980187e-05 0.008186433 1.6554049 0.1871963 St3 2.134584e-04 0.005694483 0.4537498 0.1564576 St4 -4.459161e-04 0.015419207 2.7558362 0.7297283
Re1.(Intercept) Re1.sd Re2.(Intercept) Re2.sd
St1 0.000289759401378951 0.00628551404616354 1.16475474419891 0.118151350440916
St2 -6.98018749098021e-05 0.00818643307634358 1.65540488736983 0.187196307284941
St3 0.000213458358141314 0.00569448330115608 0.453749781945066 0.156457606460757
St4 -0.00044591612667264 0.0154192070819596 2.75583620018895 0.72972830143278
?
probs = posterior(fm2)
print(head(probs))
rownames(x) state S1 S2 S3 S4
1 3 0 0 1 0
2 3 0 0 1 0
3 3 0 0 1 0
4 3 0 0 1 0
5 3 0 0 1 0
6 3 0 0 1 0
?
?
layout(1:3)
plota(temp, type='l', col='darkred')
plota.legend('Market Regimes', 'darkred')

?
layout(1:4)


最受歡迎的見解
1.用R語言模擬混合制排隊(duì)隨機(jī)服務(wù)排隊(duì)系統(tǒng)
2.R語言中使用排隊(duì)論預(yù)測等待時(shí)間
3.R語言中實(shí)現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型
4.R語言中的馬爾科夫機(jī)制轉(zhuǎn)換(Markov regime switching)模型
5.matlab貝葉斯隱馬爾可夫hmm模型
6.用R語言模擬混合制排隊(duì)隨機(jī)服務(wù)排隊(duì)系統(tǒng)
7.Python基于粒子群優(yōu)化的投資組合優(yōu)化
8.R語言馬爾可夫轉(zhuǎn)換模型研究交通傷亡人數(shù)事故預(yù)測
9.用機(jī)器學(xué)習(xí)識(shí)別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用
?