协方差和相关系数

01 代码计算两个向量的协方差

样本协方差:

\[\operatorname{cov}(x,y)=\frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{n-1} \]

手动计算:

# 任意两个等长向量
x <- c(2,4,6,8)
y <- c(1,3,5,7)

n  <- length(x)
x_bar <- mean(x)
y_bar <- mean(y)

cov_manual <- sum((x - x_bar) * (y - y_bar)) / (n - 1)
cov_manual # 6.666667

R函数:

cov_R <- cov(x, y)
cov_R
all.equal(cov_manual, cov_R)   # TRUE

PS: 计算数据框或者矩阵的协方差矩阵

cov(mtcars)                            # 11×11 协方差方阵
cov(mtcars[1:2], mtcars[3:4])          # 2×2 交叉协方差

02 代码计算两个向量的相关系数

样本相关系数:

\[\operatorname{cor}(x,y)=\frac{\operatorname{cov}(x,y)}{\sqrt{\operatorname{var}(x)}\cdot\sqrt{\operatorname{var}(y)}}=\frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\bar{x})^2}\sqrt{\sum_{i=1}^{n}(y_i-\bar{y})^2}} \]

手动计算:

x <- c(2, 4, 6, 8, 10)
y <- c(1, 3, 5, 6, 9)
# 手动计算相关系数
cov.xy <- cov(x,y)
cor_manual <- cov.xy / (sd(x)*sd(y))
# R函数cor直接计算两个向量的相关系数
cor.xy <- cor(x,y)
# 检查一致性
identical(cor.xy,cor_manual) # TRUE

PS: 计算数据框或者矩阵的相关系数矩阵

cor(mtcars)                            # 默认 Pearson
cor(mtcars, method = "spearman")       # 秩相关
posted @ 2026-01-15 21:58  less_is_more_0904  阅读(4)  评论(0)    收藏  举报