检查线性回归模型的线性?

数据挖掘 预测建模 线性回归 相关性 共线性
2022-03-08 15:01:53

我已经读到与多元线性回归模型相关的各种假设,您应该在对模型结果过于兴奋之前检查/验证这些假设。

其中之一是线性假设。我知道你会根据自变量绘制因变量并视觉检查线性,但是有没有更科学的方法来做到这一点?

我有下面的两个图。看第一个,我可以通过删除异常值看到一些线性。然而,第二个要困难得多。我可以*也许*看到一些东西,但我不确定这是否是我的眼睛在欺骗我。

在此处输入图像描述

在此处输入图像描述

如果我确定第二个图不满足线性,我该怎么办?从模型中排除特征?

2个回答

我喜欢带有回归样条的 GAM(广义加法模型):

# Load data
library(ISLR)
a = Auto

# Run GAM with splines
library(gam)
g = gam(mpg~s(displacement,5)+s(horsepower,5),data=a)
plot(g, se=T)

在此处输入图像描述

结果(绘图)向您表明,displacement对于较低的值(< 250 左右),可以很好地近似于线性函数。但是,大约 250 处有一个“扭结”,因此总体而言,这里的线性近似不是很好。

有关详细信息,请参阅ISL 第 7 章。还有PythonR实验室,您可以在其中查看代码详细信息。

有关更多详细信息,另请参阅R 中的此示例和模拟数据。

或者,查看回归后的 Q-Q 图,例如在 R 中:

l = lm(mpg~s(displacement,5)+s(horsepower,5),data=a)
plot(l)

确定 2 列是否具有线性关系的一种常用指标是 R-Squared。您可以使用这样的函数来计算值。

rsq <- function(x, y) 摘要(lm(y~x))$r.squared rsq(obs, mod)

值越接近 1,关系越线性。

用于测量 2 个变量(线性或其他)之间相关性的类似指标是 Pearson 相关性 R

cor_p <- 函数 (x, y) cor(x, y) ^ 2

绝对值越接近1(也可以是负数),关系越强。这在许多情况下都很有用。

其他要考虑的指标是 MSE(均方误差)或 RMSE(均方根误差)

如果指标值较低,您还可以查看转换其中一列,看看转换后的列是否比原始列更线性相关。一些常见的转换是 log()、sqrt()、exp() 等。

此外,某些模型通常可以按原样处理数据,无需使用转换。这方面的一个例子是任何随机森林或决策树模型。在任何情况下,仅仅因为数据不具有线性关系而排除数据通常不是最佳解决方案,因为您可能会消除一些方差。删除特征的一些正当理由是与响应的低方差或低相关性、稀疏/缺失等。如果数据无助于改善结果,模型可以选择忽略数据。