欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言基础--简单相关性分析(1)

程序员文章站 2022-04-03 19:33:53
...


简介

初次接触相关性分析,在摸索中前进,也顺便将笔记记录下来,未雨绸缪嘛!
简单来说,相关性分析就是衡量两个变量之间的依赖性强弱的一种统计学方法。相关系数可以用来描述定量变量之间的关系。相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。

1. 协方差和相关系数

1.1 协方差

公式:
R语言基础--简单相关性分析(1)

三种情况:
R语言基础--简单相关性分析(1)
R语言基础--简单相关性分析(1)
R语言基础--简单相关性分析(1)
协方差的缺陷:

  1. 协方差不能反映斜率大小,只能反映斜率的正负。
  2. 协方差不能反映每一个观测靠近拟合线y=ax+b的程度。
  3. 协方差对数据更加敏感,示例如下:
    R语言基础--简单相关性分析(1)

1.2 相关系数

公式:
R语言基础--简单相关性分析(1)
相关性绝对值为1和0的情况:
R语言基础--简单相关性分析(1)
R语言基础--简单相关性分析(1)
从图中可以明显看出,协方差和相关性之间的差异!
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 = " = "))

R语言基础--简单相关性分析(1)
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)
  })

R语言基础--简单相关性分析(1)
可以看到,在对样本观测进行分组之后,数据呈现出的相关性和之前总体的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