首页 > 解决方案 > 如何使用 depmixS4 包比较 R 中隐马尔可夫模型中的状态?

问题描述

我正在使用我从这个博客中缩减的这个最小示例,我想知道如何正确匹配状态。示例代码模拟了两种状态,状态 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

标签: rhidden-markov-models

解决方案


推荐阅读