01. ์๊ด๊ด๊ณ ๋ถ์(Correlation Analysis)
๋ณ์ ๊ฐ ๊ด๋ จ์ฑ ๋ถ์ ๋ฐฉ๋ฒ
ํ๋์ ๋ณ์๊ฐ ๋ค๋ฅธ ๋ณ์์ ๊ด๋ จ์ฑ ๋ถ์
ex. ๊ด๊ณ ๋น์ ๋งค์ถ์ก ์ฌ์ด์ ๊ด๋ จ์ฑ ๋ฑ ๋ถ์
์๊ด๊ด๊ณ๋ถ์ ์ค์์ฌํญ
ํ๊ท๋ถ์ ์ ๋ณ์ ๊ฐ ๊ด๋ จ์ฑ ๋ถ์(๊ฐ์ค ๊ฒ์ ์ ์ํ)
์๊ด๊ณ์(ํผ์ด์จ(Pearson) R๊ณ์) ์ด์ฉ ๊ด๋ จ์ฑ ์ ๋ฌด
์๊ด๊ด๊ณ๋ถ์ ์ฒ๋ : ํผ์ด์จ ์๊ด๊ณ์(Pearson correlation coefficient) = r
์๊ด๊ด๊ณ ์์
์์ ์๊ด๊ด๊ณ : ๋น๋ก๊ด๊ณ. ์ง๋ฅ์ง์์ ์ฑ์ , ํค์ ๋ชธ๋ฌด๊ฒ
์์ ์๊ด๊ด๊ณ : ๋ฐ๋น๋ก๊ด๊ณ. ๋์๋ฌผ ์์ฐ๋๊ณผ ๊ฐ๊ฒฉ, ๊ณ ๋์ ๊ธฐ์จ
๋ฌด์ ์๊ด๊ด๊ณ : ๋น๋ก/๋ฐ๋น๋ก ์์. ์ค๋งํธํฐ ์ด์ฉ ์๊ฐ๊ณผ ์ฑ์ , ๋ฒ์ฃ์จ๊ณผ ์์ด์คํฌ๋ฆผ ํ๋งค๋
02. ํผ์ด์จ ์๊ด๊ณ์ R
ํผ์ด์จ ์๊ด๊ณ์ R | ์๊ด๊ด๊ณ ์ ๋ |
±0.9 ์ด์ | ๋งค์ฐ ๋์ ์๊ด๊ด๊ณ |
±0.9 ~ ±0.7 | ๋์ ์๊ด๊ด๊ณ |
±0.7 ~ ±0.4 | ๋ค์ ๋์ ์๊ด๊ด๊ณ |
±0.4 ~ ±0.2 | ๋ฎ์ ์๊ด๊ด๊ณ |
±0.2 ๋ฏธ๋ง | ์๊ด๊ด๊ณ ์์ |
* ์๊ด๊ณ์ r์ -1์์ +1๊น์ง์ ๊ฐ์ ๊ฐ์ง๋ค. ๋ํ ๊ฐ์ฅ ๋์ ์์ ์๊ด๊ด๊ณ์ ์๊ด๊ณ์๋ 1์ด๊ณ , ๋ ๋ณ์๊ฐ์ ์ ํ ์๊ด๊ด๊ณ๊ฐ ์์ผ๋ฉด ์๊ด๊ณ์๋ 0์ด๋ค.
์ฆ, ๋ ๋ณ์์ ๊ด๋ จ์ฑ์ด ํด์๋ก ์๊ด๊ณ์๋ 1์ ๊ฐ๊น์์ง๋ค.
๋ ๋ณ์์ ๊ด๋ จ์ฑ์ด ์ ์์๋ก ์๊ด๊ณ์๋ 0์ ๊ฐ๊น์์ง๋ค.
์๊ด๊ด๊ณ ๊ทธ๋ํ
์ค์ต
product <- read.csv("C:/ITWILL/2_Rwork/data/product.csv")
head(product) # ์น๋ฐ๋ ์ ์ ์ฑ ๋ง์กฑ๋(๋ฑ๊ฐ์ฒ๋ - 5์ ์ฒ๋)
๊ธฐ์ ํต๊ณ๋
summary(product) # ์์ฝํต๊ณ๋
sd(product$์ ํ_์น๋ฐ๋); sd(product$์ ํ_์ ์ ์ฑ); sd(product$์ ํ_๋ง์กฑ๋)
๋ณ์ ๊ฐ์ ์๊ด๊ด๊ณ ๋ถ์
ํ์) cor(x,y, method) # x๋ณ์, y๋ณ์, method(pearson): ๋ฐฉ๋ฒ
1) ์๊ด๊ณ์(coefficient of correlation) : ๋ ๋ณ๋ X,Y ์ฌ์ด์ ์๊ด๊ด๊ณ ์ ๋๋ฅผ ๋ํ๋ด๋ ์์น(๊ณ์)
cor(product$์ ํ_์น๋ฐ๋, product$์ ํ_์ ์ ์ฑ) # 0.4992086 -> ๋ค์ ๋์ ์์ ์๊ด๊ด๊ณ
cor(product$์ ํ_์น๋ฐ๋, product$์ ํ_๋ง์กฑ๋) # 0.467145 -> ๋ค์ ๋์ ์์ ์๊ด๊ด๊ณ
์ ์ฒด ๋ณ์ ๊ฐ ์๊ด๊ณ์ ๋ณด๊ธฐ
COR = cor(product, method="pearson") # ํผ์ด์จ ์๊ด๊ณ์ - default
str(COR) #num [1:3, 1:3] : matrix
ํน์ ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์๊ด๊ณ์ ๊ฒฐ๊ณผ์ ๋ํ ์์ธ
COR['์ ํ_๋ง์กฑ๋',]
๋ฐฉํฅ์ฑ ์๋ ์์์ผ๋ก ํํ - ๋์ผ ์์์ผ๋ก ๊ทธ๋ฃนํ ํ์ ๋ฐ ์์ ๋๋
install.packages("corrgram")
library(corrgram)
corrgram(product) # ์์ ์ ์ฉ - ๋์ผ ์์์ผ๋ก ๊ทธ๋ฃนํ ํ์
corrgram(product, upper.panel=panel.conf) # ์์น(์๊ด๊ณ์) ์ถ๊ฐ(์์ชฝ)
corrgram(product, lower.panel=panel.conf) # ์์น(์๊ด๊ณ์) ์ถ๊ฐ(์๋์ชฝ)
์ฐจํธ์ ๊ณก์ ๊ณผ ๋ณํ ์ถ๊ฐ
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
์๊ด์ฑ,p๊ฐ(*),์ ๊ท๋ถํฌ ์๊ฐํ - ๋ชจ์ ๊ฒ์ ์กฐ๊ฑด
chart.Correlation(product, histogram=TRUE)
* spearman : ์์ด์ฒ๋ ๋์ ์๊ด๊ณ์
install.packages('corrplot')
library(corrplot)
์๋์ฐจ ์ฐ๋น ๊ด๋ จ dataset
data("mtcars")
str(mtcars)
์๊ด๊ณ์ ํ๋ ฌ
COR = cor(mtcars)
COR['mpg',] #mpg:์ฐ๋น vs cyl(์ค๋ฆฐ๋ ์), disp(์์งํฌ๊ธฐ), hp(๋ง๋ ฅ)
corrplot(COR)
cor(mtcars$mpg, mtcars$wt) #-0.8676594
์ฐ์ ๋
qplot (x, y, data)
library(ggplot2)
qplot(wt, mpg, data=mtcars, color=factor(cyl)) #cyl์ ์์ธํ(๋ฒ์ฃผํ)์ผ๋ก ์ธ์
qplot(wt, mpg, data=mtcars, color=cyl) #cyl์ ์ฐ์ํ(์ซ์ํ)์ผ๋ก ์ธ์
[ํด์]์ค๋์ด ์ ๊ณ , ์ค๋ฆฐ๋ ์๊ฐ ์ ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฐ๋น๊ฐ ์ข๋ค.
03. ๊ณต๋ถ์ฐ
๊ณต๋ถ์ฐ? ๋ ํ๋ฅ ๋ณ์ ๊ฐ์ ๋ถ์ฐ(ํ๊ท ์์ ํผ์ง ์ ๋)๋ฅผ ๋ํ๋ด๋ ํต๊ณ
ํ๋ฅ ๋ณ์ : X, Y -> X ํ๋ณธํ๊ท (xฬ), Y ํ๋ณธํ๊ท (ศณ) - Cov(X,Y) = sum( (X-xฬ) * (Y-ศณ) ) / n
04. ๊ณต๋ถ์ฐ VS ์๊ด๊ณ์
Cov(X, Y) > 0 : X๊ฐ ์ฆ๊ฐํ ๋ Y๋ ์ฆ๊ฐ - Cov(X, Y) < 0 : X๊ฐ ์ฆ๊ฐํ ๋ Y๋ ๊ฐ์
Cov(X, Y) = 0 : ๋ ๋ณ์๋ ์ ํ๊ด๊ณ ์๋(์๋ก ๋ ๋ฆฝ์ ๊ด๊ณ)
๊ฐ์ด ํฐ ๋ณ์์ ์ํฅ์ ๋ฐ๋๋ค.(๊ฐ ํฐ ๋ณ์๊ฐ ์๊ด์ฑ ๋์) : ๋ฌธ์ ์
์๊ด๊ณ์? ๊ณต๋ถ์ฐ์ ๊ฐ๊ฐ์ ํ์คํธ์ฐจ๋ก ๋๋์ด ์ ๊ทํํ ํต๊ณ
๊ณต๋ถ์ฐ ๋ฌธ์ ์ ํด๊ฒฐ
๋ถํธ๋ ๊ณต๋ถ์ฐ๊ณผ ๋์ผ, ๊ฐ์ ์ ๋๊ฐ 1์ ๋์ง ์์(-1 ~ 1)
Corr(X, Y) = Cov(X,Y) / std(X) * std(Y
(1) ๊ณต๋ถ์ฐ
๊ณต๋ถ์ฐ ์ : Cov(X,Y) = sum((X-xbar) * (Y-ybar)) / n
0.5463331 : ์ ํ_์ ์ ์ฑ:X, ์ ํ_๋ง์กฑ๋:Y
X = product$'์ ํ_์ ์ ์ฑ'
Y = product$'์ ํ_๋ง์กฑ๋'
Xbar = mean(X)
Ybar = mean(Y)
Cov_xy = mean((X-Xbar) * (Y-Ybar))
Cov_xy = sum((X-Xbar) * (Y-Ybar)) / length(X)
Cov_xy #0.5442637
(2) ์๊ด๊ณ์
0.7668527 : X:์ ํ_์ ์ ์ฑ, Y:์ ํ_๋ง์กฑ๋
Cor_xy = Cov_xy / (sd(X) * sd(Y)) #-1~+1
Cor_xy #0.763948
05. scale์ด ๋ค๋ฅธ ๋ณ์
getwd()
setwd("C:/ITWILL/2_Rwork/data")
score_iq = read.csv('score_iq.csv')
head(score_iq)
score VS iq(100๋จ์) academy(1๋จ์)
cov(score_iq[-1])
score iq academy
score 42.968412 51.3375391 7.1199105
[๋ฌธ์ ์ ] ๊ฐ์ด ํฐ ๋ณ์๊ฐ ์๊ด์ฑ์ด ๋์ ๊ฒ์ผ๋ก ํด์
cor(score_iq[-1])
score iq academy
score 1.0000000 0.88222034 0.8962647
[ํด๊ฒฐ] ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ cor๋ก ์๊ด๋ถ์์ ๋ง์ด ํจ
<๋ฌธ์ ํด๊ฒฐ> ๋ฐ์ดํฐ ๋ณํ (ํ์คํ, ์ ๊ทํ)
๋ชฉ์ : scale์ด ๋ค๋ฅธ ๊ฒฝ์ฐ, ๋ฒ์๋ฅผ ์ผ์ ํ๊ฒ ๊ท๊ฒฉํ
ํ๊ท :0, ํ์คํธ์ฐจ:1๋ก ๋ณํ
1. ํ์คํ
๋ฐ์ดํฐ๋ฅผ 0์ ์ค์ฌ์ผ๋ก ์์ชฝ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํฌ์ํค๋ ๋ฐฉ๋ฒ
๊ฐ ๋ฐ์ดํฐ๋ค์ ํ๊ท ์ ๊ธฐ์ค์ผ๋ก ์ผ๋ง๋ ๋จ์ฌ์ ธ ์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ผ๋ก ๋ณํ
ํ์คํ ๊ณต์ : z = x-mu / sigma ์ผ๋, z_score = scale(x=score_iq, center=T, scale=T)
summary(z_score) #ํ๊ท (Mean):0.0000
sd(z_score) #๋ชจ๋ ๋ณ์์ ํ์คํธ์ฐจ:0.9972153 (1์ ๊ทผ์ฌ์น)
str(z_score) #num [1:150, 1:6]:๋งคํธ๋ฆญ์ค ํ์์ผ๋ก ๋ฐํ
cov(z_score[,-1]) #sid์ ์ธํ ์ ๋ณด ๋ฐํ
score iq academy
score 1.0000000 0.88222034 0.8962647
2. ์ ๊ทํ=min/max scaling
๋ฐ์ดํฐ๋ฅผ ํน์ ๊ตฌ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ์ฒ๋๋ฒ
๋ฐ์ดํฐ ๊ตฐ ๋ด์์ ํน์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ง๋ ์์น๋ฅผ ๋ณผ ๋ ์ฌ์ฉ
์ ๊ทํ ๊ณต์ : x-min(x) / max(x) - min(x)
head(score_iq) #scaling ์ด์
sid score iq academy game tv
1 10001 90 140 2 1 0
nor_scale = function(x){
nor = (x-min(x)) / (max(x) - min(x))
return(nor)
}
nor_score = apply(score_iq, 2, nor_scale) #์ ์ฉํ ๋ฐ์ดํฐ, 2:์ด๋จ์, apply์ํฌ ํจ์
head(nor_score)
sid score iq academy
[1,] 0.000000000 1.00 1.0000000 0.50
summary(nor_score) #num[1:150, 1:6]
๊ณต๋ถ์ฐ ํ๋ ฌ ์กฐํ
cov(nor_score[,-1])
score iq academy
score 0.06874946 0.058671473 0.07119911
'๋ฐ์ดํฐ๋ถ์๊ฐ ๊ณผ์ > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY22. R ๊ธฐ๊ณํ์ต์ด๋ก , ์ ํํ๊ท๋ถ์ (0) | 2021.10.15 |
---|---|
DAY21. ์ฃผ์ฑ๋ถ๋ถ์, ์์ธ๋ถ์ (0) | 2021.10.14 |
DAY19. R T๊ฒ์ ๊ณผ ๋ถ์ฐ๋ถ์ (0) | 2021.10.12 |
DAY18. R ๊ต์ฐจ๋ถ์๊ฒ์ (์นด์ด์ ๊ณฑ๊ฒ์ ) (0) | 2021.10.08 |
DAY17. R ํต๊ณ๋ถ์์ ์ฐจ, ํต๊ณ๊ธฐ๋ณธ์ง์ (0) | 2021.10.07 |