Измените код R, чтобы сгенерировать другой вывод - PullRequest
0 голосов
/ 12 марта 2019
set.seed(2019)
numHeads <- t(replicate(1000, sample(1:0, 4, TRUE)))
mean(rowSums(numHeads)

Мне нужно изменить этот код, чтобы мы могли повторить бросание справедливой монеты теперь 10000, пока не получится голова, и найти эмпирическое среднее значение этого эксперимента.

Ответы [ 2 ]

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

Вот векторизованный способ многократно (Nrepeat = 100) подбрасывать монету Ntoss = 10^5 раз.

Ntoss <- 10000
Nrepeat <- 100
set.seed(2018)
lst <- replicate(Nrepeat, sample(c(TRUE, FALSE), Ntoss, replace = T), simplify = F)

Выходным объектом здесь является list с 10^5 результатами подбрасывания монеты за повторный "эксперимент" подбрасывания монеты.

Количество голов среди бросков 10^5 монет

Чтобы рассчитать количество голов среди бросков 10^5 монет, вы можете сделать

nHeads <- sapply(lst, sum)

Доля голов среди бросков 10^5 монет

Чтобы вычислить долю голов среди бросков 10^5 монет, вы можете сделать

fracHeads <- sapply(lst, function(x) sum(x) / length(x))
# [1] 0.5071 0.5027 0.5033 0.4969 0.5010 0.5010 0.5053 0.4994 0.5027 0.4974
#[11] 0.4937 0.5012 0.5018 0.5006 0.5066 0.4986 0.4987 0.5030 0.4990 0.5050
#[21] 0.4889 0.4986 0.5040 0.4933 0.5002 0.4912 0.4966 0.5046 0.4942 0.5029
#[31] 0.4908 0.5014 0.5002 0.5061 0.5013 0.5051 0.4977 0.4957 0.4990 0.5054
#[41] 0.5086 0.4994 0.4910 0.5032 0.4961 0.4928 0.5108 0.5018 0.5040 0.4973
#[51] 0.5001 0.4989 0.5069 0.5004 0.4946 0.4980 0.4970 0.4988 0.4945 0.4972
#[61] 0.5106 0.5016 0.4932 0.4989 0.4983 0.4969 0.4938 0.5063 0.4962 0.5073
#[71] 0.5020 0.4904 0.4990 0.5025 0.4990 0.4949 0.5009 0.4986 0.4959 0.4886
#[81] 0.4972 0.5055 0.5046 0.5059 0.4980 0.4993 0.4975 0.4959 0.4943 0.5077
#[91] 0.5021 0.5023 0.4977 0.5034 0.4943 0.5056 0.5019 0.5051 0.4980 0.5031

Распределение фракции головок

Мы также можем построить распределение фракций голов из 100 повторных экспериментов

library(ggplot2)
ggplot(data.frame(fracHeads = fracHeads), aes(fracHeads)) +
    geom_histogram(bins = 20)

enter image description here

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

В среднем это 1,9 сальто, пока не поднимется голова.Ключом является оператор while, который выполняется до тех пор, пока условие не станет истинным (в этом случае вы получите что-то отличное от 0).Объект «Count» - это количество попыток выполнения цикла while для выбора 1.

out <- NULL
for( i in 1:10000){

    count<-0
    a <- 0

    while( a == 0 ){

        set.seed(count+i)
        a <- sample( c(0,1) ,1  )
        count <- count+1

    }

    out <- rbind( out , data.frame( i, count))
}

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