複雑なモデリング手法が偏っているかどうかを調べるための次の方法の参照または名前を知っていますか?
- 元のデータセットにを適用します。そのパフォーマンスを測定します(例:回帰設定のR-2乗)。
- 応答変数をランダムに並べ替えて、新しいデータセットを取得します。を適用し、そのパフォーマンスを測定します。[観測が依存している場合、このステップはより複雑になります。]P '
が実質的にゼロのパフォーマンスと異なる場合、がバイアスされていると結論付けます。 T
リソースが許す場合、ステップ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は本質的に0のR二乗を与えました(期待どおり/望ましい)。