R语言基础--简单相关性分析(1)
程序员文章站
2022-04-03 19:33:53
...
简介
初次接触相关性分析,在摸索中前进,也顺便将笔记记录下来,未雨绸缪嘛!
简单来说,相关性分析就是衡量两个变量之间的依赖性强弱的一种统计学方法。相关系数可以用来描述定量变量之间的关系。相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。
1. 协方差和相关系数
1.1 协方差
公式:
三种情况:
协方差的缺陷:
- 协方差不能反映斜率大小,只能反映斜率的正负。
- 协方差不能反映每一个观测靠近拟合线y=ax+b的程度。
- 协方差对数据更加敏感,示例如下:
1.2 相关系数
公式:
相关性绝对值为1和0的情况:
从图中可以明显看出,协方差和相关性之间的差异!
R语言中,cor()
和cov()
函数分别用来计算相关性系数和协方差。
2. 相关性分析
R可以计算多种相关系数,包括Pearson相关系数、Spearman相关系数、Kendall相关系数等,本次主要以Pearson相关系数进行探索,可视化以R基础函数为主。
2.1 产生多维正态随机矩阵,并转换为数据框
library(mvtnorm)
library(dplyr)
N <- 100
Sigma <- matrix(c(1, 0.75, 0.75, 1), nrow = 2, ncol = 2) * 1.5
means <- list(c(11, 3), c(9, 5), c(7, 7), c(5, 9), c(3, 11))
dat <- lapply(means, function(mu)
rmvnorm(N, mu, Sigma))
dat <- as.data.frame(Reduce(rbind, dat)) %>%
mutate(Z = as.character(rep(seq_along(means), each = N)))
names(dat) <- c("X", "Y", "Z")
knitr::kable(head(dat),align = "c")
X | Y | Z |
---|---|---|
12.725511 | 4.3195862 | 1 |
9.258908 | 1.9766176 | 1 |
13.177686 | 5.9841862 | 1 |
9.725297 | 0.5474356 | 1 |
8.842831 | 0.4525670 | 1 |
10.730692 | 2.1225672 | 1 |
2.2 X和Y的总体相关性分析和可视化
with(dat,cor(X,Y))
# [1] -0.7294138
par(mar = c(5,5,5,5))
with(dat,{
plot(X,Y,pch = 21,col = "black",bg = "gray")
lines(X,fitted(lm(Y ~ X)),lwd = 2,lty = 1,col = "red")
})
text(12,12,labels = paste("cor",round(with(dat,cor(X,Y)),digits = 2),sep = " = "))
2.2 X和Y在Z水平上的相关性分析和可视化
dat1 <- dat %>% group_by(Z) %>% summarise(cor = cor(X,Y))
dat1
# A tibble: 5 x 2
Z cor
<chr> <dbl>
1 1 0.738
2 2 0.772
3 3 0.743
4 4 0.847
5 5 0.783
tt <- round(dat1$cor,digits = 2)
tt <- paste("cor",tt,sep = " = ")
par(mar = c(5,5,5,5))
with(dat,{
plot(X,Y,pch = 21,col = "black",bg = Z)
})
for(i in 1:5){
dat1 = dat[dat$Z==i,]
with(dat1,{
lines(X,fitted(lm(Y ~ X)),lwd = 2,lty = 1,col = Z)
text(13,14-i+1,labels = tt[i],col = dat1$Z)
})
可以看到,在对样本观测进行分组之后,数据呈现出的相关性和之前总体的X和Y相关性尽然不同。
cor.test()
函数可以对相关性进行显著性检验。
with(dat,cor.test(X,Y))
#
Pearson's product-moment correlation
data: X and Y
t = -23.795, df = 498, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.7679821 -0.6855744
sample estimates:
cor
-0.7294138
初次探索相关性分析,欢迎大家留言讨论!
##侵权请联系作者删除!
参考
[1]《R语言实战》
[2] StatQuest
上一篇: FREEBSD下运行调试asterisk