2014-02-10 20 views
1

我打算使用MHSMM包來使用多個觀察序列來估計隱馬爾可夫模型的參數。R輸入格式的MHSMM包?

但是,對於函數hmmfit(x),x的格式是什麼,我嘗試使用矩陣,列表的列表,但方法hmmfit(x)不能正常工作,說x不是數字。

任何人都可以舉例說明如何使用這個包來估計HMM參數嗎?我有一個csv文件,其中每一行是觀察序列,我有csv文件中有多行。

非常感謝!

回答

2

我寫了這個函數來創建正確的數據格式:

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包」 Journal of Statistical Software 39.4(2011):1-22。

這是一個遲到的答案,但希望它可以幫助某人。 乾杯