回归中测试线性的难度


21

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

当前应用的实践是使用拟合优度测试和残差分析来检查数据模型的拟合度。几年前的某个时候,我在七个维度上建立了模拟回归问题,并控制了一定数量的非线性。拟合优度的标准测试直到非线性极端时才拒绝线性。

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

有没有人看到发表的模拟结果或理论论文来支持布里曼的主张?


1
极难判断,每个函数都在一定范围内接近线性;从泰勒级数分解中我们知道 为什么伯纳姆和安德森的信息标准方法不能很好地解决这个问题?
Patrick McCann

Answers:


11

我创建了一个模拟,该模拟可以回答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

1个/41个-1个

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

下三角形上的最低轨迹显示出相互作用(x.12)与因变量(y)之间基本没有线性关系,其他变量与(3 )之间的适度线性关系y。OLS结果证实:交互几乎没有意义:

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)

结果:

直方图

xsdbeta1个/41个/81个/16gamma1个/2

1个/321个/4xsdbetasd

简而言之,只要您进行正确的设置和解释,这样的模拟就可以证明您的喜好。 这表明,统计学家应该进行自己的探索,以适应他们所面临的特定问题,以便对他们使用的程序的功能和弱点有一个个人的深刻理解。


+1,仅供参考,我注意到您编写了自己的函数来标准化您的数据,您可能会发现scale对您有所帮助。
gung-恢复莫妮卡

谢谢,@ gung。我确定这样的功能已经存在了,但想不出它的名字。我R对这些指针还很陌生,并且总是很欣赏。
ub

1

不确定它是否可以最终解决该问题,但我将对此进行介绍。特别是第2点。另请参见本文附录A2中的讨论。


感谢您的关注,但是这些似乎是适合分布的应用程序,而不是OLS回归。
whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.