如何用正态分布计算玩家得分更高的概率及R语言实现
R求解Alex得分高于Bob的概率
计算原理
- 设Alex得分X服从正态分布
N(μ=2, σ=2),Bob得分Y服从正态分布N(μ=1, σ=3),两者相互独立 - 目标概率为 P(X>Y),等价转换为 P(X-Y>0)
- 根据正态分布性质,两个独立正态变量的差仍服从正态分布,差值分布参数如下:
均值 = 2 - 1 = 1
方差 = 2² + 3² = 13
标准差 = √13 ≈ 3.606
R实现代码
理论计算法
直接调用R内置正态分布累积函数pnorm计算:
# 定义差值分布的均值和标准差 mean_diff <- 2 - 1 sd_diff <- sqrt(2^2 + 3^2) # 计算P(X-Y>0) = 1 - P(X-Y≤0) result <- 1 - pnorm(q = 0, mean = mean_diff, sd = sd_diff) # 输出保留4位小数的结果 print(round(result, 4))
运行后得到结果约为 0.6092,即Alex得分高于Bob的概率约为60.9%。
模拟验证法
通过蒙特卡洛抽样验证结果准确性:
# 设置随机种子保证结果可复现 set.seed(123) # 生成100万次模拟得分 sim_num <- 1e6 alex_score <- rnorm(sim_num, mean = 2, sd = 2) bob_score <- rnorm(sim_num, mean = 1, sd = 3) # 统计Alex得分更高的频率 sim_result <- mean(alex_score > bob_score) print(round(sim_result, 4))
模拟结果和理论计算值误差极小,验证了结论的正确性。
内容的提问来源于stack exchange,提问作者Edward Starlin
相关产品推荐
相关产品推荐

