从KS测试中找到最大D统计量的位置

时间:2014-12-01 17:14:31

标签: r

我正在使用KS测试比较两种不同的经验累积分布函数,我想提取测试统计量最大值的位置(在ECDF中)。

问题:使用R,有没有一种方便的方法可以从ks.test函数或其他方法中提取它?

感谢所有评论。

1 个答案:

答案 0 :(得分:5)

您似乎无法从ks.test的输出中提取这样的位置(可能不是唯一的,BTW),但通过模拟密钥计算,您可以获得答案:

compare <- function(x, y) {
  n <- length(x); m <- length(y)
  w <- c(x, y)
  o <- order(w)
  z <- cumsum(ifelse(o <= n, m, -n))
  i <- which.max(abs(z))
  w[o[i]]
}

z <- ...的计算来自ks.test来源,而最后两行(相当清楚)找到达到最大偏差的位置。

例如,让我们生成两个数据集并进行比较:

set.seed(17)
x <- rnorm(30)
y <- rnorm(20, sd=2/3)
u <- compare(x,y)

报告的u值为0.04946235。要查看这是否正确,请根据ECDF和ks.test

的输出进行检查
e.x <- ecdf(x)
e.y <- ecdf(y)
abs(e.x(u) - e.y(u))
ks.test(x,y)$statistic

两种情况下的输出均为0.4166667,表示完全一致。情况图将澄清正在发生的事情:

plot(e.x, col="Blue", main="ECDF", xlab="Value", ylab="Probability")
plot(e.y, add=TRUE, col="Red")
lines(c(u,u), c(0,1), col="Gray")
lines(c(u,u), c(e.x(u), e.y(u)), lwd=2)

它显示了两个ECDF并用compare(即u)标记了一条垂直线所在的位置:它应该表示两个图形达到最大垂直间距的位置。 / p>

Figure