在R语言中为不同变量使用不同向量权重计算加权相关系数
计算双权重变量的加权相关系数
当两个变量分别带有独立权重时,可通过构建联合权重的方式计算加权相关系数,核心逻辑是基于联合权重推导加权均值、协方差与标准差,进而得到相关系数。
R语言实现步骤
首先加载示例数据:
DF = data.frame( x = c(-0.3, 0.3, -0.18, 0.02, 0.07, 0.11, 0.20, 0.8, 0.3, -0.4), x_weight = c(50, 40, 70, 5, 15, 30, 32, 13, 9, 19), y = c(-0.6, 0.25, 0.1, 0.3, 0.3, -0.05, -0.5, 1, 0.05, -0.6), y_weight = c(70, 8, 10, 39, 9, 49, 90, 77, 23, 75) )
1. 构建联合权重
这里以权重乘积作为联合权重(也可根据业务场景选用几何平均sqrt(x_weight*y_weight)、算术平均(x_weight+y_weight)/2等),并归一化确保权重和为1:
# 计算联合权重 DF$joint_weight = DF$x_weight * DF$y_weight # 归一化权重 DF$norm_joint_weight = DF$joint_weight / sum(DF$joint_weight)
2. 手动计算加权相关系数
# 加权均值 x_wmean = sum(DF$x * DF$norm_joint_weight) y_wmean = sum(DF$y * DF$norm_joint_weight) # 加权协方差 cov_w = sum(DF$norm_joint_weight * (DF$x - x_wmean) * (DF$y - y_wmean)) # 加权标准差 x_wsd = sqrt(sum(DF$norm_joint_weight * (DF$x - x_wmean)^2)) y_wsd = sqrt(sum(DF$norm_joint_weight * (DF$y - y_wmean)^2)) # 加权相关系数 wtd_cor = cov_w / (x_wsd * y_wsd) # 输出结果 wtd_cor
3. 利用cov.wt简化计算
也可直接将归一化后的联合权重传入cov.wt,直接提取相关系数:
cov_matrix = cov.wt(cbind(DF$x, DF$y), wt = DF$norm_joint_weight, cor = TRUE) # 提取x与y的加权相关系数 cov_matrix$cor[1,2]
内容的提问来源于stack exchange,提问作者Anne
相关产品推荐
相关产品推荐

