Как создать цикл для генерации увеличивающихся размеров выборки в симуляции - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь создать симуляцию для вычисления доверительного интервала для биномиальной пропорции.Пока у меня есть функция, которая вычисляет нижнюю и верхнюю границы, и я сгенерировал и сохранил тип данных, которые я хочу (в матрице, я не уверен в этом).

Как я могу создатьцикл, который генерирует образцы с различными размерами.Я хотел бы проверить, как работает формула при расчете интервалов с размерами выборки 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 голосов
/ 28 мая 2018

Я не уверен, какие значения вы хотите сравнить для разных размеров выборки.Но я предполагаю, что завершение вашей симуляции в 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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...