如何提取depmixs4 fit.mod中1&0形式的收敛信息?
How to extract converge information in depmixs4 fit.mod in the form of 1 & 0?
在包depmixs4中,HMM的收敛信息显示在print(fit.mod)中。
但是我正在尝试提取价值。例如,当它收敛时我得到 1。当它不收敛时我得到 0。
这样当它不收敛的时候我可以自动换成状态更少的HMM。
但是我没有在手册中找到解决方案。
for(i in 3000:(length(p[,2])-252*5)){
mod <- depmix(p[(i):(252*5-1+i),2] ~ 1, data = p[(i):(252*5-1+i),], nstates = 3, family = gaussian())
#set.seed(1)
fit.mod <- fit(mod)}
print(fit.mod) 会得到
print(fit.mod)
Convergence info: 'maxit' iterations reached in EM without convergence.
'log Lik.' 3478.027 (df=14)
AIC: -6928.053
BIC: -6856.109
问题是将信息 "iterations reached in EM without convergence" 提取为数字。
收敛 return 值在函数 fit
中赋值。您可以使用
查看代码中的确切位置
getMethods("fit", signature = "mix")
并寻找优化器 Rdonlp2::dolnp2
、rsolnp
和 solnp
.
黑客可以从 fit
编辑的对象 return 和 grepl
适当的字符串中提取槽 message
。
converged <- function(object, numeric = TRUE){
msg <- object@message
if(numeric) as.integer(grepl("converged", msg)) else msg
}
converged(fm)
#[1] 1
作为测试对象 fm
我使用了来自 help('fit')
的示例。
library(depmixS4)
data(speed)
mod <- depmix(list(rt~1,corr~1),data=speed,nstates=2,
family=list(gaussian(),multinomial("identity")),ntimes=c(168,134,137))
# print the model, formulae and parameter values
mod
set.seed(1)
# fit the model by calling fit
fm <- fit(mod, verbose = TRUE)
在包depmixs4中,HMM的收敛信息显示在print(fit.mod)中。 但是我正在尝试提取价值。例如,当它收敛时我得到 1。当它不收敛时我得到 0。
这样当它不收敛的时候我可以自动换成状态更少的HMM。 但是我没有在手册中找到解决方案。
for(i in 3000:(length(p[,2])-252*5)){
mod <- depmix(p[(i):(252*5-1+i),2] ~ 1, data = p[(i):(252*5-1+i),], nstates = 3, family = gaussian())
#set.seed(1)
fit.mod <- fit(mod)}
print(fit.mod) 会得到
print(fit.mod)
Convergence info: 'maxit' iterations reached in EM without convergence.
'log Lik.' 3478.027 (df=14)
AIC: -6928.053
BIC: -6856.109
问题是将信息 "iterations reached in EM without convergence" 提取为数字。
收敛 return 值在函数 fit
中赋值。您可以使用
getMethods("fit", signature = "mix")
并寻找优化器 Rdonlp2::dolnp2
、rsolnp
和 solnp
.
黑客可以从 fit
编辑的对象 return 和 grepl
适当的字符串中提取槽 message
。
converged <- function(object, numeric = TRUE){
msg <- object@message
if(numeric) as.integer(grepl("converged", msg)) else msg
}
converged(fm)
#[1] 1
作为测试对象 fm
我使用了来自 help('fit')
的示例。
library(depmixS4)
data(speed)
mod <- depmix(list(rt~1,corr~1),data=speed,nstates=2,
family=list(gaussian(),multinomial("identity")),ntimes=c(168,134,137))
# print the model, formulae and parameter values
mod
set.seed(1)
# fit the model by calling fit
fm <- fit(mod, verbose = TRUE)