Выберите образец случайным образом и используйте его для генерации 1000 образцов начальной загрузки - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы сгенерировать 1000 выборок размером 25 из стандартного нормального распределения, рассчитать дисперсию каждого и создать гистограмму.У меня есть следующее:

samples = replicate(1000, rnorm(25,0,1), simplify=FALSE)
hist(sapply(samples, var))

Затем я бы хотел случайным образом выбрать один образец из этих 1000 образцов и взять 1000 бутстрапов из этого образца.Затем рассчитайте дисперсию каждого и постройте гистограмму.Пока у меня есть:

sub.sample = sample(samples, 1)

Тогда я застрял, я знаю, что цикл для начальной загрузки необходим здесь, поэтому у меня есть:

rep.boot2 <- numeric(lengths(sub.sample))
for (i in 1:lengths(sub.sample)) {
   index2 <- sample(1:1000, size = 25, replace = TRUE)  
   a.boot <- sub.sample[index2, ]  
   rep.boot2[i] <- var(a.boot)[1, 2]  
}

, но я запускаювыше выдает ошибку «неверное количество измерений».Какая часть вызывает ошибку?

1 Ответ

0 голосов
/ 01 марта 2019

Я вижу 2 проблемы здесь.Одна из них заключается в том, что вы пытаетесь использовать sub.sample как вектор, но на самом деле это список длиной 1.

a.boot <- sub.sample[index2, ]  

Чтобы исправить это, вы можете изменить

sub.sample = sample(samples, 1)

до

sub.sample = as.vector(unlist(sample(samples, 1)))

Вторая проблема заключается в том, что вы генерируете выборку из 25 индексов от 1 до 1000

index2 <- sample (1: 1000, size = 25,replace = TRUE) </p>

, но затем вы пытаетесь извлечь эти индексы из списка длиной только 25. Таким образом, вы получите в основном значения NA в .boot.

Если японять, что вы хотите сделать правильно, тогда это должно работать:

samples = replicate(1000, rnorm(25,0,1), simplify=FALSE)
hist(sapply(samples, var))

sub.sample = as.vector(unlist(sample(samples, 1)))
rep.boot2=list()
for (i in 1:1000) {
  index2 <- sample(1:25, size = 25, replace = TRUE)  
  a.boot <- sub.sample[index2]  
  rep.boot2[i] <- var(a.boot)
}
...