sklearn/statsmodels 奇异协方差矩阵下普通最小二乘的结果
Results of sklearn/statsmodels ordinary least squares under singular covariance matrix
当使用 sklearn.linear_model.LinearRegression
或 statsmodels.regression.linear_model.OLS
计算普通最小二乘回归时,当协方差矩阵完全奇异时,它们似乎不会抛出任何错误。看起来他们在幕后使用的是 Moore-Penrose 伪逆而不是通常的逆,这在奇异协方差矩阵下是不可能的。
那么问题是双重的:
这样设计的意义何在?无论协方差矩阵是否奇异,什么情况下计算OLS有用?
那么它输出的系数是什么?据我了解,由于协方差矩阵是奇异的,因此通过伪逆会有无限数量的(在缩放常数的意义上)解。
确实如此。如您所见here
sklearn.linear_model.LinearRegression
基于 scipy.linalg.lstsq
或 scipy.optimize.nnls
,它们又通过 SVD 分解计算特征矩阵的伪逆(它们不利用正规方程 - 你会有提到的问题 - 因为它效率较低)。此外,观察每个 sklearn.linear_model.LinearRegression
的实例 returns 特征矩阵的奇异值进入 singular_
属性及其等级进入 rank_
属性。
- 类似的论点适用于
statsmodels.regression.linear_model.OLS
,其中 class RegressionModel
的 fit()
方法使用以下内容:
The fit method uses the pseudoinverse of the design/exogenous variables to solve the least squares minimization.
(参考here)。
两个相关问答
Differences in Linear Regression in R and Python
Statsmodels with partly identified model
致1)无论协方差矩阵是否奇异,什么情况下计算OLS有用?
即使一些参数没有被无限可能的解决方案中的“任意”唯一解决方案识别和挑选,一些结果统计不受非识别的影响,主要的是可估计的线性组合,预测和r 平方。
即使不是所有参数都被单独识别,也识别出一些参数的线性组合。例如,我们仍然可以测试单向分类变量中的所有均值是否相等。即使在奇点下,这些也是可估计的函数,这也是 statsmodels 从其前身包继承 pinv
行为的原因。但是,statsmodels 没有从参数估计的奇异协方差矩阵中识别 estimable functions
的函数。
我们对解释变量的任何值都有一个独特的预测,如果完全共线性持续存在,这仍然有用。
像 Rsquared 这样的一些汇总和推论统计与选择唯一参数的方式无关。这有时很方便并被使用,例如,在诊断和规范测试中,LM-test 可以从 rsquared 计算出来。
至2)那么输出的系数是什么?
Moore-Penrose 逆估计的参数可以解释为对称惩罚或正则化估计。当我们有岭回归并且惩罚权重变为零时,Moore-Penrose 解决方案也会获得。 (我不记得我在哪里读到的。)
另外,在某些采用单一设计的情况下,不确定性只会影响某些参数。尽管我们在推断这些参数时必须小心,但其他参数可能仍会被识别并且不受完全共线部分的影响。
一个软件包基本上有 3 个选项来处理单个案例
- 引发异常并拒绝计算任何东西
- 删除一些变量,问题是要删除哪些变量
- 切换到包括广义逆的惩罚解
statsmodels 选择 3 主要是因为变量的对称处理。 R 和 Stata 在许多模型中选择 2(我认为很难预测哪个变量丢失)。
对称处理的一个原因是它可以更容易地比较多个数据集的相同回归,如果在使用案例 2 时不总是删除相同的变量,这将更加困难。
我注意到了同样的事情,似乎 sklearn 和 statsmodel 非常强大,有点太强大了,让你想知道到底如何解释结果。我想建模者仍然需要尽职调查以确定变量之间的任何共线性并消除不必要的变量。有趣的 sklearn 甚至不会给你 pvalue,这是这些回归中最重要的衡量标准。当使用变量时,系数会发生变化,这就是为什么我更关注 pvalues 的原因。
当使用 sklearn.linear_model.LinearRegression
或 statsmodels.regression.linear_model.OLS
计算普通最小二乘回归时,当协方差矩阵完全奇异时,它们似乎不会抛出任何错误。看起来他们在幕后使用的是 Moore-Penrose 伪逆而不是通常的逆,这在奇异协方差矩阵下是不可能的。
那么问题是双重的:
这样设计的意义何在?无论协方差矩阵是否奇异,什么情况下计算OLS有用?
那么它输出的系数是什么?据我了解,由于协方差矩阵是奇异的,因此通过伪逆会有无限数量的(在缩放常数的意义上)解。
确实如此。如您所见here
sklearn.linear_model.LinearRegression
基于scipy.linalg.lstsq
或scipy.optimize.nnls
,它们又通过 SVD 分解计算特征矩阵的伪逆(它们不利用正规方程 - 你会有提到的问题 - 因为它效率较低)。此外,观察每个sklearn.linear_model.LinearRegression
的实例 returns 特征矩阵的奇异值进入singular_
属性及其等级进入rank_
属性。- 类似的论点适用于
statsmodels.regression.linear_model.OLS
,其中 classRegressionModel
的fit()
方法使用以下内容:
The fit method uses the pseudoinverse of the design/exogenous variables to solve the least squares minimization.
(参考here)。
两个相关问答
Differences in Linear Regression in R and Python
Statsmodels with partly identified model
致1)无论协方差矩阵是否奇异,什么情况下计算OLS有用?
即使一些参数没有被无限可能的解决方案中的“任意”唯一解决方案识别和挑选,一些结果统计不受非识别的影响,主要的是可估计的线性组合,预测和r 平方。
即使不是所有参数都被单独识别,也识别出一些参数的线性组合。例如,我们仍然可以测试单向分类变量中的所有均值是否相等。即使在奇点下,这些也是可估计的函数,这也是 statsmodels 从其前身包继承 pinv
行为的原因。但是,statsmodels 没有从参数估计的奇异协方差矩阵中识别 estimable functions
的函数。
我们对解释变量的任何值都有一个独特的预测,如果完全共线性持续存在,这仍然有用。
像 Rsquared 这样的一些汇总和推论统计与选择唯一参数的方式无关。这有时很方便并被使用,例如,在诊断和规范测试中,LM-test 可以从 rsquared 计算出来。
至2)那么输出的系数是什么?
Moore-Penrose 逆估计的参数可以解释为对称惩罚或正则化估计。当我们有岭回归并且惩罚权重变为零时,Moore-Penrose 解决方案也会获得。 (我不记得我在哪里读到的。)
另外,在某些采用单一设计的情况下,不确定性只会影响某些参数。尽管我们在推断这些参数时必须小心,但其他参数可能仍会被识别并且不受完全共线部分的影响。
一个软件包基本上有 3 个选项来处理单个案例
- 引发异常并拒绝计算任何东西
- 删除一些变量,问题是要删除哪些变量
- 切换到包括广义逆的惩罚解
statsmodels 选择 3 主要是因为变量的对称处理。 R 和 Stata 在许多模型中选择 2(我认为很难预测哪个变量丢失)。
对称处理的一个原因是它可以更容易地比较多个数据集的相同回归,如果在使用案例 2 时不总是删除相同的变量,这将更加困难。
我注意到了同样的事情,似乎 sklearn 和 statsmodel 非常强大,有点太强大了,让你想知道到底如何解释结果。我想建模者仍然需要尽职调查以确定变量之间的任何共线性并消除不必要的变量。有趣的 sklearn 甚至不会给你 pvalue,这是这些回归中最重要的衡量标准。当使用变量时,系数会发生变化,这就是为什么我更关注 pvalues 的原因。