如何创建循环以在模拟中生成增加的样本大小

时间:2018-05-28 18:09:55

标签: r simulation

我正在尝试创建一个模拟来计算二项式比例的置信区间。到目前为止,我有一个计算下限和上限的函数,我已经生成并存储了我想要的数据类型(在矩阵中,我不确定)。

如何创建一个生成不同大小样本的循环。我想测试公式在计算样本大小n = 10,11,12,......最多100的间隔时的表现。

到目前为止我的代码:

## functions that calculate lower and upper bounds
ll <- function(x, cl=0.95) { 
n <- length(x)
p.est <- mean(x)
z = abs(qnorm((1-cl)/2))
return((p.est)  - z*sqrt(p.est*(1-p.est)/n))
}

ul <- function(x, cl=0.95) { 
n <- length(x)
p.est <- mean(x)
z = abs(qnorm((1-cl)/2))
return((p.est)  + z*sqrt(p.est*(1-p.est)/n))
}

## my simulation for n=10 and 200 repetitions.

p <- 0.4
n <- 10
rep <- 200
dat <- rbinom(rep*n,1,p)
x <- matrix(dat, ncol=rep)
ll.res <- apply(x, 2, ll)
ul.res <- apply(x, 2, ul)
hits <- ll.res <= p & p <= ul.res
sum(hits==1)/rep

1 个答案:

答案 0 :(得分:0)

我不确定您要在不同的样本量之间比较哪些值。但我想将模拟包装在for和使用列表来存储结果应该有效:

nrep=200
hits=list()
value=NULL
ll.res = list()
ul.res = list()
ns = c(10:100)

for(i in 1:length(ns)){
  p <- 0.4
  n <- ns[i]
  rep <- 200
  dat <- rbinom(rep*n,1,p)
  x <- matrix(dat, ncol=nrep)
  ll.res[[i]] <- apply(x, 2, ll)
  ul.res[[i]] <- apply(x, 2, ul,cl=0.95)
  hits[[i]] <- ll.res[[i]] <= p & p <= ul.res[[i]]
  value[i] = sum(hits[[i]]==1)/rep

}