[英]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.