Python 为什么是statsmodels;“Df模型”;是否少于包含的模型参数数量?
我已经在我的代码中多次看到这个问题,其中statsmodels计算的“Df模型”小于模型拟合的参数数量 据我所知,无论我适合哪种模型,而且(我相信)只有在参数数量不小(>20?)的情况下才会发生这种情况。这可能与参数之间的高多重共线性有关吗 由于这个问题似乎是由大量参数(使用“真实”数据)引起的,因此我不确定是否可以重新创建一些虚拟数据来展示这个问题。我只是希望有人以前见过它,知道它为什么会发生 不管怎样,下面显示了我的代码示例(&作为注释输出)Python 为什么是statsmodels;“Df模型”;是否少于包含的模型参数数量?,python,statsmodels,Python,Statsmodels,我已经在我的代码中多次看到这个问题,其中statsmodels计算的“Df模型”小于模型拟合的参数数量 据我所知,无论我适合哪种模型,而且(我相信)只有在参数数量不小(>20?)的情况下才会发生这种情况。这可能与参数之间的高多重共线性有关吗 由于这个问题似乎是由大量参数(使用“真实”数据)引起的,因此我不确定是否可以重新创建一些虚拟数据来展示这个问题。我只是希望有人以前见过它,知道它为什么会发生 不管怎样,下面显示了我的代码示例(&作为注释输出) print type(base_features
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
打印类型(基本功能)#
打印透镜(基本特征)#70
model=sm.GLM(train1['target'],train1[base_features],family=Poisson())
#^为其他glm族模型以及标准OLS生成相同的结果
poi_base=model.fit()
打印长度(poi_base.params)#70
打印poi_base.df_模型#63
请注意,“基本要素”中有一个用户构造的截距/常数,但即使statsmodels能够识别,df\u模型至少应为69。一般来说,df\u模型取决于设计矩阵的等级,不考虑常数。秩由numpy中使用的阈值定义,该阈值取决于条件数 线性模型考虑到是否检测到常量在
exog
中,无论是显式的还是隐式的。其他模型,如离散模型和GLM模型,则假定始终存在一个常数。(在线性模型中,rsquared
的定义取决于常数的存在,在其他模型中,llnull
仅是模型具有常数的对数似然性,而不检查原始模型是否包含常数。)
在线性模型中,OLS、WLS和类似
self._df_model = float(self.rank - self.k_constant)
self.df_model = float(np_matrix_rank(self.exog) - 1)
在GLM中
self.df_model = np_matrix_rank(self.exog) - 1
在离散模型中,Logit、Probit、Poisson等
self._df_model = float(self.rank - self.k_constant)
self.df_model = float(np_matrix_rank(self.exog) - 1)
(关于各种df_模型
和df_残差
的定义,github上存在一些悬而未决的问题,主要用于常数的处理。对于惩罚估计量,df_模型和df_残差应基于有效自由度,但可能尚未得到一致的实施。)
旁白:基于线性模型的估计器,包括通过迭代加权最小二乘法估计的估计器,默认情况下基于广义逆,即使设计矩阵秩亏,广义逆也会产生估计。所有其他模型都将打破优化,并提出一个奇异设计矩阵的例外情况