我有一个矩阵,其中每一行都是来自分布的样本。我想ks.test
在每种情况下使用并保存测试统计数据对分布进行滚动比较。从概念上实现这一点的最简单方法是使用循环:
set.seed(1942)
mt <- rbind(rnorm(5), rnorm(5), rnorm(5), rnorm(5))
results <- matrix(as.numeric(rep(NA, nrow(mt))))
for (i in 2 : nrow(mt)) {
results[i] <- ks.test(x = mt[i - 1, ], y = mt[i, ])$statistic
}
但是,对于单个示例,我的真实数据有约 400 列和约 300,000 行,而且我有很多示例。所以我希望这很快。Kolmogorov-Smirnov 检验在数学上并不是那么复杂,所以如果答案是“实现它Rcpp
”,我会勉强接受,但我会有点惊讶——在一对上计算已经非常快了在 R。
我尝试过但无法正常工作的方法:dplyr
using rowwise/do/lag
、zoo
using rollapply
(这是我用来生成分布的方法)和data.table
循环填充 a (编辑:这个有效,但仍然很慢)。