在引导重采样研究中限制最小子组大小 - 为什么这种方法是错误的?

机器算法验证 置信区间 引导程序 模拟 重采样
2022-03-18 03:02:32

我目前正在做一个简单的重新抽样研究,比较不同的方法来生成线性回归模型的置信区间。我正在尝试跟随伯顿等人。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)。奇怪的是你没有引起注意。

我不是引导专家,但我认为答案是回到引导的原则。您应该在每个引导复制中执行的操作是 1) 以模仿(以保持独立性的方式)绘制原始样本的方式绘制引导样本,然后 2) 对引导样本执行任何估计技术要求,然后 3) 记录估计的结果。

要回答这个问题,我认为您需要仔细考虑原始样本的收集方式(以便您的引导程序正确模仿它)。此外,您需要考虑您的估计技术到底是什么

假设您正在收集原始数据。假设您到了数据收集的末尾。假设您注意到您只有两个女性。你会怎么做?如果这个问题的答案是“我会扔掉我的整个数据集并再次完成整个数据收集过程”,那么你的引导过程是完全正确的。

然而,我怀疑这是你会做的。这就是你的问题的答案。这就是为什么你正在做的事情是错误的。

也许你会继续收集更多数据,直到你有八名女性。如果是这样,则在引导采样步骤 (1) 中进行模仿。也许你会认为两个女性太少了,你会从分析中删除所有女性。如果是这样,那么在引导估计步骤(2)中模仿它。

另一种说法是,您应该考虑希望助推程序回答什么问题。如果您想回答“如果我一遍又一遍地进行实验,每次都盲目地运行完全相同的回归而不注意样本的样子,置信区间多久会覆盖真实参数值”,那么只需盲目地像你的同事告诉你的那样引导。如果您想回答“如果我一遍又一遍地进行实验,按照 Max Gordon 分析数据的方式分析数据,置信区间多久会覆盖真实参数值”这个问题,那么请按照我的建议进行操作。

如果你想让这项工作发表,就按照常规的方式去做:你的同事建议你做的事情。好吧,除非你能在 Biometrika 中找到与我上面所说的一致的论文。不幸的是,我不知道相关的文献,所以我无法帮助你。