簡體   English   中英

我如何在 r 中計算這樣的平均值

[英]How do I calculate an average like this in r

可能是一個愚蠢的問題,但我不知道該怎么做。

考慮下面的游戲,其中擲出一個平衡的骰子,它有六個面,編號從 1 到 6。 如果擲出 4 或 1,您將損失 50 歐元。 如果擲出 2 或 3,則什么也不會發生。 如果擲出 5,您將贏得 50 歐元。 如果擲出 6,您將贏得 16×50 歐元。

我們想知道您平均每場比賽能贏多少錢。 將種子設置為 990,模擬游戲重復 5649 次。

計算這些重復中獲勝的平均值,作為對游戲中獲勝期望值的估計。 將此值圈出到小數點后 2 位。

這是一個基本的 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


到 output 小數點后兩位的結果,正好

round(mean(win), 2)
#> 121.47
#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

可以直接得到解析解:P(X=-50) = 1/3, P(X=0) = 1/3, P(X=50) = 1/6, P(X=16*50) = 1/6。

E[X] = -50/3 + 0/3 + 50/6 + 16*50/6 = 125。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM