1

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

我希望这很清楚,我将不胜感激任何帮助解决这个问题!

4

1 回答 1

0

在您的 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

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

 replicate(100, ks.test(dat[,7], dat[sample(nrow(dat), replace=F, size=0.5*nrow(dat)),7])$p.value)
于 2016-05-16T09:05:03.427 回答