我正在尝试了解MSwM软件包的一些功能,所以我可以在我正在撰写的论文中使用它。在复制作者提供的示例时,我有两件事我没有得到。
第一个与包中使用的摘要方法有关:为什么logLikel
在我拨打mod.mswm@Fit@logLikel
时为正数而在拨打summary(mod.mswm)
时为负数?是否可以直接从摘要对象获取logLik(而不是logLikel),AIC和BIC?
第二个与AIC和BIC信息标准有关。该软件包的文档说,为了获得这些值,我们应该使用AIC函数,为k选择合适的值来获得AIC或BIC。所以对于AIC,k应该是2,对于BIC,我认为它应该是log(length(y))
,其中y是我的单变量时间序列。问题在于,当我执行此过程时,我获得的AIC和BIC的值与summary
中的值不同。这是为什么?我错过了什么?
这是我正在使用的代码:
library(MSwM)
data(example)
mod=lm(y~x,example)
mod.mswm=msmFit(mod,k=2,p=1,sw=c(T,T,T,T),control=list(parallel=F))
summary(mod.mswm)
结果的第一行是:
Markov Switching Model
Call: msmFit(object = mod, k = 2, sw = c(T, T, T, T), p = 1, control = list(parallel = F))
AIC BIC logLik
637.0736 693.479 -312.5368
但是,如果我尝试使用函数或手动计算AIC和BIC,我会得到不同的结果:
#Akaike
AIC(mod.mswm,k=2) #using function. Result:641.0736
8*2-((-1)*2*mod.mswm@Fit@logLikel)#by hand. Result:641.0736
#Bayesian
AIC(mod.mswm,k=log(length(example$y))) #using function. Result: 670.7039
8*log(length(example$y))-((-1)*2*mod.mswm@Fit@logLikel) #by hand. Result: 670.7039
非常感谢你!
答案 0 :(得分:1)
我遇到了同样的问题。我无法解释,为什么开发人员会选择略有不同的公式,但我可以告诉你,使用了哪一个。
public class Pojo {
private Map<String, String> stringStringMap;
...
}
我在互联网上的源代码中找到了这个代码段。如您所见,结果是一样的。
所以我提取了以下公式:
&#39;#&#39;:= 数量......
AIC = 2 * LogLikelihood + 2 *(#parameter包括常数)*(#regimes)
BIC = 2 * LogLikelihood + 2 *(#parameters incl.constant)*(#regimes)* ln(#observations)
最诚挚的问候。