两侧 ks 测试循环,得到 p.value

two sided ks test loop, get p.value

我有一列数据,我从中抽取了 50% 的随机子样本。 我正在 运行 进行双边 ks 测试,以比较 50% 数据的分布与 100% 的数据,以查看分布是否仍然显着拟合。

为了实现我的目标,我想运行将其作为一个循环,比如说 1000,以便从 1000 个随机子样本中获得平均 p 值。这行代码为我的样本的 50% 的随机子集提供了单个 p 值:

dat50=dat[sample(nrow(dat),replace=F,size=0.50*nrow(dat)),]
ks.test(dat[,1],dat50[,1], alternative="two.sided")

我需要一行代码,它将 运行 这 1000 次保存结果(不同的)p 值,每次都保存在一个列中,然后我可以对其进行平均。我尝试开始工作的代码如下所示:

x <- numeric(100)
for (i in 1:100){
  x<- ks.test(dat[,7],dat50[,7], alternative="two.sided")
  x<-x$p.value
}

但是这不会存储多个 p 值

也试过这个:

get.p.value <- function(df1, df2) {
  x <- rf(5, df1=df1, df2=df2)
  p.value <- ks.test(dat[,6],dat50[,6], alternative="two.sided")$p.value
}
replicate (2000, get.p.value(df1 = 5, df2 = 10))

我希望这是清楚的,如果能帮助解决这个问题,我将不胜感激!

Q

在您的 for 循环中,您将在每次迭代中覆盖 x,这意味着您将只保存最后一次迭代的 p 值。试试这个:

x <- numeric(100)
for (i in 1:length(x))
    x[i] <- ks.test(dat[,17], dat[sample(nrow(dat), replace=F, size=0.5*nrow(dat)),7])$p.value

您可以使用 replicate 获得相同的结果:

 replicate(100, ks.test(dat[,7], dat[sample(nrow(dat), replace=F, size=0.5*nrow(dat)),7])$p.value)