如何实现函数 bootstrap 以获得关于统计检验观察次数的幂图

How to implement the function bootstrp to obtain a plot of the power regarding the number of observations of a statistical test

我正在对必须执行驾驶任务的人类受试者进行实验。他们的表现是通过测量他们的轨迹和天空中目标中心之间的距离来评估的。我有 8 个测试条件科目和 8 个控制条件科目。我的数据是非参数和独立的。我正在使用 Matlab (ranksum) 中的 Wilcoxon Rank Sum 检验分析统计差异。

但是,我想知道我的测试的威力是多少,以及我需要多少科目才能拥有给定的威力。由于我的数据不服从正态分布(非参数),我无法使用 Matlab 函数 sampsizepwr。

我在一些研究中发现我们可以进行 bootstrap 分析以获得关于受试者数量的功效图。 Matlab 有函数 bootstrap 但我不知道如何实现它。有谁知道如何使用 bootstrap 和 Matlab 来计算作为非参数和独立数据样本大小函数的功效?

感谢您的帮助!

卡琳娜

假设您有 2 个样本 g1g2,您会 运行:

p = ranksum(g1,g2)
N = 100;
bootstat = bootstrp(N,@ranksum,g1,g2);

其中 N 是采样尝试的次数。 bootstat 是所有 N 个样本的 ranksum 统计数据 p-value 的列表。检验的功效是您的检验在这些样本中拒绝 H0 的概率:

pow = sum(bootstat<alpha)/N

其中 alpha 是显着性水平(通常为 5%)。


编辑:

为了使事情更具体,我模拟了一些与您的具有相似属性的数据:

smpsz = [4 8 20 200]; % sample size
for n = 1:numel(smpsz)
    g1 = rand(1,smpsz(n)).*repelem([3.36 6.72],smpsz(n)/2)+repelem([0 3.36],smpsz(n)/2);
    g2 = rand(1,smpsz(n)).*repelem([8.13 8.13*2],smpsz(n)/2)+repelem([0 8.13],smpsz(n)/2);
    N = [5 10 50 100 500]; % no. of tries
    for k = 1:numel(N)
        bootstat2 = bootstrp(N(k),@ranksum,g2,g1);
        bootstat1 = bootstrp(N(k),@ranksum,g1,g2);
        pow(1,k) = sum(bootstat1<0.05)/N(k);
        pow(2,k) = sum(bootstat2<0.05)/N(k);
    end
    disp(smpsz(n))
    disp(pow)
end

结果:

 4
      0.2          0.2         0.02         0.05        0.058
        0          0.2         0.06         0.05        0.072
 8
      0.6          0.3          0.7         0.66        0.552
      0.6          0.5         0.56         0.58          0.6
20
        1          0.8          0.9         0.86        0.908
        1          0.7         0.86         0.88        0.898
200
 1     1     1     1     1
 1     1     1     1     1

你可以在上面看到 pow 并没有沿着行变得更好(更高),即 N 更大,而且每两个相邻行之间也没有显着差异,即组的顺序无关紧要。但是,它确实随着样本量 (smpsz) 从 4 增加到 200 而增加。