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