协方差和相关系数
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") # 秩相关

浙公网安备 33010602011771号