你能计算出 R 中 Kolmogorov-Smirnov 检验的功效吗?

机器算法验证 r 统计能力 kolmogorov-smirnov 测试
2022-03-03 01:34:32

是否可以对 R 中的 2 面 Kolmogorov Smirnov 检验进行功效分析?

我正在使用 ks.test() 测试两个经验分布是否不同,并希望添加功率分析。

我无法在 R 中找到任何用于 KS 测试的内置功率分析。有什么建议吗?

编辑:这些是随机生成的分布,非常接近我的数据(具有真实样本大小和估计的指数分布衰减率)

set.seed(100)
x <- rexp(64, rate=0.34)
y <- rexp(54,rate=0.37)

#K-S test: Do x and y come from same distribution?
ks.test(x,y)

这些数据是对两个不同组的体型的测量。我想证明这两个群体的分布基本相同,但一位合作者问我是否有能力根据样本量说出这一点。我从这里的指数分布中随机抽取,但这些接近真实数据。

到目前为止,我已经说过基于双边 KS 测试的这些分布没有显着差异。我还绘制了两个分布。考虑到 x 和 y 的样本量和衰减率,我如何证明我有能力做出这样的陈述?

2个回答

寻找针对指数规模转移替代方案的能力相当简单。

但是,我不知道您应该使用数据中计算出的值来计算功率可能是多少。这种事后的权力计算往往会导致违反直觉(并且可能具有误导性)的结论。

权力和显着性水平一样,是你在事前处理的现象;您将使用先验理解(包括理论、推理或任何先前的研究)来决定要考虑的一组合理的替代方案和理想的效果大小

您还可以考虑各种其他替代方案(例如,您可以将指数嵌入伽马族中,以考虑或多或少偏斜情况的影响)。

人们可能试图通过功效分析来回答的常见问题是:

1)对于给定的样本量,在某些效应量或一组效应量*下的功效是多少?

2) 给定样本大小和功效,可检测到多大的影响?

3) 给定特定效应大小的所需功效,需要多大的样本量?

*(这里的“效果大小”是泛指的,例如,可能是特定的均值比率或均值差异,不一定是标准化的)。

显然,您已经有了样本量,因此您不在情况 (3) 中。您可以合理地考虑案例 (2) 或案例 (1)。

我建议案例(1)(这也提供了一种处理案例(2)的方法)。

为了说明案例 (1) 的方法并了解它与案例 (2) 的关系,让我们考虑一个具体示例,其中:

  • 规模转移替代方案

  • 指数种群

  • 64 和 54 两个样本中的样本量

因为样本大小不同,我们必须考虑其中一个样本中的相对散布既小于 1 又大于 1 的情况(如果它们的大小相同,对称性考虑可以只考虑一侧)。但是,因为它们的大小非常接近,所以效果非常小。在任何情况下,固定其中一个样本的参数并改变另一个。

所以一个人做的是:

预先:

choose a set of scale multipliers representing different alternatives
select an nsim (say 1000)
set mu1=1

要进行计算:

for each possible scale multiplier, kappa 
  repeat nsim times
    generate a sample of size n1 from Exp(mu1) and n2 from Exp(kappa*mu1)
    perform the test
  compute the rejection rate across nsim tests at this kappa

在 R 中,我这样做了:

alpha = 0.05
n1 = 54
n2 = 64
nsim = 10000
s = c(1.1,1.2,1.5,2,2.5,3) # set up grid for kappa
s = c(1/rev(s),1,s)        #  also below and at 1
rr = array(NA,length(s))   # to hold rejection rates

for(i in seq_along(s)) rr[i]=mean(replicate(nsim,
                                    ks.test(rexp(n1,1),rexp(n2,s[i]))$p.value)<alpha
                                 )

plot(rr~s,log="x",ylim=c(0,1),type="n") #set up plot
points(rr~rev(s),col=3) # plot the reversed case to show the (tiny) asymmetry+noise
points(rr~s,col=1) # plot the "real" case last 
abline(h=alpha,col=8,lty=2) # draw in alpha

这给出了以下功率“曲线”

在此处输入图像描述

x 轴是对数刻度,y 轴是拒绝率。

这里很难说,但左边的黑点比右边略高(也就是说,当较大的样本具有较小的比例时,功率会略微增加)。

使用逆正态 cdf 作为拒绝率的变换,我们可以使变换后的拒绝率与 log kappa 之间的关系(kappas在图中,但 x 轴是 log-scaled)非常接近线性(除了接近 0 ),并且模拟的数量足够高,以至于噪音非常低——我们可以忽略它就目前的目的。

所以我们可以只使用线性插值。下面显示的是样本大小下 50% 和 80% 功效的近似效应大小:

在此处输入图像描述

另一边的效果大小(较大的组具有较小的规模)仅略微偏离(可以拾取较小的效果大小),但差别不大,所以我不会强调这一点。

所以测试会发现很大的差异(从比例为 1),但不会很小。


现在发表一些评论:我不认为假设检验与感兴趣的潜在问题特别相关(它们是否非常相似?),因此这些功效计算并没有告诉我们与该问题直接相关的任何内容。

我认为您通过在操作上预先指定您认为“基本相同”的实际含义来解决这个更有用的问题。- 合理地追求统计活动 - 应该导致对数据进行有意义的分析。

由于 Kolmogorov-Smirnov 是非参数的,因此根据定义,不可能有适用的功率分析。要进行某种估计,您需要假设一个背景模型(从而从非参数世界转移......)并使用它来计算以下之一:样本大小、MDE 或功率(即,您修复/选择两个并计算第三个)。