相关性系数和它的朋友们

本文内容是基于statquest-协方差与相关系数的学习笔记,介绍协方差、相关系数和R^1三个统计量,并添加了R语言实现,我知道一写统计学就会阅读量暴跌,没人看就当写给自己看,反正我们也不是商业化运营,没有业绩压力。

0.先画个散点+趋势图看看

set.seed(10010)
x = rnorm(10)
y = 2*x + rnorm(10,sd = 0.5)
dat = data.frame(x,y)
library(ggplot2)
p0 = ggplot(dat,aes(x = x,y = y))+
  geom_point()+
  geom_smooth(method="lm")+
  theme_bw()
p0

1.协方差

协方差本身没啥子用,但他是相关系数的计算的垫脚石。

  • 协方差的正负指示正相关/负相关/不相关(相关系数也能干这事儿)
  • 无法指示关联强弱
  • 受数据大小范围影响极大,不足以用于量化差异
#公式计算
sum((x-mean(x))*(y-mean(y)))/9
## [1] 2.01584
#函数计算
cov(x,y)
## [1] 2.01584

2.pearson相关系数

分母是x和y的标准差之积,目的是将结果调整到[-1,1]范围内,不受原始数值大小的影响,只反映趋势

#公式计算
cov(x,y)/(sd(x)*sd(y))
## [1] 0.9526931
#函数计算
cor(x,y)
## [1] 0.9526931

3.相关系数的p值

表示相关系数是否具有统计显著性。

随着样本数量的增多,p值逐渐会变小。但如果样本之间的相关系数小,增加样本数量也不能使预测更加准确,仅仅增加对预测结果的信心。(此时弹幕有一句非常应景的话:我很有信心的说不知道!!O(∩_∩)O

在R语言中有相关性检验的函数,可以给出p值

cor.test(x,y)$p.value
## [1] 2.069217e-05

4.R2

在这里,r是相关系数,R2是r的平方(并不是适用于所有情况)。可用于说明x可以解释百分之多少的–y的变异–

lm是线性拟合的函数,可以计算出来方程:

tmp = lm(y~x)
tmp
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##       -0.11         1.84

这个结果的意思是方程为y = -0.11 + 1.84* x

那么可以计算出每个x对应的预测值(es):

es = tmp$coefficients[1]+tmp$coefficients[2]*x;es
##  [1] -2.1588416  0.1692169 -0.2138495 -2.9034304 -1.1454570 -2.5183322
##  [7] -3.9805253 -2.3149182  2.8268508 -1.2736903

也可由此计算R2。

R2 = 拟合直线解释的变异(VAR(mean)-VAR(line))占均值变异(VAR(mean))的百分比。

(var(y) - var(y-es))/var(y)
## [1] 0.9076241

R2=0.78,表示由x和y的关系解释的变异占y值总体变异的78%(大部分)。

在R语言中无需自己计算,直接在模型的summary信息中就有

summary(lm(y~x))$r.squared
## [1] 0.9076241

彩蛋!

如此枯燥,你都看到了现在。我在搜索R语言如何计算R2的时候翻到了一个宝藏函数,出自ggpmisc包,可以将公式与R2添加到图上去~

library(ggpmisc)
p0 + stat_poly_eq(formula = y~x, 
                  aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
                  parse = TRUE) 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。