Создание функций для автоматического вычисления вероятностей с помощью R

#r

#r

Вопрос:

Я хочу автоматически вычислить вероятность с помощью R. Правило: начните с 0 баллов. Мы подбросим монетку. Если выпадет орел, мы получим очко. Если выпадет решка, мы удваиваем наш текущий счет.

Функции, которые я хочу закодировать:

  • Ожидаемый результат после n переворотов (5 переворотов, 15 переворотов …)

  • Какова вероятность того, что после n переворотов оценка будет равна степени двойки (выразите эту вероятность как число от 0 до 1)?

  • Стандартное отклонение

  • Ожидаемое стандартное отклонение баллов?

Я хочу, чтобы мои функции адаптировались к изменениям правил. Например, 2/3 вероятности выпадения орла и 1/3 вероятности выпадения решки. Каков наш ожидаемый результат после 10 сальто?

Ответ №1:

Во-первых, вы хотите подумать о том, какие параметры должна принимать функция. Похоже, ему просто нужно принять параметр n — количество переворотов.

 flips <- function(n){

}
  

Теперь вы можете подумать о том, что должно произойти внутри функции.

  1. начните с 0 баллов
  2. добавьте 1, если заголовки
  3. двойные хвосты 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