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

本文介绍了相关性分析的基础概念,探讨了协方差和相关系数的计算及其在衡量变量间依赖性的应用。通过R语言实现多维正态随机矩阵的生成,并展示了如何使用cor()和cov()函数进行相关性分析与可视化,揭示了数据分组后相关性的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



简介

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

1. 协方差和相关系数

1.1 协方差

公式:
在这里插入图片描述

三种情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
协方差的缺陷:

  1. 协方差不能反映斜率大小,只能反映斜率的正负。
  2. 协方差不能反映每一个观测靠近拟合线y=ax+b的程度。
  3. 协方差对数据更加敏感,示例如下:
    在这里插入图片描述

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")
XYZ
12.7255114.31958621
9.2589081.97661761
13.1776865.98418621
9.7252970.54743561
8.8428310.45256701
10.7306922.12256721

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值