“重新洗牌技巧”的名稱(隨機排列數據集以估計估計器的偏差)
您是否知道以下方法的參考或名稱來調查復雜的建模技術有偏見嗎?
- 申請到原始數據集。測量其性能(例如回歸設置中的 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(如預期/期望的那樣)。
為了回答標題中的問題,AFAIK 這被稱為置換測試。如果這確實是您正在尋找的東西,那麼它不會像問題中描述的那樣工作。
(有點)簡潔:排列測試確實通過改組“列”之一併執行感興趣的測試或計算來工作。然而,訣竅是這樣做很多次,每次都打亂數據。在小型數據集中,甚至可以執行所有可能的排列。在大型數據集中,您通常會執行您的計算機可以處理的排列量,但這些排列量足以獲得感興趣的統計數據的分佈。
最後,您可以使用此分佈來檢查,例如,在 95% 的分佈中,兩組之間的平均差是否 > 0。簡而言之,檢查分佈的哪一部分高於/低於某個臨界值的後一步是假設檢驗的“p值”。
如果這與原始樣本中的 p 值有很大不同,我不會說感興趣的測試/統計數據有問題,而是您的樣本包含特定影響測試結果的某些數據點。這可能是偏差(由於包含一些奇怪的情況而導致的選擇偏差;特定情況下的測量錯誤等),或者可能是測試的不正確使用(例如違反假設)。
有關詳細信息,請參閱https://en.wikipedia.org/wiki/Resampling_(statistics)
此外,如果您想了解更多關於如何將置換測試與變量選擇相結合的信息,請參閱@amoeba對此問題的回答。