如何检查线性假设?

机器算法验证 回归 假设检验 模型 线性的
2022-04-07 15:53:08

目前,我正在尝试列出可用于验证效果线性度的不同方法。在模型(Y = b0 + b1.X + 等)中,我想知道假设 (X) 的线性是否可以接受。

到目前为止,我一直在做的是根据二次规范估计另一个模型(Y = b0 + b1.X + b2.X**2)和(1)查看二次项(b2)的重要性,以及(2) 最终执行对数似然比检验。

但是,我担心这种相对简单的方法在某些情况下会产生误导(特别是如果非线性模式不符合二次形状)。事实上,当我模拟将由 S 形曲线描述的数据时,这种简单的方法将无法拒绝线性假设。

您会推荐哪些方法(多项式规范 + 对数似然比检验除外)?理想情况下是测试 - 不是基于模拟的方法,也适用于非嵌套模型(与 LR 测试不同)。

我遇到了 Vuong 测试(https://en.wikipedia.org/wiki/Vuong%27s_closeness_test),但我相信在这个问题上还有更多的信息。谢谢你的帮助!

2个回答

如果您想查看 (的条件期望)之间的关系是否是线性的,在调整控制变量,一种简单的图形方法是使用以下方法创建一个加变量图程序。yx0x1,x2,,xp

首先,并从回归中获得残差然后,回归 X_0并从回归中获得残差yx1,x2,,xpϵ^yX0x1,x2,,xpϵ^x0

的散点图,并将非参数曲线(例如黄土)与线性回归线重叠。根据Frisch-Waugh 定理“长”回归完全相同的斜率非参数曲线将让您了解之间的关系在多大程度上可以近似为线性。ϵ^yϵ^x0x0,x1,,xpyx0

一些简单的 R 代码来演示:

data(mtcars)

# full model, with all control variables 
fullmod = lm(mpg ~ wt + vs + gear + am, mtcars)
coef(mod)[2]
>     wt 
> -3.786

# regress y on controls and x on controls, extract residuals
eps_y = lm(mpg ~ vs + gear + am, mtcars)$residuals
eps_x = lm(wt ~ vs + gear + am, mtcars)$residuals

# regress epsilon_y on epsilon_x, see the coef is the same as above
coef(lm(eps_y ~ eps_x))[2]
>  eps_y 
> -3.786

# make added variable plot
library(ggplot2)
qplot(x = eps_x, y = eps_y) + 
  geom_smooth(method = "lm", colour = "black", se= FALSE) + 
  geom_smooth(method = "loess", colour = "red", se = FALSE)

加变量图

正如@stephan-kolassa 提到的。添加的样条部分可能比二次项更有益,因为这不会明确确定模型的非线性。可以从那里执行似然比检验或 F 检验。

现在,我认为这种方法存在一些问题需要考虑。

  1. 该模型将测试 vsH0:Y=Xβ+ϵHa:Y=Xβ+f(x)+ϵ, 在哪里f(x)是样条模型。在这种情况下,你只能说数据没有提供非线性项的证据,它永远不会真正验证线性假设。

  2. 此外,可能存在模型可能永远不会真正线性的正态性问题测试。因此,就像测试正态性一样,测试无法拒绝真实假设的唯一原因是因为样本量不足,因为没有数据实际上是正常的。这同样适用于测试线性,线性是一个理论假设,没有拒绝可能是由于缺乏样本量而不是假设实际上是正确的。

  3. 最好的选择可能是通过模型选择将线性模型视为最佳模型。这可以通过 AIC/BIC(实际上非​​常擅长测试嵌套模型)或交叉验证或某种偏差度量(模型似乎在χ2它应该代表)。