statsmodels 线性回归和 pandas df.corr() 函数之间的不同 p 值

different p value between statsmodels linear regression and pandas df.corr() function

我正在研究房价预测数据集。它有 13 个特征,我使用的是多元线性回归模型。当我检查特征和目标值的相关性时,它显示 df.corr() 方法和 Summary() 函数的奇怪结果。

对于少数特征,p 相关系数的值很低。但是,如果我在回归后使用 summary() 函数,这些特征具有不同的 p 值。具有最低相关系数值的特征没有最高的 p 值。或者这两个不同函数得到的相关系数和p值都没有similarity/correlation。可能出了什么问题?

相关系数

correlation_matrix = BostonHousing_df.corr().round(2)

对于 p 值

X=BostonHousing_df.iloc[:,:-1].values
y=BostonHousing_df.iloc[:,-1].values
X_opt = X1[:,[0,1,2,3,4,5,6,7,8,9,10,11,12,13]]
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()
regressor_OLS.summary()

因为 dataframe.corr() 方法默认使用 pearson 相关。这两个函数应该给出相似的 results.but 而没有发生。下面是结果的两个图像。

pvalues

CorelationCoeff

如果您从图像中观察到 2 个结果,则相关系数最低的特征没有高 p 值。

这里的问题是,当您检查成对的 Pearson 相关性时,您没有考虑所有其他变量的影响。因此,您不能指望 Pearson 与目标的相关性与回归模型中的 p 值之间存在直接关系。

这里有一个极端的例子来说明这一点:

假设我们有一个目标 c,它由两个特征 a+b 的总和定义。假设您有以下训练集:

a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]    
b = [4, 3, 2, 1, 0, 6, 5, 4, 3, 2]  
c = [5, 5, 5, 5, 5, 7, 7, 7, 7, 7]

注意这里,即使 a+b 完美地给你 c,如果你只是检查 ac 之间的相关性,你会得到 0!

numpy.corrcoef(a, c)  
> array([[1., 0.],
         [0., 1.]])  

但是,如果将这些数据插入线性回归估计器,您当然会得到 a 的极小 p 值。

因此,如您所见,与目标的成对相关性小并不一定意味着缺少 effect/small p 值。