MixedLMResults对象返回NaN BIC.原因是什么呢?



下面是我的代码:

import statsmodels.formula.api as smf
md = smf.mixedlm("dep ~ indep", df, groups=df["groups"], re_formula='~indep')
mdf = md.fit(method=["lbfgs"]) 

mdf。Bic返回nan作为输出。原因是什么呢?如果是包装相关的问题。有没有人可以为这个案例手工计算BIC ?

查看@StupidWolf问题下方的评论,我认为没有为LM模型提供BIC是正确的。即使在输出mdf.summary()时,您也不会在输出中找到BIC或AIC。

但是如果你想计算BIC,公式很简单。您甚至可以参考statsmodels中的代码:

def bic(self):
"""Bayesian information criterion"""
if self.reml:
return np.nan
if self.freepat is not None:
df = self.freepat.get_packed(use_sqrt=False, has_fe=True).sum() + 1
else:
df = self.params.size + 1
return -2 * self.llf + np.log(self.nobs) * df

这应该可以回答你的问题:

  • self.reml(REstricted Maximum Likelihood)被设置为true -这就是为什么你为BIC获得nan的原因。
  • 它告诉你,如何计算BIC

您可以看到BIC计算遵循标准的BIC公式。它取数据点/观测数乘以自由参数数/自由度(np.log(self.nobs) * df)的对数,然后减去模型的对数似然乘以2 (-2 * self.llf)。因此,您可以使用以下代码计算BIC:

-2 * mdf.llf + np.log(mdf.nobs) * (mdf.df_modelwc)

注意,这里我使用的是mdf.df_modelwc,实际上,在这种情况下,返回的是mdf.params.size

但是要注意开头提到的事情(为了完整,这里是@StupidWolf提供的SE链接-混合效果模型应该如何比较和或验证?)

最新更新