R输入格式的MHSMM包?

时间:2014-02-10 16:28:27

标签: r

我想使用MHSMM包来估计使用多个观察序列的隐马尔可夫模型的参数。

但是对于函数hmmfit(x),x的格式是什么,我尝试使用矩阵,列表列表,但方法hmmfit(x)无法正常工作,说x不是数字。

有人可以举例说明如何使用这个包估算HMM参数吗?我有一个csv文件,其中每一行都是一系列观察,我在csv文件中有多行。

非常感谢!

1 个答案:

答案 0 :(得分:3)

我写了这个函数来创建正确的数据格式:

formatMhsmm <- function(data){

  nb.sequences = nrow(data)
  nb.observations = length(data)

  #transform list to data frame
  data_df <- data.frame(matrix(unlist(data), nrow = nb.sequences, byrow=F))


  #iterate over these in loops
  rows <- 1:nb.sequences
  observations <- 0:(nb.observations-1)

  #build vector with id values
  id = numeric(length = nb.sequences*nb.observations ) 

  for(i in rows)
  {
    for (j in observations)
    {
      id[i+j+(i-1)*(nb.observations-1)] = i
    }
  }

  #build vector with observation values
  sequences = numeric(length = nb.sequences*nb.observations) 

  for(i in rows)
  {
    for (j in observations)
    {
      sequences[i+j+(i-1)*(nb.observations-1)] = data_df[i,j+1]
    }
  }

  data.df = data.frame(id, sequences)

  #creation of hsmm.data object needed for training
  N <- as.numeric(table(data.df$id))
  train <- list(x = data.df$sequences, N = N)
  class(train) <- "hsmm.data"

  return(train)
}

基本上,您在hsmm.data格式中需要的是一个ID,它显示每个序列的长度以及相应的序列。这些是在列表中,然后您分配“hsmm.data”格式,以便hmmfit可以识别它。

然后你就可以这样称呼它,我给出了HMM参数的一些初步估计,你可以根据自己的需要进行调整:

library(mhsmm)

dataset <- read.csv('file.csv',header=TRUE)
train <- formatMhsmm(dataset)

# 4 states HMM    
J=4
#init probabilities
init <- rep(1/J, J)

#transition matrix
P <- matrix(rep(1/J, J*J), nrow = J)

#emission matrix:  here I used a Gaussian distribution, replace muEst and sigmaEst by your initial estimates of mean and variance
b <- list(mu = muEst, sigma = sigmaEst) 

#starting model for EM
startmodel <- hmmspec(init = init, trans = P, parms.emis = b, dens.emis = dnorm.hsmm)

#EM algorithm fits an HMM to the data
hmm <- hmmfit(train, startmodel, mstep = mstep.norm,maxit = 100)

#print resulting HMM parameters
summary(hmm)

您可以找到更多信息的论文是:O'Connell,Jared和SørenHøjsgaard。 “用于多个观测序列的隐藏半马尔可夫模型:用于R的mhsmm包。”统计软件期刊39.4(2011):1-22。

这是一个迟到的答案,但希望它可以帮助某人。 干杯