运行循环以更改样本数量

时间:2018-08-15 07:51:04

标签: r loops

我已经为伽玛矩和对数正态分布设置了一些初始参数,并应用了Kolmogorov-Smirnov检验来获得p值。我的目的是要显示p值相对于N随N的变化情况。让我们说5到1000之间。我将如何实现?

mean <- 10
var <- 40
N <- 100
gamsample <- rgamma(N, shape=mean^2/var, rate=mean/var)
lnsample <- rlnorm(N, meanlog=log(mean)-log(1+mean^2/var)/2,
                          sdlog=sqrt(log(1+(mean^2/var))))

ks.test(gamsample, lnsample)$p.value

1 个答案:

答案 0 :(得分:6)

使用sapply()

mean <- 10
var <- 40
myP <- function(N) {
  gamsample <- rgamma(N, shape=mean^2/var, rate=mean/var)
  lnsample <- rlnorm(N, meanlog=log(mean)-log(1+mean^2/var)/2,
                     sdlog=sqrt(log(1+(mean^2/var))))

  ks.test(gamsample, lnsample)$p.value
}
N <- 5:1000
sapply(N, myP)

或者(更安全)vapply(N, myP, FUN.VALUE = 9.9)
如果希望将数据框作为结果,则可以执行以下操作:

results <- data.frame(n=N, pval=sapply(N, myP))

对于@AndreElrico在他的(已删除)答案中提出的情节:

ggplot2::ggplot(results, aes(x=n,y=pval)) + geom_point()