RcppHMM-package: Overview of Package RcppHMM

Description Details Author(s) References Examples

Description

This package can model observations based on hidden Markov models. The observations can be considered to be emitted by a multinomial distribution, A mixture of Gaussians or a mixture of Poissons. It can be used for inference, parameter estimation and simulation.

Details

The package can be used to represent a discrete-time hidden Markov model. The states can generate categorical (labeled), continuous or discrete observations. The hidden state transition and observations can be randomly generated based on fixed parameters. Also, the inference methods can be used to evaluate sequences or decode the hidden states that generated the observations. Finally, the model parameters can be estimated by a single or multiple observed sequences.

Author(s)

Roberto A. Cardenas-Ovando, Julieta Noguez and Claudia Rangel-Escareno

Maintainer: Roberto A. Cardenas-Ovando <robalecarova@gmail.com>

References

Bilmes, J.E. (1998). A Gentle Tutorial of the EM Algorithm and its Application to Parameter Estimation for Gaussian Mixture and Hidden Markov Models. International Computer Science Institute.

Ibe, O. (2009). Markov processes for stochastic modeling. Oxford.

Rabiner, L.R. (1989). A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of the IEEE.

Rabiner L.; Juang, B.H. (1993) Fundamentals of Speech Recognition. Prentice Hall Signal Processing Series.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Multinomial case
# Set the model parameters to be estimated
n <- c("First","Second")
m <- c("A","T","C","G")
A <- matrix(c(0.8,0.2,
              0.1,0.9),
            nrow = 2,
            byrow = TRUE)

B <- matrix(c(0.2, 0.2, 0.3, 0.3,
              0.4, 0.4, 0.1, 0.1),
            nrow = 2,
            byrow = TRUE)
            
Pi <- c(0.5, 0.5)


params <- list( "Model" = "HMM",
                "StateNames" = n,
                "ObservationNames" = m,
                "A" = A,
                "B" = B,
                "Pi" = Pi)

# Model parameters validation

HMM <- verifyModel(params)

# Data simulation
# Multiple sequences

set.seed(100)
length <- 100
seqs <- 100
observationSequences<- c()
for(i in 1:seqs){
  Y <- generateObservations(HMM , length)$Y
  observationSequences <- rbind(observationSequences , Y)
}

# New model random initialization

set.seed(1000)
newModel <- initHMM(2,4) 
n = c("X1","X2")
m = c("A","T","C","G")

# Change model names

newModel <- setNames(newModel,
                        list( "StateNames" = n,
                              "ObservationNames" = m) )

# Model parameters estimation

newModel <- learnEM(newModel,
        observationSequences,
        iter=300, 
        delta = 1E-8,
        pseudo = 0,
        print = TRUE)

# New sequence simulation to compare the new model
# Data simulation

# Single sequence
Y <- generateObservations(HMM , length)$Y

# Evaluation

evaluation(newModel, Y, "f")
evaluation(newModel, Y, "b")

# Hidden state decoding

hiddenStatesViterbi <- viterbi(newModel, Y)
hiddenStatesFB <- forwardBackward( newModel, Y)

Example output

Attaching package: 'RcppHMM'

The following object is masked from 'package:stats':

    setNames

