您是否知道以下用于调查复杂建模技术是否存在偏差的方法的参考或名称?
- 将应用于原始数据集。测量其性能(例如回归设置中的 R 平方)。
- 随机排列响应变量以获得新的数据集。应用并测量其性能。[如果观察结果是相关的,这一步会更复杂。]
如果与零性能有很大不同,我们得出结论是有偏差的。
如果资源允许,可以重复步骤 2,这将导致性能度量的排列零分布。但是在我的应用程序中,由于资源问题,我不能这样做。
我记得很清楚,有人使用这种“重新洗牌”技巧来调查留一法交叉验证的偏见(在某些情况下)。然而,我不知道他是否在我的情况下,他可以只重复整个过程一次。
R中的一个例子展示了朴素向后选择的“力量”:
# Generate random data set. Only random performance is expected.
n <- 100
p <- 30
set.seed(7567)
y <- rnorm(n)
X <- rnorm(n*p)
dim(X) <- c(n, p)
data <- data.frame(y, X)
# Modelling technique: backward selection with OLS
T <- function(data) {
step(lm(y ~ ., data = data), trace = 0)
}
# Performance: R-squared
P <- function(fit) {
summary(fit)$r.squared
}
# Step 1: Compute performance on original data. Happily publish high R-squared...
P(T(data)) # 0.240405
# Step 2: Your mean colleague reshuffles response and gets also R-squared far away from 0
data$y <- data$y[sample(n)]
P(T(data)) # 0.1925726
示例结论:所选择的建模技术极易过度拟合,至少在此特定设置中是这样。
一些背景
我曾经使用这种重新洗牌技巧来检查我是否正确实施了一些繁琐的建模过程的交叉验证。在随机排列下,CV 给出的 R 平方基本上为 0(如预期/期望的那样)。