基于矩阵计算产品出口条件概率的R语言实现求助
计算产品间出口的条件概率
首先重现你的矩阵生成代码(保证结果可复现):
set.seed(2022) mat <- matrix(sample(0:1, 25, replace = T), ncol = 5) rownames(mat) <- c("R1", "R2", "R3", "R4", "R5") colnames(mat) <- c("A", "B", "C", "D", "E")
接下来分三步实现条件概率计算:
1. 统计每个产品的出口区域数
用colSums()直接统计每列(对应单个产品)中1的个数,也就是出口该产品的区域数量:
# 每个产品的出口区域数 export_counts <- colSums(mat)
对应你示例中的数据,export_counts["A"]为2,export_counts["B"]为4,和你描述的完全一致。
2. 统计同时出口任意两种产品的区域数
通过矩阵交叉乘积t(mat) %*% mat生成对称矩阵,其中[i,j]位置的数值代表同时出口产品i和产品j的区域数量:
# 同时出口两种产品的区域数矩阵 joint_export <- t(mat) %*% mat
比如joint_export["A","B"]的值为1,正好对应你说的仅R1同时出口A和B的情况。
3. 计算条件概率矩阵
根据公式P(X|Y) = 同时出口X和Y的区域数 / 出口Y的区域数,将joint_export的每一列除以对应产品的出口区域数即可得到结果:
# 生成条件概率矩阵:行是X,列是Y,对应P(X|Y) cond_prob <- joint_export / export_counts # 处理分母为0的情况(若某产品无出口区域,标记为NA避免报错) cond_prob <- ifelse(export_counts == 0, NA, cond_prob)
查看最终结果:
cond_prob
对应你示例中的关键值:
cond_prob["A","B"]为0.25(即1/4),代表出口B时出口A的概率cond_prob["B","A"]为0.5(即1/2),代表出口A时出口B的概率
如果需要将结果以分数形式展示,可以使用MASS包的fractions()函数:
library(MASS) fractions(cond_prob)
内容的提问来源于stack exchange,提问作者Manfred L
相关产品推荐
相关产品推荐

