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

已知独立假设时从边际分布计算联合分布(R dplyr实现)

问题原因

你直接连接后相乘得到的number.mult总和不为1,核心是两个表的number列均为对应维度下的联合概率,且两个表中公共特征feature2的边际分布不统一:

  • 对my_tib1按feature2分组求和,得到该表下feature2的边际概率:AA=0.45,BB=0.55
  • 对my_tib2按feature2分组求和,得到该表下feature2的边际概率:AA=0.4,BB=0.6

直接将两个联合概率相乘,实际计算的是P(f1,f2) * P(f2,f3) = P(f1,f2,f3) * P(f2),额外多乘了一次feature2的概率权重,且两个表的feature2权重不统一,最终求和自然不为1。

实现方案

按照特征独立假设(给定feature2时feature1与feature3独立),要得到总和为1的三元联合分布,只需要先将其中一个表转换为给定feature2的条件概率,再和另一个表的联合概率相乘即可。以下代码默认保留my_tib1中的feature2边际分布作为基准,输出结构完全匹配你的预期:

library(dplyr)

# 步骤1:将my_tib2转换为给定feature2时feature3的条件概率
my_tib2_cond <- my_tib2 %>%
  group_by(feature2) %>%
  # 组内归一化得到条件概率P(f3|f2)
  mutate(number.y = number / sum(number)) %>%
  ungroup() %>%
  select(feature2, feature3, number.y)

# 步骤2:连接计算联合概率
result <- my_tib1 %>%
  rename(number.x = number) %>%
  full_join(my_tib2_cond, by = "feature2") %>%
  mutate(number.mult = number.x * number.y)
结果验证

运行后得到的结果共12行,number.mult列求和为1:

# A tibble: 12 × 6
   feature1 feature2 number.x feature3 number.y number.mult
   <chr>    <chr>       <dbl> <chr>       <dbl>       <dbl>
 1 A        AA           0.1  TT          0.25      0.025 
 2 A        AA           0.1  FF          0.75      0.075 
 3 A        BB           0.1  TT          0.667     0.0667
 4 A        BB           0.1  FF          0.333     0.0333
 5 B        AA           0.3  TT          0.25      0.075 
 6 B        AA           0.3  FF          0.75      0.225 
 7 B        BB           0.4  TT          0.667     0.267 
 8 B        BB           0.4  FF          0.333     0.133 
 9 C        AA           0.05 TT          0.25      0.0125
10 C        AA           0.05 FF          0.75      0.0375
11 C        BB           0.05 TT          0.667     0.0333
12 C        BB           0.05 FF          0.333     0.0167

如果你需要保留my_tib2中的feature2边际分布作为基准,只需要把上述步骤中两个表的处理顺序调换,对my_tib1做组内归一化得到P(f1|f2),再和my_tib2的联合概率相乘即可。


内容的提问来源于stack exchange,提问作者Tea Tree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:09:17