У вас есть самонастраиваемый объект данных, но вы хотите, чтобы сумма наблюдений за испытание не была общей совокупностью в rstudio - PullRequest
1 голос
/ 19 июня 2020
• 1000
heads50 <- replicate(50, sample(0:1, 4, TRUE)) %>% sum()

Однако, когда я запускаю функцию суммы, она дает мне общее совокупное количество орлов по всем повторениям этого эксперимента, а не результат каждого испытания (т.е. сколько орлов при подбрасывании монеты 4 раза за испытание - это то, что я хочу знать, а не только общее число, чтобы я мог построить вероятность позже) головы v 2 головы v 3 головы v 4 головы из четырех в испытании) вот так:

data50 <- tibble(heads = heads50) %>% 
group_by(heads) %>% 
summarise(n = n(), p=n/50)

Проблема в том, что он не делает этого, когда я пытаюсь создать гистограмму, а просто дает мне сумму общая вероятность с одной полосой:

    ggplot(data50, aes(x = heads, y = p)) +
  geom_bar(stat = "identity", fill = "green") +
  labs(x = "Number of Heads", y = "Probability of Heads in 4 flips(p)") +
  theme_minimal()

Кто-нибудь знает, как суммировать каждое испытание и разделить возможности? Я попытался перезапустить rstudio и перезагрузить пакет tidyverse, который включает dplyr с шестью основными функциями.

Ответы [ 2 ]

1 голос
/ 19 июня 2020

@ Аарон правильно указал на это. Вам действительно не нужна трубка, чтобы подвести итоги. Вы можете записать его следующим образом, или, если вы знакомы с биномиальным распределением, то, по сути, у вас есть rbinom(50,4,0.5).

Итак, ниже я как бы снова написал ваш код для моделирования и построения графика. Надеюсь, это будет полезно в некотором смысле:

library(dplyr)
set.seed(123)

data.frame(trial=1:50) %>% 
mutate(heads=rbinom(50,4,0.5)) %>%
count(heads) %>% 
mutate(p=n/sum(n)) %>% 
ggplot(aes(x=heads,y=p)) + 
geom_bar(stat="identity",fill="green") + 
labs(x="Number of heads",y="Probability of Heads in 4 flips(p)") + 
theme_minimal()

enter image description here

1 голос
/ 19 июня 2020

Основная проблема здесь - когда вы вызываете функцию sum(). Когда sum() находится за пределами replicate(), происходит то, что replicate() создаст матрицу 4x50 из нулей и единиц, а затем sum() просто сгладит ее и сложит все. Вместо этого вам нужна сумма, взятая за каждую пробу; мы хотим производить сложение внутри репликации l oop, а не вне ее. Попробуйте:

heads50 <- replicate(50, sample(0:1, size = 4, replace = T) %>% sum)

Другой вариант - суммировать матрицу только по столбцам; то есть

heads50 <- replicate(50, sample(0:1, size = 4, replace = T)) %>% colSums

, где на этот раз функция colSums() находится за пределами replicate(), как это было в исходном примере.

...