Markov Switching MSwM封装中的AIC和BIC

时间:2017-05-02 03:26:24

标签: r modeling markov

我正在尝试了解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

非常感谢你!

1 个答案:

答案 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)

最诚挚的问候。