回归中测试线性的难度

机器算法验证 回归 拟合优度
2022-02-01 00:13:04

统计建模:两种文化Leo Breiman 写道

当前的应用实践是使用拟合优度检验和残差分析来检查数据模型的拟合。几年前,我建立了一个具有可控非线性量的七个维度的模拟回归问题。拟合优度的标准测试不会拒绝线性,直到非线性极端。

Breiman 没有给出他的模拟的细节。他引用了一篇论文,他说该论文为他的观察提供了理论依据,但该论文尚未发表。

有没有人看过已发表的模拟结果或理论论文来支持 Breiman 的主张?

2个回答

我创建了一个模拟来回答 Breiman 的描述,并且只发现了显而易见的结果:结果取决于上下文以及“极端”的含义。

可以说很多,但让我将其限制在一个示例,该示例通过易于修改的R代码进行,以供感兴趣的读者在自己的调查中使用。此代码首先设置一个设计矩阵,该矩阵由近似均匀分布的独立值组成,这些值近似正交(这样我们就不会遇到多重共线性问题)。它计算前两个变量之间的单个二次(即非线性)相互作用:这只是可以研究的多种“非线性”中的一种,但至少它是一种常见的、易于理解的。然后它将所有内容标准化,以便系数具有可比性:

set.seed(41)
p <- 7                                            # Dimensions
n <- 2^p                                          # Observations
x <- as.matrix(do.call(expand.grid, lapply(as.list(1:p), function(i) c(-1,1))))
x <- x + runif(n*p, min=-1, max=1)
x <- cbind(x, x.12 = x[,1]*x[,2])                 # The nonlinear part
x <- apply(x, 2, function(y) (y - mean(y))/sd(y)) # Standardization

对于基本 OLS 模型(没有非线性),我们必须指定一些系数和残差的标准偏差。这是一组单位系数和一个可比较的 SD:

beta <- rep(c(1,-1), p)[1:p]
sd <- 1

为了说明这种情况,这里是模拟的一个硬编码迭代。它生成因变量,汇总其值,显示所有变量(包括交互作用)的完整相关矩阵,并显示散点图矩阵。然后它执行 OLS 回归。在下文中,的交互系数明显小于任何其他系数(都等于),因此很难称其为“极端”:1/411

gamma = 1/4          # The standardized interaction term
df <- data.frame(x)
df$y <- x %*% c(beta, gamma) + rnorm(n, sd=sd)
summary(df)
cor(df)*100
plot(df, lower.panel=function(x,y) lines(lowess(y~x)), 
     upper.panel=function(x,y) points(x,y, pch=".", cex=4))
summary(lm(df$y ~ x))

让我们使用命令的输出来查看这些数据,而不是在这里遍历所有输出plot

SPM

下三角形上的 lowess 迹线显示交互作用 ( x.12) 和因变量 ( y) 之间基本上没有线性关系,其他变量和 之间存在适度的线性关系yOLS 结果证实:相互作用几乎不显着:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.0263     0.0828    0.32    0.751    
xVar1         0.9947     0.0833   11.94   <2e-16 ***
xVar2        -0.8713     0.0842  -10.35   <2e-16 ***
xVar3         1.0709     0.0836   12.81   <2e-16 ***
xVar4        -1.0007     0.0840  -11.92   <2e-16 ***
xVar5         1.0233     0.0836   12.24   <2e-16 ***
xVar6        -0.9514     0.0835  -11.40   <2e-16 ***
xVar7         1.0482     0.0835   12.56   <2e-16 ***
xx.12         0.1902     0.0836    2.27    0.025 *  

我将交互项的 p 值作为非线性测试:当这个 p 值足够低时(您可以选择多低),我们将检测到非线性。

(这里有一个关于我们到底在寻找什么的微妙之处。在实践中,我们可能需要检查所有 7*6/2 = 21 个可能的此类二次交互,以及可能还有 7 个二次项,而不是专注于单个项就像这里所做的那样。我们想要对这 28 个相互关联的测试进行更正。我没有在这里明确地进行这种更正,因为我显示的是 p 值的模拟分布。您可以直接从最后的直方图基于的重要性阈值。)

但是,我们不要只做一次这种分析;让我们做很多次,y根据相同的模型和相同的设计矩阵在每次迭代中生成新的值。为此,我们使用一个函数执行一次迭代并返回交互项的 p 值:

test <- function(gamma, sd=1) {
  y <- x %*% c(beta, gamma) + rnorm(n, sd=sd)
  fit <- summary(lm(y ~ x))
  m <- coef(fit)
  n <- dim(m)[1]
  m[n, 4]
}

我选择将模拟结果呈现为 p 值的直方图,改变gamma交互项的标准化系数。首先,直方图:

h <- function(g, n.trials=1000) {
  hist(replicate(n.trials, test(g, sd)), xlim=c(0,1), 
       main=toString(g), xlab="x1:x2 p-value")
}
par(mfrow=c(2,2)) # Draw a 2 by 2 panel of results

现在做这项工作。每次模拟 1000 次试验需要几秒钟(和四个独立的模拟,从给定的交互项值开始,每次连续减半):

temp <- sapply(2^(-3:0) * gamma, h)

结果:

直方图

从右下角往回看,这些图显示对于这个设计矩阵x这个标准误差偏差sd这些标准化系数beta的标准化交互作用(只是其他系数大小的四分之一) ) 可靠,超过 80% 的时间(使用 5% 的 p 值阈值——回想一下关于校正多重比较的简短讨论,我现在忽略了);它通常可以检测到的交互大小(大约 20% 的时间);的交互1/41/81/16,并且确实无法识别任何较小的交互。此处未显示gamma等于的直方图,这表明即使在校正多重比较时,几乎可以肯定会检测到如此大的二次交互。1/2

您是否将这些范围从的交互视为“极端”,取决于您的观点、回归情况(由和表示),以及有多少独立测试你想象的非线性,以及我非常尊敬的布雷曼的步伐,也许是关于你是否有一把斧头要磨。您当然可以使 OLS 难以检测非线性:只需膨胀,使其淹没非线性并同时进行许多不同的拟合优度测试。1/321/4xsdbetasd

简而言之,只要您设置它并以正确的方式解释它,这样的模拟就可以证明您喜欢的任何东西。 这表明个人统计学家应该进行自己的探索,适合他们面临的特定问题,以便对他们正在使用的程序的能力和弱点进行个人和深入的了解。

不确定它是否给出了问题的最终答案,但我会看看这个特别是第 2 点。另见论文附录 A2 中的讨论