r-双侧ks测试循环,得到p值



我有一列数据,我从中抽取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)

相关内容

  • 没有找到相关文章

最新更新