差异中位数的 Bootstrap 假设检验

机器算法验证 假设检验 引导程序 中位数 群体差异
2022-04-18 21:36:26

我没有找到任何差异中位数的引导假设检验示例。因此,我想建议我的方法。问题:您是否同意以下可重现的示例是检验差异中位数为 0 的原假设(与大于 0 的备择假设相反)的正确方法?

此外,我试图将其与引导假设测试的两条指南相关联。这篇论文与我在这里的方法不同,因为它不是计算 p 值,而是找到与某些显着性水平相对应的关键 t 值。尽管如此,我的方法似乎符合第一个准则:Resample fromθ^θ^(因为我在进行引导样本之前将差异转换为dd - median(d但是,我不明白如何合并第二条准则:基于自举分布的测试(θ^θ^)/σ^. 我会很高兴任何提示。


假设

H0:中位数(d)= 0

H1:中位数(d)> 0,

其中 d = x1 - x2 并且假定这些值是成对的。为了说明,数据样本可能如下所示,其中对于每个,id的对应值代表一对。x1x2

id     x1      x2      d
1   -0.58   -0.62   0.04
2    0.23    0.04   0.19
3   -0.79   -0.91   0.12
4    1.65    0.16   1.49
5    0.38   -0.65   1.03


方法说明

变换:为了在 H0 下采样,我首先d通过减去它们的中值来变换 的值。这确保了在转换后的值d_H0 = d - median(d)H0: median(d) = 0为真。

自举抽样:然后,我绘制R自举样本:我从d_H0替换中抽样并计算每个样本的中R位数,获得差异的中位数。

计算 p 值:R p 值计算为中位数大于median(d)1 个给定数据样本中差异的中位数的案例的百分比。添加了一个归一化常数(因此+1在分子和分母中)。


可重现的示例(在 R 中)

# -------------------------------------------------
# Function to get bootstrapped statistics t_star
# -------------------------------------------------
my_boot = function(d_H0, R){

    N = length(d_H0)
    t_star = numeric(R)

    for (i in 1:R){
        t_star[i] = median(sample(d_H0, size = N, replace = TRUE))
    }

    return(t_star)

}

# -------------------------------------------------
# Generate sample
# -------------------------------------------------
set.seed(1)
x1 = rnorm(100) + 0.05
x2 = rnorm(100)
d = x1 - x2
t = median(d)

# -------------------------------------------------
# Adjust sample to fulfill H0: median(d) = 0
# -------------------------------------------------
d_H0 = d - t

# -------------------------------------------------
# Conduct bootstrap sampling
# -------------------------------------------------
R = 5000
t_star = my_boot(d_H0, R)

# -------------------------------------------------
# Compute p-value
# -------------------------------------------------
p = (sum(t_star > t) + 1) / (R + 1)
p # 0.03
1个回答

Bonett & Price (2002) 为此提出了一种封闭形式的解决方案,因此不需要自举。至少,您可以将其与您的引导程序进行比较,以了解这两种方法达成一致的频率。

请原谅我冗长的代码;为了便于阅读,我做了很多评论并一步一步地做。

# test from table 3 of b&p 2002
x1 <- c(77, 87, 88, 114, 151, 210, 219, 246, 253, 262, 296, 299, 306,
        376, 428, 515, 666, 1310, 2611)
x2 <- c(59, 106, 174, 207, 219, 237, 313, 365, 458, 497, 515, 529,
        557, 615, 625, 645, 973, 1065, 3215)

# sort vectors
x1 <- sort(x1)
x2 <- sort(x2)

# get medians
x1_mdn <- median(x1)
x2_mdn <- median(x2)

# stuff to calculate variance of medians
x1_n <- length(x1)
x2_n <- length(x2)

x1_aj <- round((x1_n + 1) / 2 - x1_n ^ (1 / 2))
x2_aj <- round((x2_n + 1) / 2 - x2_n ^ (1 / 2))

z <- 1.855 # from table 1 of b&p 2002, see p. 376

# calculate variance
x1_var <- ((x1[x1_n - x1_aj + 1] - x1[x1_aj]) / (2 * z)) ^ 2
x2_var <- ((x2[x2_n - x2_aj + 1] - x2[x2_aj]) / (2 * z)) ^ 2

# contrast coefficients, such that its median(d) - median(dg)
x1_cj <- 1
x2_cj <- -1

# median difference
mdn_diff <- x1_mdn * x1_cj + x2_mdn * x2_cj

# standard error
mdn_diff_se <- (((x1_cj ^ 2) * x1_var) + ((x2_cj ^ 2) * x2_var)) ^ (1 / 2)

# 95% confidence interval
lb <- mdn_diff - 1.96 * mdn_diff_se
ub <- mdn_diff + 1.96 * mdn_diff_se

# within roundng error of p. 376 of b&p 2002
paste0(mdn_diff, " [", round(lb), ", ", round(ub), "]")

参考

Bonett, DG, & Price, RM (2002)。中位数线性函数的统计推断:置信区间、假设检验和样本量要求。心理学方法,7 (3), 370–383。doi:10.1037/1082-989x.7.3.370