R Code Description for Correlation Analysis
두
연속형
변수 사이에선형적인 관계
가 존재하는지, 또한 존재한다면 어느 정도 강한 선형관계가 존재하는지를 파악하기 위한 통계적 분석방법을상관분석
이라고 한다. 여기서, 선형관계란, 한 변수가 증가하면 다른 한 변수도 증가 혹은 감소하는 관계를 의미한다. 상관분석에는 두 변수 사이의 선형관계 정도와 방향을 수치로 나타낸 상관계수(Correlation Coefficient)를 사용한다. 상관계수에는 대표적으로 피어슨 상관계수(Pearson Correlation Coefficient), 켄달 타우 계수(Kendall Tau Coefficient), 스피어만 상관계수(Spearman Correlation Coefficient)가 있다.
상관계수 | 설명 |
---|---|
피어슨 | \(\cdot\) 두 변수가 각각 간격/비율척도로 측정된 경우에 사용되는 상관계수 \(\cdot\) 두 변수 중 적어도 한 변수는 정규성을 만족 |
켄달 타우 | \(\cdot\) 피어슨 상관계수의 비모수 버전으로 두 변수가 서열로 측정된 경우에 사용되는 상관계수 |
스피어만 | \(\cdot\) 피어슨 상관계수의 비모수 버전으로 두 변수가 서열로 측정된 경우에 사용되는 상관계수 |
※ 여기서는 두 변수가 정규분포를 따른다는 가정하에서 피어슨 상관계수에 대해서만 설명한다.
산점도를 작성
하여 선형성을 확인해야 한다.
plot()
을 사용하거나 Package ggplot2
에 내장된
함수 geom_point()
를 사용하면 된다.Result!
변수 “x”가 증가할 때 변수 “y”도 같이 증가하는
선형관계가 보인다.
pacman::p_load("ggplot2")
x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
df <- data.frame(x = x, y = y)
ggplot(df, aes(x = x, y = y)) +
geom_point() +
labs(x = "X", y= "Y", title = "산점도"))++ # x축, y축, Title theme_bw() +
theme(plot.title = element_text(size=20, hjust = 0.5))
Result!
변수 “x”가 증가할 때 변수 “y”도 같이 증가하는
선형관계가 보인다.
plot()
와 Package
GGally
에 내장된 함수 ggpairs()
를 통해 작성할
수 있다.# 함수 plot()x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
z <- c(100, 150, 102, 111, 126, 109, 134, 115)
df <- data.frame(x = x, y = y, z = z)
plot(df[,1:3],
main = "산점도 행렬") # Title
# Package GGally에 내장된 함수 ggpairs()
pacman::p_load("GGally")
ggpairs(df) +
labs(title = "산점도 행렬") +
theme_bw() +
theme(plot.title = element_text(size=20, hjust = 0.5))
Result!
변수 “x”와 “y” 사이, 변수 “x”와 “z” 사이에는
양의 상관이 존재하는 것으로 보인다. 하지만, 변수 “y”와 “z” 사이에는 양의
상관과 무상관 중 정확한 판단을 하기 어렵다.
대략적으로만 분석할 수 있다는 단점
이 있다.상관계수가 사용
된다.
측정단위에 영향을 받지 않는다
.cor(변수1, 변수2)
를 사용하면 된다.# 예제 11
x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
# 함수 cor()cor(x, y, method = "pearson")
[1] 0.9163436
# 식 (1)
r <- sum( (x - mean(x))*(y - mean(y)) )/(sqrt( sum((x - mean(x))^2) )*sqrt( sum((y - mean(y))^2) ))
r
[1] 0.9163436
Result!
두 변수 “x”와 “y” 사이의 표본상관계수 \(r=0.916\)이며, 표본상관계수의 부호가 양이기
때문에 두 변수는 양의 상관관계를 가진다. 게다가, 표본상관계수의 값이 1에
매우 가까우므로, 두 변수 사이에는 강한 양의 상관관계가 있다고 할 수
있다.
# 예제 22
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
z <- c(100, 150, 102, 111, 126, 109, 134, 115)
# 함수 cor()cor(y, z, method = "pearson")
[1] 0.2787342
# 식 (1)
r <- sum( (y - mean(y))*(z - mean(z)) )/(sqrt( sum((y - mean(y))^2) )*sqrt( sum((z - mean(z))^2) ))
r
[1] 0.2787342
Result!
두 변수 “y”와 “z” 사이의 표본상관계수 \(r=0.279\)이며, 표본상관계수의 부호가 양이기
때문에 두 변수는 양의 상관관계를 가진다. 하지만, 표본상관계수의 값이 0에
가까우므로, 두 변수 사이에는 약한 양의 상관관계가 있다고 할 수 있다.
corrplot
에 내장되어 있는 함수
corrplot()
을 이용하면 상관행렬 그래프를 작성할 수 있으며
자세한 옵션은 여기를
참고한다.pacman::p_load("corrplot")
x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
z <- c(100, 150, 102, 111, 126, 109, 134, 115)
df <- data.frame(x = x, y = y, z = z)
cor <- cor(df)
cor
x y z
x 1.0000000 0.9163436 0.4891900
y 0.9163436 1.0000000 0.2787342
z 0.4891900 0.2787342 1.0000000
corrplot(cor, # 상관 행렬 method = "shade", # 상관계수를 보여주는 방식방식
addshade = "all", # 상관관계 방향선 제시
type = "lower", # 행렬을 보여주는 방식
tl.col = "black", # 변수명 라벨 색깔색깔
tl.srt = 0, # 대각선위쪽에 위치한 변수명의 기울임 정도도
addCoef.col = "red" # 상관계수 색깔
)
GGally
에 내장되어 있는 함수
ggcorr()
을 이용하면 상관행렬 그래프를 작성할 수 있으며
자세한 옵션은 여기를
참고한다.pacman::p_load("GGally")
x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
z <- c(100, 150, 102, 111, 126, 109, 134, 115)
df <- data.frame(x = x, y = y, z = z)
ggcorr(df, # 데이터 label = TRUE, # 라벨 명시 여부여부
label_round = 3, # 상관계수 소숫점 이하 자릿수NA= 6, # 상관계수 글자 크기 low = "steelblue", # 색깔
mid = "white", # 색깔
high = "darkred") # 색깔
cor.test(변수1, 변수2)
를 사용할 수 있다.# 예제 11
x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
# 함수 cor.test()cor.test(x, y, method = "pearson", alternative = "two.sided")
Pearson's product-moment correlation
data: x and y
t = 5.6059, df = 6, p-value = 0.001373
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5974716 0.9849878
sample estimates:
cor
0.9163436
Result!
두 변수 “x”와 “y”의 관측값으로 계산된 검정통계량
값 \(t=5.6059\)이며, \(p-\)값\(=0.001373\)이다. 이러한 결과를 바탕으로
유의수준 \(\alpha=0.05\)하에서 \(p\)-값은 \(\alpha\)보다 작기 때문에 귀무가설 \(H_0\)는 기각된다. 즉, 두 변수 “x”와 “y”의
상관계수는 통계적으로 유의하다고 할 수 있으며, 두 변수 사이에 선형관계가
존재한다.
# 예제 22
y <- c(10, 32, 17, 29, 18, 43, 39, 54)
z <- c(100, 150, 102, 111, 126, 109, 134, 115)
# 함수 cor()cor.test(y, z, method = "pearson", alternative = "two.side")
Pearson's product-moment correlation
data: y and z
t = 0.71093, df = 6, p-value = 0.5038
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.5300491 0.8219606
sample estimates:
cor
0.2787342
Result!
두 변수 “y”와 “z”의 관측값으로 계산된 검정통계량
값 \(t=0.71093\)이며, \(p-\)값\(=0.5038\)이다. 이러한 결과를 바탕으로
유의수준 \(\alpha=0.05\)하에서 \(p\)-값은 \(\alpha\)보다 크기 때문에 귀무가설 \(H_0\)는 기각되지 않는다. 즉, 두 변수 “y”와
“z”의 상관계수는 통계적으로 유의하다고 할 수 없으며, 두 변수 사이에
선형관계는 존재하지 않는다.
어떤 학급의 학생 9명을 대상으로 키(Height)와 몸무게(Weight)를 측정하여 다음의 결과를 얻었다.
키(cm) | 150 | 155 | 165 | 168 | 172 | 175 | 178 | 182 | 182 |
몸무게(kg) | 41 | 50 | 48 | 50 | 55 | 52 | 72 | 68 | 75 |
키와 몸무게에 대한 산점도를 작성하고 상관분석을 수행하여라.
height <- c(150, 155, 165, 168, 172, 175, 178, 182, 182)
weight <- c(41, 50, 48, 50, 55, 52, 72, 68, 75)
df <- data.frame(x = height, y = weight)
df
x y
1 150 41
2 155 50
3 165 48
4 168 50
5 172 55
6 175 52
7 178 72
8 182 68
9 182 75
# 산점도도
pacman::p_load("ggplot2")
ggplot(df, aes(x = x, y = y)) +
geom_point() +
labs(x = "Height", y = "Weight") +
theme_bw()
Result!
키와 몸무게 사이에 양의 상관이 있는 것으로
보인다.
# 상관계수
cor(height, weight, method = "pearson")
[1] 0.8519345
Result!
키와 몸무게 사이의 표본상관계수는 \(r=0.852\)이며, 강한 양의 상관관계가
존재한다.
# 가설검정검정
cor.test(height, weight, method = "pearson", alternative = "two.sided")
Pearson's product-moment correlation
data: height and weight
t = 4.3044, df = 7, p-value = 0.003547
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4325374 0.9682384
sample estimates:
cor
0.8519345
Result!
키와 몸무게의 관측값으로 계산된 검정통계량 값
\(t=4.3044\)이며, \(p\)-값\(=0.003547\)이다. 이러한 결과를 바탕으로
유의수준 \(\alpha=0.05\)하에서 \(p\)-값은 \(\alpha\)보다 작기 때문에 귀무가설 \(H_0\)는 기각된다. 즉, 키와 몸무게의
상관계수는 통계적으로 유의하다고 할 수 있으며, 두 변수 사이에 선형관계는
존재한다.
각성제의 사용량과 각성제를 투여받은 피설험자가 청각신호에 반응하는 데 걸리는 시간과의 관계를 연구하는 실험에서 다음의 데이터를 얻었다.
사용량(mg) | 1 | 3 | 4 | 7 | 9 | 12 | 13 | 14 |
반응시간(초) | 3.5 | 2.1 | 2.1 | 1.3 | 1.3 | 2.2 | 2.6 | 4.2 |
산점도를 작성하고 상관분석을 수행하여라,
mg <- c(1, 3, 4, 7, 9, 12, 13, 14)
sec <- c(3.5, 2.1, 2.1, 1.3, 1.2, 2.2, 2.6, 4.2)
df <- data.frame(x = mg, y = sec)
df
x y
1 1 3.5
2 3 2.1
3 4 2.1
4 7 1.3
5 9 1.2
6 12 2.2
7 13 2.6
8 14 4.2
# 산점도도
pacman::p_load("ggplot2")
ggplot(df, aes(x = x, y = y)) +
geom_point() +
labs(x = "사용량"", y=="반응시간"))++
theme_bw()
Result!
각성제의 사용량과 반응시간은 선형관계가 없는
것으로 보인다.
# 상관계수
cor(mg, sec, method = "pearson")
[1] 0.1673518
Result!
각성제의 사용량과 반응시간 사이의 표본상관계수는
\(r=0.167\)이며, 약한 양의 상관관계가
존재한다.
# 가설검정검정
cor.test(mg, sec, method = "pearson", alternative = "two.sided")
Pearson's product-moment correlation
data: mg and sec
t = 0.41579, df = 6, p-value = 0.692
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.6091581 0.7800364
sample estimates:
cor
0.1673518
Result!
각성제의 사용량과 반응시간의 관측값으로 계산된
검정통계량 값 \(t=0.41579\)이며, \(p\)-값\(=0.692\)이다. 이러한 결과를 바탕으로
유의수준 \(\alpha=0.05\)하에서 \(p\)-값은 \(\alpha\)보다 크기 때문에 귀무가설 \(H_0\)는 기각되지 않는다. 즉, 각성제의
사용량과 반응시간의 상관계수는 통계적으로 유의하다고 할 수 없으며, 두
변수 사이에 선형관계는 존재하지 않는다.
R에 내장되어 있는 데이터 “mtcars”는 1974년 Motor Trend US magazine에서 추출할 것으로 1973년, 1974년 모델의 32개 자동차들의 디자인과 성능을 비교한 것이다. 11개의 변수들 중 변수 “mpg” (연비)와 “disp” (배기량) 사이의 산점도를 작성하고 상관분석을 수행하여라.
data(mtcars)
ex3 <- mtcars
ex3
mpg cyl disp hp drat wt qsec vs am gear
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4
carb
Mazda RX4 4
Mazda RX4 Wag 4
Datsun 710 1
Hornet 4 Drive 1
Hornet Sportabout 2
Valiant 1
Duster 360 4
Merc 240D 2
Merc 230 2
Merc 280 4
Merc 280C 4
Merc 450SE 3
Merc 450SL 3
Merc 450SLC 3
Cadillac Fleetwood 4
Lincoln Continental 4
Chrysler Imperial 4
Fiat 128 1
Honda Civic 2
Toyota Corolla 1
Toyota Corona 1
Dodge Challenger 2
AMC Javelin 2
Camaro Z28 4
Pontiac Firebird 2
Fiat X1-9 1
Porsche 914-2 2
Lotus Europa 2
Ford Pantera L 4
Ferrari Dino 6
Maserati Bora 8
Volvo 142E 2
# 산점도도
pacman::p_load("ggplot2")
ggplot(ex3, aes(x = mpg, y = disp)) +
geom_point() +
labs(x = "연비"", y=="배기량")"+ +
theme_bw()
Result!
연비와 배기량 사이에 음의 상관이 있는 것으로
보인다.
# 상관계수
cor(ex3$mpg, ex3$disp, method = "pearson")
[1] -0.8475514
Result!
연비와 배기량 사이의 표본상관계수는 \(r=-0.848\)이며, 강한 음의 상관관계가
존재한다.
# 가설검정검정
cor.test(ex3$mpg, ex3$disp, method = "pearson", alternative = "two.sided")
Pearson's product-moment correlation
data: ex3$mpg and ex3$disp
t = -8.7472, df = 30, p-value = 9.38e-10
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.9233594 -0.7081376
sample estimates:
cor
-0.8475514
Result!
연비와 배기량의 관측값으로 계산된 검정통계량 값
\(t=-8.7472\)이며, \(p\)-값\(=9.38e-10\)이다. 이러한 결과를 바탕으로
유의수준 \(\alpha=0.05\)하에서 \(p\)-값은 \(\alpha\)보다 작기 때문에 귀무가설 \(H_0\)는 기각된다. 즉, 연비와 배기량의
상관계수는 통계적으로 유의하다고 할 수 있으며, 두 변수 사이에 선형관계는
존재한다.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".