1. 분산
x <- 1:5
y <- 2:6
x; y
var(x) # var() 분산 - 2.5
var(y) # 2.5
2. 공분산 : 관계를 정확하게 알수없음
cov(1:5, 2:6) # 2.5
cov(1:5, c(3,3,3,3,3)) # 0
cov(1:5, 5:1) # -2.5
cov(1:5, c(5000,4000,3000,2000,1000)) # -2500
plot(1:5, 2:6) # 양의 상관관계
plot(1:5, c(3,3,3,3,3)) # 관계없음
plot(1:5, 5:1) # 음의 상관관계
plot(1:5, c(5000,4000,3000,2000,1000)) # 음의 상관관계
3. 상관계수 : 두 변수간의 분산 관계를 알수 있음.
cor(1:5, 2:6) # 1
cor(1:5, c(3,3,3,3,3)) # 0
cor(1:5, 5:1) # -1
cor(1:5, c(5000,4000,3000,2000,1000)) # -1
# file read 후 연습
hf <- read.csv("testdata/galton.csv")
dim(hf) # 898 6
head(hf, 3)
str(hf)
summary(hf)
# 표본 추출 : 아버지(father)와 아들(height)의 키 자료 sampling
hf_man <- subset(hf, sex == 'M') # sex column에서 'M'인 값만
dim(hf_man) #465 6
hf_man <- hf_man[c('father','height')] # column이 father, height인 데이터만
dim(hf_man) # 465 2
head(hf_man)
# father height
# 1 78.5 73.2
# 5 75.5 73.5
# 6 75.5 72.5
# 9 75.0 71.0
# 11 75.0 70.5
# 12 75.0 68.5
# 수식을 직접 사용하여 공분산 산출
f_mean <- mean(hf_man$father) # 아버지의 키 평균
s_mean <- mean(hf_man$height) # 아들 키 평균
cov_num <- sum((hf_man$father - f_mean) * (hf_man$height - s_mean)) # (아버지키의 편차 * 아들키 편차)의 합
cov_num <- cov_num / (nrow(hf_man)-1) # (아버지키의 편차 * 아들키 편차)의 평균
cov_num # 2.368441
# 내장함수 사용하여 공분산 산출
cov(hf_man$father, hf_man$height) # 2.368441
# 상관계수
cor(hf_man$father, hf_man$height) # 0.3913174
plot(height ~ father, data=hf_man, xlable='아버지 키', ylable='아들 키') # 산점도 : 데이터를 점으로 표시
abline(lm(height ~ father, data=hf_man), col='red', lwd=5)
# abline() : 추세선, lm() : 선형 모델, lwd : 선 두께
cor.test(hf_man$father, hf_man$height, method='pearson') #pearson(선형), spearman(범주형), kwndal
# 아버지의 키가 1단위 증가하면, 아들의 키는 0.39 단위 정도 증가 한다고 할 수 있다.
# Pearson's product-moment correlation
#
#data: hf_man$father and hf_man$height
#t = 9.1498, df = 463, p-value < 2.2e-16
#alternative hypothesis: true correlation is not equal to 0
#95 percent confidence interval:
# 0.3114667 0.4656805
#sample estimates:
# cor
#0.3913174
4. 상관분석
getwd()
result <- read.csv("testdata/drinking_water.csv", header= TRUE, encoding="UTF-8")
head(result, 3)
# 친밀도 적절성 만족도
# 1 3 4 3
# 2 3 3 2
# 3 4 4 4
summary(result)
var(result$친밀도) # 분산 - 0.9415687
sd(result$친밀도) # 표준편차 - 0.9703446
hist(result$친밀도)
cov(result$친밀도, result$적절성) # 공분산 - 0.4164218
cor(result) # 상관계수
# 친밀도 적절성 만족도
# 친밀도 1.0000000 0.4992086 0.4671450
# 적절성 0.4992086 1.0000000 0.7668527
# 만족도 0.4671450 0.7668527 1.0000000
symnum(cor(result)) # 숫자를 심볼로 표현
# 친 적 만
# 친밀도 1
# 적절성 . 1
# 만족도 . , 1
# attr(,"legend")
# [1] 0 ‘ ’ 0.3 ‘.’ 0.6 ‘,’ 0.8 ‘+’ 0.9 ‘*’ 0.95 ‘B’ 1
#상관계수
cor(result$친밀도, result$적절성) # 0.4992086
cor(result$친밀도, result$만족도) # 0.467145
cor(result$적절성, result$만족도) # 0.7668527
cor(result$적절성 + result$친밀도, result$만족도) # 0.7017394
5. corrgram
install.packages("corrgram")
library("corrgram")
help("corrgram")
corrgram(result)
corrgram(result, upper.panel = panel.conf)
corrgram(result, lower.panel = panel.conf)
6. PerformanceAnalytics
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(result, histogram = , pch="+")
'BACK END > R' 카테고리의 다른 글
[R] R 정리 11 - 다중 선형 회귀 (0) | 2021.01.29 |
---|---|
[R] R 정리 10 - 단순 선형 회귀 (0) | 2021.01.29 |
[R] R 정리 8 - Web Scraping, DB (0) | 2021.01.29 |
[R] R 정리 7 - 내장함수, 시각화 (0) | 2021.01.28 |
[R] R 정리 6 - 조건문, 반복문 (0) | 2021.01.28 |