~20?)的情况下,这-6ren">
gpt4 book ai didi

python - 为什么 statsmodels "Df Model"小于包含的模型参数数量?

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:01 25 4
gpt4 key购买 nike

我已经在我的编码中多次看到这个问题,其中 statsmodels 计算的“Df 模型”小于模型拟合的参数数量。

据我所知,无论我适合哪种模型,并且(我相信)仅在参数数量不少(> ~20?)的情况下,这种情况都会发生。这可能与参数之间的高度多重共线性有关吗?

由于此问题似乎是由大量参数(带有“真实”数据)引起的,因此我不确定是否可以重新创建一些虚拟数据来展示该问题。我只是希望有人以前见过它并知道为什么会发生。

无论如何,我的代码示例(以及作为注释输出)如下所示。

print type(base_features) #<type 'list'>
print len(base_features) #70

model = sm.GLM(train1['target'], train1[base_features], family=Poisson())
#^ produces the same results for other glm family models as well as standard OLS
poi_base = model.fit()

print len(poi_base.params) #70
print poi_base.df_model #63

请注意,“base_features”中有一个用户构造的截距/常量,但即使 statsmodels 能够识别这一点,df_model 至少仍应为 69。

最佳答案

一般来说,df_model 取决于设计矩阵的秩,并且不考虑常数。排名由 numpy 中使用的阈值定义,该阈值取决于条件数。

线性模型会显式或隐式地考虑是否在 exog 中检测到常量。其他模型(例如离散模型和 GLM 模型)假设始终存在一个常数。 (在线性模型中,rsquared 的定义取决于常量的存在,在其他模型中,llnull 是仅具有常量的模型的对数似然性,而不检查原始模型是否存在是否包含常量。)

在线性模型中,OLS、WLS 和类似模型

self._df_model = float(self.rank - self.k_constant)

在 GLM 中

self.df_model = np_matrix_rank(self.exog) - 1

在离散模型中,Logit、Probit、Poisson 和类似模型

self.df_model = float(np_matrix_rank(self.exog) - 1)

(github上有一些关于各种df_modeldf_resid的定义的开放问题,主要是针对常量的处理。对于惩罚估计器,df_model和df_resid应该基于有效的自由度,但这可能尚未得到一致实现。)

旁白:基于线性模型的估计器(包括通过迭代重新加权最小二乘法估计的估计器)默认基于广义逆,即使设计矩阵是秩亏的,它也会产生估计。所有其他模型都会中断优化并引发奇异设计矩阵的异常。

关于python - 为什么 statsmodels "Df Model"小于包含的模型参数数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45646595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com