Correlation Analysis

R Programming Basis

R Code Description for Correlation Analysis

Yeongeun Jeon
07-15-2022

1. 상관분석(Correlation Analysis)

연속형 변수 사이에 선형적인 관계가 존재하는지, 또한 존재한다면 어느 정도 강한 선형관계가 존재하는지를 파악하기 위한 통계적 분석방법을 상관분석이라고 한다. 여기서, 선형관계란, 한 변수가 증가하면 다른 한 변수도 증가 혹은 감소하는 관계를 의미한다. 상관분석에는 두 변수 사이의 선형관계 정도와 방향을 수치로 나타낸 상관계수(Correlation Coefficient)를 사용한다. 상관계수에는 대표적으로 피어슨 상관계수(Pearson Correlation Coefficient), 켄달 타우 계수(Kendall Tau Coefficient), 스피어만 상관계수(Spearman Correlation Coefficient)가 있다.

상관계수 설명
피어슨 \(\cdot\) 두 변수가 각각 간격/비율척도로 측정된 경우에 사용되는 상관계수
\(\cdot\) 두 변수 중 적어도 한 변수는 정규성을 만족
켄달 타우 \(\cdot\) 피어슨 상관계수의 비모수 버전으로 두 변수가 서열로 측정된 경우에 사용되는 상관계수
스피어만 \(\cdot\) 피어슨 상관계수의 비모수 버전으로 두 변수가 서열로 측정된 경우에 사용되는 상관계수

※ 여기서는 두 변수가 정규분포를 따른다는 가정하에서 피어슨 상관계수에 대해서만 설명한다.


2. 산점도


2-1. 함수 plot()

x <- c(20, 65, 39, 42, 30, 54, 58, 77)
y <- c(10, 32, 17, 29, 18, 43, 39, 54)

plot(x, y, 
     xlab = "X",                  # x축 label     ylab = "Y",                  # y축 label     main = "산점도"))             # Titlee

Result! 변수 “x”가 증가할 때 변수 “y”도 같이 증가하는 선형관계가 보인다.


2-2. 함수 geom_point()

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”도 같이 증가하는 선형관계가 보인다.


2-3. 산점도 행렬

# 함수 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” 사이에는 양의 상관과 무상관 중 정확한 판단을 하기 어렵다.


3. 상관계수

출처 : https://ybeaning.tistory.com/19
출처 : https://ko.wikipedia.org/wiki/%EC%83%81%EA%B4%80_%EB%B6%84%EC%84%9D
# 예제 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에 가까우므로, 두 변수 사이에는 약한 양의 상관관계가 있다고 할 수 있다.

3-1. 상관행렬 그래프

3-1-1. 함수 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"    # 상관계수 색깔
         )


3-1-2. 함수 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")        # 색깔


4. 가설검정

# 예제 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”의 상관계수는 통계적으로 유의하다고 할 수 없으며, 두 변수 사이에 선형관계는 존재하지 않는다.


5. 예제

5-1. 예제1

어떤 학급의 학생 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\)는 기각된다. 즉, 키와 몸무게의 상관계수는 통계적으로 유의하다고 할 수 있으며, 두 변수 사이에 선형관계는 존재한다.


5-2. 예제2

각성제의 사용량과 각성제를 투여받은 피설험자가 청각신호에 반응하는 데 걸리는 시간과의 관계를 연구하는 실험에서 다음의 데이터를 얻었다.

사용량(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\)는 기각되지 않는다. 즉, 각성제의 사용량과 반응시간의 상관계수는 통계적으로 유의하다고 할 수 없으며, 두 변수 사이에 선형관계는 존재하지 않는다.


5-3. 예제3

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\)는 기각된다. 즉, 연비와 배기량의 상관계수는 통계적으로 유의하다고 할 수 있으며, 두 변수 사이에 선형관계는 존재한다.

Reuse

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 ...".