R语言计算A组随机身高变量大于B组的概率实现方法
计算逻辑原理
你要求解的是两个独立随机抽样的身高值的差大于0的概率,即P(X-Y>0),其中X来自dataset1,Y来自dataset2。
如果假设两组身高均服从正态分布且相互独立,那么二者的差值Z = X-Y同样服从正态分布,分布参数为:
- 均值:
μ_Z = μ₁ - μ₂(μ₁为dataset1身高均值,μ₂为dataset2身高均值) - 方差:
σ_Z² = σ₁² + σ₂²(σ₁²为dataset1身高方差,σ₂²为dataset2身高方差)
基于该分布即可直接计算Z大于0的概率。
R语言实现
方法1:参数法(基于正态分布假设)
直接用你已经计算得到的均值、方差参数即可完成计算,代码如下:
# 计算差值Z的分布参数 z_mean <- mean1 - mean2 z_sd <- sqrt(var1 + var2) # 计算P(Z>0) = 1 - 累积分布中Z<=0的概率 target_prob <- 1 - pnorm(q = 0, mean = z_mean, sd = z_sd) target_prob
你原示例中的Probability = mean(dataset2)/mean(dataset1)是错误的,该计算得到的是两个均值的比值,和你需要的概率没有任何关联。
方法2:非参数模拟法(无需正态分布假设)
如果不确定身高是否服从正态分布,可以通过重复随机抽样的方式直接模拟得到概率,结果会随着抽样次数增加逐渐收敛到真实值:
# 设置随机种子保证结果可复现 set.seed(123) # 抽样10万次模拟对比 sim_n <- 100000 # 实际使用时替换为dataset1$height、dataset2$height x_sam <- sample(dataset1, size = sim_n, replace = TRUE) y_sam <- sample(dataset2, size = sim_n, replace = TRUE) # 统计X大于Y的占比即为目标概率 target_prob <- mean(x_sam > y_sam) target_prob
内容的提问来源于stack exchange,提问作者DaarioNaharis
相关产品推荐
相关产品推荐

