如何计算r的平均值

ccrfmcuu  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(204)

可能是个愚蠢的问题,但我不知道该怎么做。
考虑下面的博弈,掷出一个平衡骰子,六个面的数字从1到6,如果掷出4或1,你会输50欧元,如果掷出2或3,什么都不会发生,如果掷出5,你会赢50欧元,如果掷出6,你会赢16×50欧元。
我们想知道你平均每场比赛能赢多少钱。设定种子为990,模拟5649次重复的比赛。
计算这些重复的奖金的平均值,作为游戏中奖金的期望值的估计值。将这个值圈到小数点后2位。

68bkxrlz

68bkxrlz1#

这是一个基本R路,芯片侧有一个逻辑索引。

set.seed(990)

rolls <- sample(6, 5649, TRUE)

win <- integer(5649)
win[rolls %in% c(1, 4)] <- -50
win[rolls == 5] <- 50
win[rolls == 6] <- 16*50
mean(win)
#> [1] 121.4728

创建于2022年11月27日,使用reprex v2.0.2
一个更简单的方法。创建一个奖品向量,并使用掷骰值对其进行索引。

prizes <- c(-50, 0, 0, -50, 50, 16*50)

win <- prizes[rolls]
mean(win)
#> [1] 121.4728

创建于2022年11月27日,使用reprex v2.0.2
要输出2位小数的结果,只需

round(mean(win), 2)
#> 121.47
wswtfjt7

wswtfjt72#

#Simulation of the dice roll
set.seed(990);dice_roll <- sample(1:6,5649,replace = TRUE)

library(dplyr)

df <- tibble(dice_roll = dice_roll)

df %>% 
  mutate(
    #Setting each dice roll to their respective result
    result = case_when(
      dice_roll == 6 ~ (16*50),
      dice_roll == 5 ~ 50,
      (dice_roll == 2 | dice_roll == 3) ~ 0,
      (dice_roll == 1 | dice_roll == 4) ~ -50,
    )
  ) %>% 
  # The global average
  summarise(average = round(mean(result),2)) %>% 
  pull(average)

[1] 121.47
yxyvkwin

yxyvkwin3#

可以得到解析解:P(X=-50)= 1/3,P(X=0)= 1/3,P(X=50)= 16,P(X=1650)= 16。
E[X] = -50/3 + 0/3 + 50/6 + 16
50/6 = 125。

-50/3 + 0/3 + 50/6 + 16*50/6
[1] 125

相关问题