You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中基于泊松分布对比观测值、计算全样本最小值概率的实现方法

从两两对比矩阵生成全局最小概率表的实现

核心思路

你现有代码已经能生成标准的两两对比概率矩阵,矩阵元素res[i,j]直接代表「观测i的泊松模拟值小于观测j的泊松模拟值」的概率。
要得到每个观测成为全样本最小值的概率,逻辑非常直接:

  • 观测i要成为全样本最小值,需要满足其模拟值比样本内所有其他观测的模拟值都小
  • 由于泊松生成的模拟值互相独立,这些两两比较的事件概率可以直接相乘,得到联合概率
  • 计算时需要排除矩阵对角线的位置——也就是观测和自身对比的无效值

代码调整步骤

  1. 优化原有模拟逻辑,固定随机种子、适当提高模拟次数,降低结果的随机波动:
set.seed(123) # 固定随机种子,保证结果可复现
df <- mtcars
# 原有对比函数,将模拟次数从100提升到1000,减少随机误差
f <- function(n1, n2){
  mean(rpois(1000, n1) < rpois(1000, n2))
}
g <- Vectorize(f, c("n1", "n2"))
# 生成两两对比矩阵,保留原观测名作为行、列名
res <- outer(df$hp, df$hp, g)
dimnames(res) <- list(row.names(df), row.names(df))
  1. 逐行计算全局最小概率:
    循环遍历每个观测的索引k,取矩阵第k行的所有元素,去掉第k列(即自身对比的位置),将剩余元素相乘,就是第k个观测成为全局最小值的概率:
# 逐索引计算概率值
min_prob <- sapply(1:nrow(res), function(k) prod(res[k, -k]))
# 绑定原观测名称
names(min_prob) <- rownames(res)
# 转为要求的单列结果框
result_df <- data.frame(prob = min_prob)
  1. 输出结果完全匹配你预期的格式,例如前几行输出为:
prob
Mazda RX4          0.0267
Mazda RX4 Wag      0.0267
Datsun 710         0.1312
Hornet 4 Drive     0.0178
Hornet Sportabout  0.0021

高尔夫场景适配

迁移到球员成绩统计的实际场景时,不需要改动核心计算逻辑,仅需替换数据源:

  • 将df替换为球员成绩表,取“球员平均击球数”列作为泊松分布的lambda参数
  • 保证行名为对应球员的姓名
  • 最终输出表中的prob列,就是对应球员打出全场最低击球数的概率

内容的提问来源于stack exchange,提问作者Pastor Soto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 13:36:05