我正在使用KS检验比较两个不同的经验累积分布函数,并且我想提取最大检验统计量所在的位置(在ECDF中)。
问题:使用R,是否有便捷的方法可以从ks.test函数中提取出来?
感谢您的所有评论。
最佳答案
您似乎无法从ks.test
的输出中提取出这样的位置(可能不是唯一的,顺便说一句),但是通过模拟密钥计算,您可以获得答案:
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
)找到的位置:应该指示两个图达到其最大垂直距离的位置。关于r - 从KS测试中找到最大D统计量的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27233738/