概述
许多研究人员已经讨论了逐步回归的许多问题(例如,第 4.3 节中的@FrankHarrell (2001))。Harrell 特别指出,“它产生R2偏高的值”(第 56 页)。根据您假设的估计值,该语句有几种可能的解释。如果您假设估计值是某种形式的ρ2,那么可以说:虽然这对于数据生成过程、样本大小、预测变量集和预测变量条目的 p 值标准的某些组合是正确的,但并非在所有情况下都是正确的。
具体来说,R2在估计时,逐步回归并不固有地偏向特定方向ρ2. 逐步回归中预测变量输入的 p 值标准可用于调节逐步回归的期望值R2(即,估计量ρ2)。具体来说,当 entry 的 p 值接近于零时,任何预测变量被包含在最终模型中的概率接近于零,并且 stepwise 的期望值R2将接近零。当输入的 p 值为 1 时,所有预测变量都将被保留,并逐步R2将显示相同的偏差R2显示所有预测变量。偏差与条目的 p 值单调相关。因此,将有一个进入的 p 值,这会导致无偏估计ρ2.
我在不同的条件下运行了一些模拟。产生近似无偏估计的预测变量输入的 p 值通常介于 0.05 和 0.0001 之间。但是,我还没有阅读任何明确探索这一点的模拟或就逐步发布的预期偏差提供建议R2使用给定的条目 p 值和给定数据特征的值。
也就是说,出于实际目的,调整R2专门设计用于估计ρ2. 因此,它更适合于估计ρ2而不是仅仅希望逐步回归中进入的 p 值恰好是正确的,以产生近似无偏的估计。
模拟
以下模拟有四个不相关的预测变量,其中总体 r 平方为 40%。两个预测变量各解释 20%,另外两个预测变量解释 0%。模拟生成 1000 个数据集,并估计逐步回归 r-square 作为每个数据集的百分比。
# source("http://bioconductor.org/biocLite.R")
# biocLite("maSigPro") # provides stepwise regression function two.ways.stepfor
library(maSigPro)
get_data <- function(n=100) {
x1 <- rnorm(n, 0, 1)
x2 <- rnorm(n, 0, 1)
x3 <- rnorm(n, 0, 1)
x4 <- rnorm(n, 0, 1)
e <- rnorm(n, 0, 1)
y <- 1 * x1 + 1 * x2 + sqrt(3) * e
data <- data.frame(y, x1, x2, x3, x4)
data
}
get_rsquare <- function(x, alpha=.05) {
fit <- two.ways.stepfor(x$y, subset(x, select=-y), alfa=alpha)
class(fit) <-'lm'
summary.lm(fit)$r.square * 100
}
以下代码返回 r-square,其 alpha 为 .01、.001、.0001 和 .00001。
set.seed(1234)
simulations <- 1000
datasets <- lapply(seq(simulations), function(X) get_data(n=100))
rsquares01 <- sapply(datasets, function(X) get_rsquare(X, alpha=.01))
rsquares001 <- sapply(datasets, function(X) get_rsquare(X, alpha=.001))
rsquares0001 <- sapply(datasets, function(X) get_rsquare(X, alpha=.0001))
rsquares00001 <- sapply(datasets, function(X) get_rsquare(X, alpha=.00001))
以下结果表明了五个 alpha 条目中的每一个的偏差。请注意,我已将 r-square 乘以 100,以便更容易看到差异。
mean(rsquares01) - 40
mean(rsquares001) - 40
mean(rsquares0001) - 40
mean(rsquares00001) - 40
sd(rsquares01)/sqrt(simulations) # approximate standard error in estimate of bias
结果表明,0.01 和 .001 条目的 alpha 导致正偏差,0.0001 和 .00001 条目的 alpha 导致负偏差。因此,大概 0.0005 左右的 alpha 将导致无偏逐步回归。
> mean(rsquares01) - 40
[1] 1.128996
> mean(rsquares001) - 40
[1] 0.8238992
> mean(rsquares0001) - 40
[1] -0.9681992
> mean(rsquares00001) - 40
[1] -5.126225
> sd(rsquares01)/sqrt(simulations) # approximate standard error in estimate of bias
[1] 0.2329339
我从中得出的主要结论是,逐步回归并非天生就偏向特定方向。也就是说,除了一个预测变量输入的 p 值之外,它至少会有些偏差。我接受@Peter Flom 的观点,在现实世界中我们不知道数据生成过程。然而,我想更详细地探索这种偏差如何随着 n、输入的 alpha、数据生成过程和逐步回归过程(例如,包括向后传递)而变化,可以大大有助于理解这种偏差。
参考
- 哈勒尔,FE(2001 年)。回归建模策略:应用于线性模型、逻辑回归和生存分析。施普林格。