Confidence-Interval

在引導重採樣研究中限制最小子組大小 - 為什麼這種方法是錯誤的?

  • September 22, 2013

我目前正在做一個簡單的重新抽樣研究,比較不同的方法來生成線性回歸模型的置信區間。我正在嘗試跟隨伯頓等人。al’s (2006) 的建議,我最感興趣的是置信區間如何覆蓋原始樣本的真實值(覆蓋率)。

由於一些置信區間是基於我認為的引導程序,基於這個 CV-question,因此使用引導程序重新採樣是不公平的,其中一個分類變量的類別少於 8 個人。因此,如果我得到一個包含該標準的樣本,我會重新取樣。我與之合作的一位統計學家告訴我,這個過程違反了分佈假設,這是一種不好的做法。不幸的是,他的論點並沒有說服我,因此我希望這裡有人可以幫助解釋我的邏輯缺陷。

在我看來,我永遠不會對只有 2 名女性和 23 名男性的樣本使用自舉,因為這兩名女性的貢獻不足以從自舉過程中產生合理的隨機性。我知道我不能對我丟棄的樣本說任何話,但是為什麼對滿足標準的樣本說些什麼是錯誤的呢?

小更新

在比爾有趣的回答之後,我只想澄清一點。原始樣本在每個類別中都有“足夠”,以允許抽取的樣本在每個類別中包含至少 8 個人。boostrap stat-function 總是相同的(我使用 Rboot包):

#' Gets the coefficients for the bootstrap function
#' 
#' This function also catches errors that may
#' occur in the lm() call and then returns a NA vector.
#' As I lack controle over the data this is necessary
#' since there can be unexpected problems with the 
#' lm() call.
#' 
#' @param formula The lm() formula
#' @param data The data set that is to be bootstrapped
#' @param indices The indices that the bootstrap
#'  provides the function see the library boot()
#'  function for details. If the function is used for
#'  the asymptotic confidence interval then the indices
#'  should be provided as a simple sequence - 1:nrow(data)
#' @param true_vals The true values. Only used so that
#'  the function can return a result that contains the
#'  same number of estimates even if some coefficients
#'  were missing for this bootstrapped data set
#' @return vector Returns the coefficients as a 
#'  vector, in case of missing those are marked as NA
#'  at the apropriate positions. 
bootstrap_lm <- function(data, indices, formula, true_vals) {
   d <- data[indices,]

   fit <- try(lm(formula, data=d), silent=TRUE)
   if ("try-error" %in% class(fit))
       return(rep(NA, times=length(true_vals)))

   ret <- coef(fit)

   # Sometimes not all options get an estimate 
   # as the bootstrap might be without those variables
   # therefore we need to generate empty values
   if (length(true_vals) > length(ret)){
       empty <- rep(NA, times=length(true_vals))
       names(empty) <- names(true_vals)
       empty[which(names(empty) %in% names(ret))] <- ret
       ret <- empty
   }

   return(ret)
}

正如@jbowman 在他的回答中評論的那樣 - 比較其中一個置信區間根據定義不起作用的情況是沒有意義的。我正在比較常規、穩健和自舉的置信區間,我希望比較盡可能公平。在我看來,比較一個類別中小於 8 的樣本應該會導致偏向於常規和穩健的置信區間。

我想我將不得不採用傳統的方法並跳過這個標準,否則我不會被發表 - 似乎如果是這樣的話,那麼統計界將會有文章偏向於自舉(在像我這樣的比較研究中) . 如果有人有一篇好論文可以支持我的方法,我將不勝感激。

這是一個有趣的問題(+1)。奇怪的是你沒有引起注意。

我不是引導專家,但我認為答案是回到引導的原則。您應該在每個引導複製中執行的操作是 1) 以模仿(以保持獨立性的方式)繪製原始樣本的方式繪製引導樣本,然後 2) 對引導樣本執行任何估計技術要求,然後 3) 記錄估計的結果。

要回答這個問題,我認為您需要仔細考慮原始樣本的收集方式(以便您的引導程序正確地模仿它)。此外,您需要考慮您的估計技術到底是什麼

假設您正在收集原始數據。假設您到了數據收集的末尾。假設您注意到您只有兩個女性。你會怎麼做?如果這個問題的答案是“我會扔掉我的整個數據集並再次完成整個數據收集過程”,那麼你的引導過程是完全正確的。

然而,我懷疑這是你會做的。這就是你的問題的答案。這就是為什麼你正在做的事情是錯誤的。

也許你會繼續收集更多數據,直到你有八名女性。如果是這樣,則在引導採樣步驟 (1) 中進行模仿。也許你會認為兩個女性太少了,你會從分析中刪除所有女性。如果是這樣,那麼在引導估計步驟(2)中模仿它。

另一種說法是,您應該考慮希望助推程序回答什麼問題。如果您想回答“如果我一遍又一遍地進行實驗,每次都盲目地運行完全相同的回歸而不注意樣本的樣子,置信區間多久會覆蓋真實參數值”,那麼只需盲目地像你的同事告訴你的那樣引導。如果您想回答“如果我一遍又一遍地進行實驗,按照 Max Gordon 分析數據的方式分析數據,置信區間多久會覆蓋真實參數值”這個問題,那麼請按照我的建議進行操作。

如果你想讓這項工作發表,就按照常規的方式去做:你的同事建議你做的事情。好吧,除非你能在 Biometrika 中找到與我上面所說的一致的論文。不幸的是,我不知道相關的文獻,所以我無法幫助你。

引用自:https://stats.stackexchange.com/questions/70693

comments powered by Disqus