本文内容是基于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)