如何不使用cor()函数手动计算Pearson相关系数?
手动计算Pearson相关系数(不使用
cor()函数) Pearson相关系数的核心公式是:
[ r = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2 \sum_{i=1}^{n}(y_i - \bar{y})^2}} ]
实现步骤(以R语言为例)
- 计算两个变量的算术均值
- 计算每个观测值与对应均值的偏差
- 计算偏差乘积的总和(分子)
- 计算两个变量偏差平方和的平方根乘积(分母)
- 分子除以分母得到最终的相关系数
代码示例
# 示例数值变量 x <- c(1, 2, 3, 4, 5) y <- c(2, 4, 5, 8, 9) # 步骤1:计算均值 x_mean <- mean(x) y_mean <- mean(y) # 步骤2:计算偏差 x_deviations <- x - x_mean y_deviations <- y - y_mean # 步骤3:计算分子 numerator <- sum(x_deviations * y_deviations) # 步骤4:计算分母 x_ss <- sum(x_deviations^2) # x的偏差平方和 y_ss <- sum(y_deviations^2) # y的偏差平方和 denominator <- sqrt(x_ss * y_ss) # 步骤5:计算相关系数 manual_pearson <- numerator / denominator # 输出结果 manual_pearson
验证结果
你可以用内置的cor()函数验证结果是否一致:
cor(x, y) # 输出和manual_pearson完全相同
注意事项
- 确保输入变量是数值型,如果是因子或字符型需要先转换
- 若数据存在缺失值,需先通过
na.omit()或其他方式处理,否则计算结果会返回NA - 该实现等价于
cor(x, y, method = "pearson", use = "everything")的默认行为
内容的提问来源于stack exchange,提问作者aaaaaaab
相关产品推荐
相关产品推荐