Iteration: 1 Error: 1457.76
Iteration: 2 Error: 3.9032
Iteration: 3 Error: 3.97536
Iteration: 4 Error: 3.98401
Iteration: 5 Error: 3.91719
Iteration: 6 Error: 3.76953
Iteration: 7 Error: 3.54362
Iteration: 8 Error: 3.2505
Iteration: 9 Error: 2.90855
Iteration: 10 Error: 2.54067
Iteration: 11 Error: 2.17051
Iteration: 12 Error: 1.81874
Iteration: 13 Error: 1.50045
Iteration: 14 Error: 1.22417
Iteration: 15 Error: 0.992473
Iteration: 16 Error: 0.803439
Iteration: 17 Error: 0.652418
Iteration: 18 Error: 0.53357
Iteration: 19 Error: 0.440952
Iteration: 20 Error: 0.369155
Iteration: 21 Error: 0.313586
Iteration: 22 Error: 0.270514
Iteration: 23 Error: 0.237
Iteration: 24 Error: 0.210775
Iteration: 25 Error: 0.190105
Iteration: 26 Error: 0.173674
Iteration: 27 Error: 0.160485
Iteration: 28 Error: 0.149784
Iteration: 29 Error: 0.140997
Iteration: 30 Error: 0.133687
Iteration: 31 Error: 0.127521
Iteration: 32 Error: 0.122242
Iteration: 33 Error: 0.117653
Iteration: 34 Error: 0.113602
Iteration: 35 Error: 0.109972
Iteration: 36 Error: 0.106672
Iteration: 37 Error: 0.103632
Iteration: 38 Error: 0.100796
Iteration: 39 Error: 0.0981246
Iteration: 40 Error: 0.0955837
Iteration: 41 Error: 0.0931488
Iteration: 42 Error: 0.0908008
Iteration: 43 Error: 0.0885249
Iteration: 44 Error: 0.0863103
Iteration: 45 Error: 0.0841483
Iteration: 46 Error: 0.0820329
Iteration: 47 Error: 0.0799593
Iteration: 48 Error: 0.0779241
Iteration: 49 Error: 0.0759249
Iteration: 50 Error: 0.0739599
Iteration: 51 Error: 0.0720281
Iteration: 52 Error: 0.0701286
Iteration: 53 Error: 0.068261
Iteration: 54 Error: 0.0664251
Iteration: 55 Error: 0.0646208
Iteration: 56 Error: 0.062848
Iteration: 57 Error: 0.061107
Iteration: 58 Error: 0.0593978
Iteration: 59 Error: 0.0577206
Iteration: 60 Error: 0.0560755
Iteration: 61 Error: 0.0544626
Iteration: 62 Error: 0.0528821
Iteration: 63 Error: 0.0513341
Iteration: 64 Error: 0.0498185
Iteration: 65 Error: 0.0483354
Iteration: 66 Error: 0.0468849
Iteration: 67 Error: 0.0454667
Iteration: 68 Error: 0.0440809
Iteration: 69 Error: 0.0427273
Iteration: 70 Error: 0.0414058
Iteration: 71 Error: 0.0401161
Iteration: 72 Error: 0.038858
Iteration: 73 Error: 0.0376312
Iteration: 74 Error: 0.0364355
Iteration: 75 Error: 0.0352705
Iteration: 76 Error: 0.0341358
Iteration: 77 Error: 0.0330312
Iteration: 78 Error: 0.0319562
Iteration: 79 Error: 0.0309105
Iteration: 80 Error: 0.0298934
Iteration: 81 Error: 0.0289048
Iteration: 82 Error: 0.0279439
Iteration: 83 Error: 0.0270105
Iteration: 84 Error: 0.026104
Iteration: 85 Error: 0.0252238
Iteration: 86 Error: 0.0243696
Iteration: 87 Error: 0.0235407
Iteration: 88 Error: 0.0227367
Iteration: 89 Error: 0.0219571
Iteration: 90 Error: 0.0212012
Iteration: 91 Error: 0.0204687
Iteration: 92 Error: 0.0197588
Iteration: 93 Error: 0.0190712
Iteration: 94 Error: 0.0184053
Iteration: 95 Error: 0.0177606
Iteration: 96 Error: 0.0171365
Iteration: 97 Error: 0.0165325
Iteration: 98 Error: 0.0159481
Iteration: 99 Error: 0.0153828
Iteration: 100 Error: 0.014836
Iteration: 101 Error: 0.0143073
Iteration: 102 Error: 0.0137962
Iteration: 103 Error: 0.0133022
Iteration: 104 Error: 0.0128248
Iteration: 105 Error: 0.0123635
Iteration: 106 Error: 0.0119178
Iteration: 107 Error: 0.0114874
Iteration: 108 Error: 0.0110717
Iteration: 109 Error: 0.0106703
Iteration: 110 Error: 0.0102827
Iteration: 111 Error: 0.00990864
Iteration: 112 Error: 0.00954759
Iteration: 113 Error: 0.00919916
Iteration: 114 Error: 0.00886297
Iteration: 115 Error: 0.00853861
Iteration: 116 Error: 0.00822571
Iteration: 117 Error: 0.0079239
Iteration: 118 Error: 0.00763283
Iteration: 119 Error: 0.00735213
Iteration: 120 Error: 0.00708148
Iteration: 121 Error: 0.00682054
Iteration: 122 Error: 0.00656897
Iteration: 123 Error: 0.00632648
Iteration: 124 Error: 0.00609275
Iteration: 125 Error: 0.00586748
Iteration: 126 Error: 0.00565039
Iteration: 127 Error: 0.00544119
Iteration: 128 Error: 0.00523963
Iteration: 129 Error: 0.00504542
Iteration: 130 Error: 0.00485831
Iteration: 131 Error: 0.00467806
Iteration: 132 Error: 0.00450443
Iteration: 133 Error: 0.00433718
Iteration: 134 Error: 0.00417609
Iteration: 135 Error: 0.00402094
Iteration: 136 Error: 0.00387151
Iteration: 137 Error: 0.00372761
Iteration: 138 Error: 0.00358904
Iteration: 139 Error: 0.0034556
Iteration: 140 Error: 0.0033271
Iteration: 141 Error: 0.00320338
Iteration: 142 Error: 0.00308426
Iteration: 143 Error: 0.00296957
Iteration: 144 Error: 0.00285915
Iteration: 145 Error: 0.00275284
Iteration: 146 Error: 0.00265049
Iteration: 147 Error: 0.00255196
Iteration: 148 Error: 0.00245711
Iteration: 149 Error: 0.00236581
Iteration: 150 Error: 0.00227791
Iteration: 151 Error: 0.00219331
Iteration: 152 Error: 0.00211186
Iteration: 153 Error: 0.00203347
Iteration: 154 Error: 0.001958
Iteration: 155 Error: 0.00188537
Iteration: 156 Error: 0.00181545
Iteration: 157 Error: 0.00174816
Iteration: 158 Error: 0.00168339
Iteration: 159 Error: 0.00162104
Iteration: 160 Error: 0.00156103
Iteration: 161 Error: 0.00150327
Iteration: 162 Error: 0.00144768
Iteration: 163 Error: 0.00139417
Iteration: 164 Error: 0.00134267
Iteration: 165 Error: 0.00129309
Iteration: 166 Error: 0.00124538
Iteration: 167 Error: 0.00119946
Iteration: 168 Error: 0.00115526
Iteration: 169 Error: 0.00111271
Iteration: 170 Error: 0.00107176
Iteration: 171 Error: 0.00103235
Iteration: 172 Error: 0.00099441
Iteration: 173 Error: 0.000957893
Iteration: 174 Error: 0.000922745
Iteration: 175 Error: 0.000888913
Iteration: 176 Error: 0.000856348
Iteration: 177 Error: 0.000825002
Iteration: 178 Error: 0.000794829
Iteration: 179 Error: 0.000765786
Iteration: 180 Error: 0.000737828
Iteration: 181 Error: 0.000710917
Iteration: 182 Error: 0.000685011
Iteration: 183 Error: 0.000660073
Iteration: 184 Error: 0.000636067
Iteration: 185 Error: 0.000612958
Iteration: 186 Error: 0.000590711
Iteration: 187 Error: 0.000569295
Iteration: 188 Error: 0.000548677
Iteration: 189 Error: 0.000528828
Iteration: 190 Error: 0.000509719
Iteration: 191 Error: 0.000491322
Iteration: 192 Error: 0.00047361
Iteration: 193 Error: 0.000456558
Iteration: 194 Error: 0.00044014
Iteration: 195 Error: 0.000424332
Iteration: 196 Error: 0.000409112
Iteration: 197 Error: 0.000394458
Iteration: 198 Error: 0.000380348
Iteration: 199 Error: 0.000366761
Iteration: 200 Error: 0.000353679
Iteration: 201 Error: 0.000341082
Iteration: 202 Error: 0.000328951
Iteration: 203 Error: 0.00031727
Iteration: 204 Error: 0.000306021
Iteration: 205 Error: 0.000295189
Iteration: 206 Error: 0.000284757
Iteration: 207 Error: 0.00027471
Iteration: 208 Error: 0.000265034
Iteration: 209 Error: 0.000255716
Iteration: 210 Error: 0.000246741
Iteration: 211 Error: 0.000238098
Iteration: 212 Error: 0.000229772
Iteration: 213 Error: 0.000221753
Iteration: 214 Error: 0.00021403
Iteration: 215 Error: 0.00020659
Iteration: 216 Error: 0.000199423
Iteration: 217 Error: 0.00019252
Iteration: 218 Error: 0.00018587
Iteration: 219 Error: 0.000179464
Iteration: 220 Error: 0.000173293
Iteration: 221 Error: 0.000167347
Iteration: 222 Error: 0.000161619
Iteration: 223 Error: 0.000156101
Iteration: 224 Error: 0.000150784
Iteration: 225 Error: 0.000145661
Iteration: 226 Error: 0.000140725
Iteration: 227 Error: 0.000135968
Iteration: 228 Error: 0.000131385
Iteration: 229 Error: 0.000126969
Iteration: 230 Error: 0.000122713
Iteration: 231 Error: 0.000118612
Iteration: 232 Error: 0.00011466
Iteration: 233 Error: 0.00011085
Iteration: 234 Error: 0.000107179
Iteration: 235 Error: 0.000103641
Iteration: 236 Error: 0.00010023
Iteration: 237 Error: 9.69428e-05
Iteration: 238 Error: 9.3774e-05
Iteration: 239 Error: 9.07194e-05
Iteration: 240 Error: 8.77747e-05
Iteration: 241 Error: 8.4936e-05
Iteration: 242 Error: 8.21992e-05
Iteration: 243 Error: 7.95606e-05
Iteration: 244 Error: 7.70165e-05
Iteration: 245 Error: 7.45637e-05
Iteration: 246 Error: 7.21983e-05
Iteration: 247 Error: 6.99174e-05
Iteration: 248 Error: 6.7718e-05
Iteration: 249 Error: 6.5597e-05
Iteration: 250 Error: 6.35512e-05
Iteration: 251 Error: 6.15782e-05
Iteration: 252 Error: 5.96752e-05
Iteration: 253 Error: 5.78396e-05
Iteration: 254 Error: 5.6069e-05
Iteration: 255 Error: 5.43609e-05
Iteration: 256 Error: 5.2713e-05
Iteration: 257 Error: 5.11232e-05
Iteration: 258 Error: 4.95894e-05
Iteration: 259 Error: 4.81093e-05
Iteration: 260 Error: 4.66812e-05
Iteration: 261 Error: 4.5303e-05
Iteration: 262 Error: 4.3973e-05
Iteration: 263 Error: 4.26894e-05
Iteration: 264 Error: 4.14505e-05
Iteration: 265 Error: 4.02545e-05
Iteration: 266 Error: 3.91002e-05
Iteration: 267 Error: 3.79857e-05
Iteration: 268 Error: 3.69099e-05
Iteration: 269 Error: 3.5871e-05
Iteration: 270 Error: 3.48679e-05
Iteration: 271 Error: 3.38994e-05
Iteration: 272 Error: 3.2964e-05
Iteration: 273 Error: 3.20605e-05
Iteration: 274 Error: 3.11879e-05
Iteration: 275 Error: 3.03451e-05
Iteration: 276 Error: 2.95308e-05
Iteration: 277 Error: 2.87442e-05
Iteration: 278 Error: 2.79842e-05
Iteration: 279 Error: 2.72497e-05
Iteration: 280 Error: 2.65401e-05
Iteration: 281 Error: 2.58541e-05
Iteration: 282 Error: 2.51913e-05
Iteration: 283 Error: 2.45503e-05
Iteration: 284 Error: 2.39309e-05
Iteration: 285 Error: 2.33321e-05
Iteration: 286 Error: 2.27528e-05
Iteration: 287 Error: 2.2193e-05
Iteration: 288 Error: 2.16513e-05
Iteration: 289 Error: 2.11276e-05
Iteration: 290 Error: 2.06209e-05
Iteration: 291 Error: 2.01307e-05
Iteration: 292 Error: 1.96564e-05
Iteration: 293 Error: 1.91975e-05
Iteration: 294 Error: 1.87535e-05
Iteration: 295 Error: 1.83237e-05
Iteration: 296 Error: 1.79076e-05
Iteration: 297 Error: 1.75049e-05
Iteration: 298 Error: 1.71149e-05
Iteration: 299 Error: 1.67373e-05
Iteration: 300 Error: 1.63716e-05
Finished at Iteration: 300 with Error: 1.63716e-05
[1] -137.7089
[1] -137.7089

RcppHMM documentation built on May 2, 2019, 8:56 a.m.