【发布时间】:2019-11-19 04:16:08
【问题描述】:
我正在尝试使用 statsmodels 构建多元线性回归模型。我希望模型包含一个常数,但它没有正确添加。我使用了一个不同的、较小的数据集,它可以工作,但我现在的数据集不行。我当前的数据集大约是 1000 个观测值 x 2000 个变量。
# Multiple Linear Regression
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.api as sm
# Importing the dataset, y value is last column, other columns are X
dataset = pd.read_excel('sheet.xlsx')
X = dataset.iloc[:, :-1]
y = dataset.iloc[:, -1]
#Stats
X2 = sm.add_constant(X)
test = sm.OLS(y, X2)
test2 = test.fit()
print(test2.summary())
我的输出如下所示:
/home/chasel88/.local/lib/python3.7/site-packages/statsmodels/regression/linear_model.py:1648: RuntimeWarning: divide by zero encountered in true_divide
return 1 - (np.divide(self.nobs - self.k_constant, self.df_resid)
/home/chasel88/.local/lib/python3.7/site-packages/statsmodels/regression/linear_model.py:1649: RuntimeWarning: invalid value encountered in double_scalars
* (1 - self.rsquared))
/home/chasel88/.local/lib/python3.7/site-packages/statsmodels/regression/linear_model.py:1665: RuntimeWarning: divide by zero encountered in double_scalars
return self.ssr/self.df_resid
/home/chasel88/.local/lib/python3.7/site-packages/statsmodels/regression/linear_model.py:1578: RuntimeWarning: divide by zero encountered in double_scalars
return np.dot(wresid, wresid) / self.df_resid
OLS Regression Results
==============================================================================
Dep. Variable: Reverse Log R-squared: 1.000
Model: OLS Adj. R-squared: nan
Method: Least Squares F-statistic: 0.000
Date: Di, 09 Jul 2019 Prob (F-statistic): nan
Time: 16:36:58 Log-Likelihood: 31546.
No. Observations: 1097 AIC: -6.090e+04
Df Residuals: 0 BIC: -5.541e+04
Df Model: 1096
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Measurement1 2.1712 inf 0 nan nan nan
Measurement2 -0.1254 inf -0 nan nan nan
Measurement3 -1.0199 inf -0 nan nan nan
Measurement4 2.4232 inf 0 nan nan nan
Measurement5 0.7925 inf 0 nan nan nan
Measurement6 -0.6553 inf -0 nan nan nan
它没有显示 y 截距,但是当我在 sklearn 中运行这些数据时,我得到了截距。我只是想使用 statsmodels 以便我可以获得系数的 p 值。除了丢失的截距外,到处都写着“nan”,它表示除以零错误。有谁知道问题出在哪里?
【问题讨论】:
-
您有 1097 个观察值,但有 2000 个看似不共线的变量。完美的 1 和 0 Df 残差的 R 平方应该让你眼前一亮;您的数据严重过度拟合。
-
我想知道哪些预测变量对我的响应变量影响最大,p 值不错。我不需要它来很好地预测新数据。但我是新手,所以我不确定这是否是正确的方向。
-
基本上,我试图找出我的 2000 个变量中最有影响力和最重要的变量。我不确定这是否会导致过度拟合,但这是一个方面。
-
在这种情况下,您可能需要查看LASSO 回归。这是变量选择的一种方法。这可以通过statsmodels 或sklearn 来完成
标签: python scikit-learn statsmodels