Одинаковые значения, полученные из случайных выборок из равномерного распределения в dplyr - PullRequest
0 голосов
/ 20 февраля 2020

Это продолжение предыдущего вопроса. Мой вопрос не был полностью сформулирован и, следовательно, не полностью ответил на мой последний пост. Извините, я новичок в использовании переполнения стека.

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

Сначала нас просят сгенерировать тиббл из 1000 случайных выборок из равномерного распределения:

2a.  Create a new tibble called uniformDf containing a variable called unifSamples that contains 10000 random samples from a uniform distribution.  You should use the runif() function to create the uniform samples. {r 2a}

uniformDf <- tibble(unifSamples = runif(1000))

Все идет хорошо.

Затем нас просят l oop через этот кусок 1000 раз, каждый раз выбирая 20 случайных выборок, вычисляя среднее значение и сохраняя его в таблицу:

2c.  Now let's loop through 1000 times, sampling 20 values from a uniform distribution and computing the mean of the sample, saving this mean to a variable called sampMean within a tibble called uniformSampleMeans. {r 2c}

unif_sample_size = 20 # sample size
n_samples = 1000 # number of samples

# set up q data frame to contain the results
uniformSampleMeans <- tibble(sampMean=rep(NA,n_samples))

# loop through all samples.  for each one, take a new random sample, 
# compute the mean, and store it in the data frame

for (i in 1:n_samples){
  uniformSampleMeans$sampMean[i] <- uniformDf %>%
  sample_n(unif_sample_size) %>%
  summarize(sampMean = mean(sampMean))
}

Все это работает, я верю, пока не посмотрю на свой uniformSampleMeans стол. , Что выглядит следующим образом:

1   0.471271611726843
2   0.471271611726843
3   0.471271611726843
4   0.471271611726843
5   0.471271611726843
6   0.471271611726843
7   0.471271611726843
...
1000    0.471271611726843

Все значения идентичны! У кого-нибудь есть понимание, почему мой вывод такой? Я был бы менее обеспокоен, если бы они варьировались на +/- 0,000x значений, видя, как это происходит из распределения, которое варьируется от 0 до 1, но все значения идентичны даже до 15-го знака после запятой! Любая помощь очень ценится!

1 Ответ

1 голос
/ 20 февраля 2020

Следующее выбирает случайные unif_sample_size строки и дает mean

library(dplyr)
uniformDf %>% sample_n(unif_sample_size) %>% pull(unifSamples) %>% mean
#[1] 0.5563638

Если вы хотите сделать это n раз, используйте replicate и повторите это n раз

n <- 10
replicate(n, uniformDf %>%
               sample_n(unif_sample_size) %>%
               pull(unifSamples) %>% mean)
#[1] 0.5070833 0.5259541 0.5617969 0.4695862 0.5030998 0.5745950 0.4688153 0.4914363 0.4449804 0.5202964
...