本文內(nèi)容是基于statquest-協(xié)方差與相關(guān)系數(shù)的學(xué)習(xí)筆記,介紹協(xié)方差欢揖、相關(guān)系數(shù)和R^1三個統(tǒng)計量陶耍,并添加了R語言實(shí)現(xiàn),我知道一寫統(tǒng)計學(xué)就會閱讀量暴跌她混,沒人看就當(dāng)寫給自己看烈钞,反正我們也不是商業(yè)化運(yùn)營,沒有業(yè)績壓力坤按。
0.先畫個散點(diǎn)+趨勢圖看看
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.協(xié)方差
協(xié)方差本身沒啥子用棵磷,但他是相關(guān)系數(shù)的計算的墊腳石。
- 協(xié)方差的正負(fù)指示正相關(guān)/負(fù)相關(guān)/不相關(guān)(相關(guān)系數(shù)也能干這事兒)
- 無法指示關(guān)聯(lián)強(qiáng)弱
- 受數(shù)據(jù)大小范圍影響極大晋涣,不足以用于量化差異
#公式計算
sum((x-mean(x))*(y-mean(y)))/9
## [1] 2.01584
#函數(shù)計算
cov(x,y)
## [1] 2.01584
2.pearson相關(guān)系數(shù)
分母是x和y的標(biāo)準(zhǔn)差之積仪媒,目的是將結(jié)果調(diào)整到[-1,1]范圍內(nèi),不受原始數(shù)值大小的影響,只反映趨勢
#公式計算
cov(x,y)/(sd(x)*sd(y))
## [1] 0.9526931
#函數(shù)計算
cor(x,y)
## [1] 0.9526931
3.相關(guān)系數(shù)的p值
表示相關(guān)系數(shù)是否具有統(tǒng)計顯著性算吩。
隨著樣本數(shù)量的增多留凭,p值逐漸會變小。但如果樣本之間的相關(guān)系數(shù)小偎巢,增加樣本數(shù)量也不能使預(yù)測更加準(zhǔn)確蔼夜,僅僅增加對預(yù)測結(jié)果的信心。(此時彈幕有一句非常應(yīng)景的話:我很有信心的說不知道Q怪纭求冷!O(∩_∩)O)
在R語言中有相關(guān)性檢驗的函數(shù),可以給出p值
cor.test(x,y)$p.value
## [1] 2.069217e-05
4.R2
在這里窍霞,r是相關(guān)系數(shù)匠题,R2是r的平方(并不是適用于所有情況)〉穑可用于說明x可以解釋百分之多少的–y的變異–
lm是線性擬合的函數(shù)韭山,可以計算出來方程:
tmp = lm(y~x)
tmp
##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## -0.11 1.84
這個結(jié)果的意思是方程為y = -0.11 + 1.84* x
那么可以計算出每個x對應(yīng)的預(yù)測值(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的關(guān)系解釋的變異占y值總體變異的78%(大部分)钱磅。
在R語言中無需自己計算,直接在模型的summary信息中就有
summary(lm(y~x))$r.squared
## [1] 0.9076241
彩蛋似枕!
如此枯燥盖淡,你都看到了現(xiàn)在。我在搜索R語言如何計算R2的時候翻到了一個寶藏函數(shù)凿歼,出自ggpmisc包褪迟,可以將公式與R2添加到圖上去~
library(ggpmisc)
p0 + stat_poly_eq(formula = y~x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE)