Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么是statsmodels;“Df模型”;是否少于包含的模型参数数量?_Python_Statsmodels - Fatal编程技术网

Python 为什么是statsmodels;“Df模型”;是否少于包含的模型参数数量?

Python 为什么是statsmodels;“Df模型”;是否少于包含的模型参数数量?,python,statsmodels,Python,Statsmodels,我已经在我的代码中多次看到这个问题,其中statsmodels计算的“Df模型”小于模型拟合的参数数量 据我所知,无论我适合哪种模型,而且(我相信)只有在参数数量不小(>20?)的情况下才会发生这种情况。这可能与参数之间的高多重共线性有关吗 由于这个问题似乎是由大量参数(使用“真实”数据)引起的,因此我不确定是否可以重新创建一些虚拟数据来展示这个问题。我只是希望有人以前见过它,知道它为什么会发生 不管怎样,下面显示了我的代码示例(&作为注释输出) print type(base_features

我已经在我的代码中多次看到这个问题,其中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
打印类型(基本功能)#
打印透镜(基本特征)#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_残差应基于有效自由度,但可能尚未得到一致的实施。)

旁白:基于线性模型的估计器,包括通过迭代加权最小二乘法估计的估计器,默认情况下基于广义逆,即使设计矩阵秩亏,广义逆也会产生估计。所有其他模型都将打破优化,并提出一个奇异设计矩阵的例外情况