NA / NaN / Inf error when installing HMM using depmixS4 in R

I am trying to install simple hidden markov models in R using depmix. But sometimes I get obscure errors (Na / NaN / Inf in the outer function call). For example,

 require(depmixS4)
 t = data.frame(v=c(0.0622031327669583,-0.12564002739468,-0.117354660120178,0.0115062213361335,0.122992418345013,-0.0177816909620965,0.0164821157439354,0.161981367176501,-0.174367935386872,0.00429417498601576,0.00870091566593177,-0.00324734222267713,-0.0609817740148078,0.0840679943325736,-0.0722982123741866,0.00309386232501072,0.0136237132601905,-0.0569072400881981,0.102323872007477,-0.0390675463642003,0.0373248728294635,-0.0839484669503484,0.0514620475651086,-0.0306598076180909,-0.0664992242224042,0.826857872461293,-0.172970803143762,-0.071091459861684,-0.0128631184461384,-0.0439382422065227,-0.0552809574423446,0.0596321725192134,-0.06043926984848,0.0398700063815422))
 mod = depmix(response=v~1, data=t, nstates=2)
 fit(mod)
 ...
 NA/NaN/Inf in foreign function call (arg 10)

      

And I can be pretty much the same size and complexity of work ... Is there a preferred tool for depmixS4 here?

+3


source to share


1 answer


There is no guarantee that the EM algorithm can find a match for every dataset given an arbitrary number of states. For example, if you tried to map a 2nd Gaussian model to data derived from a Poisson distribution with lambda = 1, you would get the same error.

set.seed(3)
ydf <- data.frame(y=rpois(100,1))    
m1 <- depmix(y~1,ns=2,family=gaussian(),data=ydf)
fit(m1)

iteration 0 logLik: -135.6268 
iteration 5 logLik: -134.2392 
iteration 10 logLik: -128.7834 
iteration 15 logLik: -111.5922 
Error in fb(init = init, A = trDens, B = dens, ntimes = ntimes(object),  : 
  NA/NaN/Inf in foreign function call (arg 10)

      



As far as your data is concerned, you can fit the model to your data, just fine with one state. With 2 states, the algorithm cannot find a solution (even with 10,000 random runs). For 3 states, the problem seems to be related to initializing the initial states of the model. If you try to run the same model 100 times with the data you provided, you will get convergence in some of the 100 iterations. See example below:

 >require(depmixS4)
 >t = data.frame(v=c(0.0622031327669583,-0.12564002739468,-0.117354660120178,0.0115062213361335,0.122992418345013,-0.0177816909620965,0.0164821157439354,0.161981367176501,-0.174367935386872,0.00429417498601576,0.00870091566593177,-0.00324734222267713,-0.0609817740148078,0.0840679943325736,-0.0722982123741866,0.00309386232501072,0.0136237132601905,-0.0569072400881981,0.102323872007477,-0.0390675463642003,0.0373248728294635,-0.0839484669503484,0.0514620475651086,-0.0306598076180909,-0.0664992242224042,0.826857872461293,-0.172970803143762,-0.071091459861684,-0.0128631184461384,-0.0439382422065227,-0.0552809574423446,0.0596321725192134,-0.06043926984848,0.0398700063815422))
 >mod = depmix(response=v~1, data=t, nstates=2)
 >fit(mod)
 ...
 NA/NaN/Inf in foreign function call (arg 10)

>replicate(100, try(fit(mod, verbose = F)))

[[1]]
[1] "Error in fb(init = init, A = trDens, B = dens, ntimes = ntimes(object),  : \n  NA/NaN/Inf in foreign function call (arg 10)\n"

[[2]]
[1] "Error in fb(init = init, A = trDens, B = dens, ntimes = ntimes(object),  : \n  NA/NaN/Inf in foreign function call (arg 10)\n"

[[3]]
Convergence info: Log likelihood converged to within tol. (relative change) 
'log Lik.' 34.0344 (df=14)
AIC:  -40.0688 
BIC:  -18.69975 
... output truncated

      

0


source







All Articles