Я работаю с этим минимальным примером, который я сократил с этого блога , и мне интересно, как правильно сопоставить состояния. Пример кода имитирует два состояния: состояние 1 - это положительная доходность с низкой волатильностью, а состояние 2 - отрицательная доходность с высокой волатильностью. Если вы запустите код несколько раз, вы увидите, что иногда HMM точен на 100%, а иногда - на 0%. Я думаю, что это просто вопрос классификации, какой режим волатильности является состоянием 1, а какой - состоянием 2. Как получить согласованный результат?
library('depmixS4')
bull_mean <- 0.2
bull_var <- 0.05
bear_mean <- -0.1
bear_var <- 0.1
# Create the various bull and bear markets returns
bull <- rnorm(100, bull_mean, bull_var )
bear <- rnorm(100, bear_mean, bear_var )
# Create the list of true regime states and full returns list
true_regimes <- c(rep(1, 100), rep(2, 100))
returns <- c(bull, bear)
# Create and fit the Hidden Markov Model
hmm <- depmix(returns ~ 1, family = gaussian(), nstates = 2, data=data.frame(returns=returns))
hmmfit <- fit(hmm, verbose = FALSE)
post_probs <- posterior(hmmfit)
output <- data.frame(pred = post_probs$state, true_regimes = true_regimes)
table(output)
accuracy = sum(post_probs$state == true_regimes) / nrow(post_probs)
accuracy