statsmodels的MixedLMResults返回BIC为NaN的原因及手动计算方法
问题原因
- 核心原因是statsmodels 0.14.0之前的版本存在已知bug:当为混合线性模型指定包含随机斜率的
re_formula时,内置的bic属性计算逻辑缺失,会直接返回nan。 - 可先自行排除其他异常:调用
print(mdf.summary())检查拟合结果的收敛状态,若收敛状态为Converged: True、参数估计无异常值,即可确认是包本身的bug导致。
手动计算BIC的方式
线性混合效应模型的BIC通用计算公式为:
BIC = -2 * log_likelihood + k * ln(n)
各参数含义及获取方式:
log_likelihood:模型的对数似然值,可直接通过mdf.llf获取k:模型的自由参数总数,可直接通过mdf.df_modelwc属性获取,无需手动计数。你当前的模型参数包括2个固定效应系数、2x2随机效应协方差矩阵的3个自由参数、1个残差方差,总计6个参数,和mdf.df_modelwc返回值一致。n:总观测样本量,即len(df)
手动计算代码示例:
import numpy as np bic_manual = -2 * mdf.llf + mdf.df_modelwc * np.log(len(df))
上述计算逻辑和statsmodels 0.14.0及以上版本修复后的内置bic属性输出完全一致。
内容的提问来源于stack exchange,提问作者Elşən Kazım
相关产品推荐
相关产品推荐

