我正在尝试通过将结果与R中HSMM软件包中的功能进行比较来验证HMM的实现。
hsmm()函数在模拟观测值上求解时可以正常工作,如软件包说明中所示。 问题是当我尝试使用真实的观察值时,该模型未通过EM算法进行迭代。
为了确保观测向量相同,在obs3 [,1]和obs3 [,2]之间切换时,我是否将它们组合在一起,仍然只有迭代的模拟观测值可以通过EM算法进行迭代。
我在哪里错了?
# Simulating observations:
# (see hsmm.sim for details)
pipar <- rep(1/3, 3)
tpmpar <- matrix(c(0, 0.5, 0.5,
0.7, 0, 0.3,
0.8, 0.2, 0), 3, byrow = TRUE)
rdpar <- list(p = c(1, 1, 1))
odpar <- list(mean = c(-1.5, 0, 1.5), var = c(0.5, 0.6, 0.8), df = c(1,2,5))
sim <- hsmm.sim(n = 2000, od = "t", rd = "geom",
pi.par = pipar, tpm.par = tpmpar,
rd.par = rdpar, od.par = odpar, seed = 3539)
obs <- sim$obs
obs2 <- LnR.SP[1:2000,2]
obs3 <- cbind(obs, obs2)
# Executing the EM algorithm:
fit <- hsmm(obs3[,1], od = "t", rd = "geom",
pi.par = pipar, tpm.par = tpmpar,
od.par = odpar, rd.par = rdpar, epsilon = 10e-10)
# The log-likelihood:
fit$logl
# Ehe estimated parameters:
fit$para