#r
#r
Вопрос:
Я хочу автоматически вычислить вероятность с помощью R. Правило: начните с 0 баллов. Мы подбросим монетку. Если выпадет орел, мы получим очко. Если выпадет решка, мы удваиваем наш текущий счет.
Функции, которые я хочу закодировать:
-
Ожидаемый результат после n переворотов (5 переворотов, 15 переворотов …)
-
Какова вероятность того, что после n переворотов оценка будет равна степени двойки (выразите эту вероятность как число от 0 до 1)?
-
Стандартное отклонение
-
Ожидаемое стандартное отклонение баллов?
Я хочу, чтобы мои функции адаптировались к изменениям правил. Например, 2/3 вероятности выпадения орла и 1/3 вероятности выпадения решки. Каков наш ожидаемый результат после 10 сальто?
Ответ №1:
Во-первых, вы хотите подумать о том, какие параметры должна принимать функция. Похоже, ему просто нужно принять параметр n
— количество переворотов.
flips <- function(n){
}
Теперь вы можете подумать о том, что должно произойти внутри функции.
- начните с 0 баллов
- добавьте 1, если заголовки
- двойные хвосты if
Вам также нужно уметь делать это n
раз, поэтому это должно быть в цикле.
flips <- function(n){
## start with 0
sum <- 0
for(i in 1:n){
# create a flip (random draw of H or T)
flip <- sample(c("H", "T"), 1)
# identify what to do if flip is H
if(flip == "H"){
# increment sum by 1
sum <- sum 1
# identify what to do if flip is not H (i.e., it is T)
}else{
sum <- sum*2
}
}
# return the sum
sum
}
flips(10)
# [1] 28
Функция, подобная этой, будет кодироваться после n
испытаний, что произойдет. Тем не менее, похоже, что вопросы, на которые вы пытаетесь ответить, более теоретические, чем о кодировании. Если вы можете указать операции, которые вам нужно выполнить, то мы, вероятно, могли бы помочь вам закодировать это.
Комментарии:
1. Счет не стабилен. Когда я пробую f (10), оценка меняется с каждым запуском.
2. Это случайный процесс, поэтому каждый раз он будет отличаться. Предположительно, именно поэтому вы спросили об ожиданиях от процесса.
3. Извините, если вопрос был неясен. Но я обновил. Я не так много знаю R
Ответ №2:
Возможно, вы можете начать с создания функции, f
подобной приведенной ниже, которая выдает серию случайных величин, где 0
и 1
обозначают голову и хвост соответственно
f <- function(n,p) {
v <- sample(c(0,1),n,replace = TRUE,prob = c(p,1-p))
s <- 0
for (i in v) {
if (i == 1) {
s <- s*2
} else {
s <- s 1
}
}
s
}
и затем вы можете применить replicate
для повторения эксперимента, например,
n <- 20
p <- 2/3
r <- replicate(1e6,f(n,p))
Мы увидим
> mean(r)
[1] 629.074
> sd(r)
[1] 1326.681
Комментарии:
1. Счет не стабилен. Когда я пробую f (10), оценка меняется с каждым запуском.
2. @Jena, Так как
f(10,2/3)
это просто случайная величина. Вам нужно моделирование методом Монте-Карло, например,replicate(1e6,f(n,p))
для генерации достаточного количества выборок, чтобы вы могли видеть среднее значение и стандартное отклонение. В противном случае одна случайная величинаf(n,p)
не имеет смысла.3. Извините, если вопрос был неясен. Но я обновил. Я не так много знаю R
4. > r [1] 376 540 53 6032 290 118 5408 541 8360 349 > r <- реплицировать(10,f(n,p)) > r [1] 522 632 380 696 63 258 201 48 116 164 > r <- реплицировать(10,f(n,p)) > r [1] 230 4182 69 637 39 140 173 1427 482 182