통계 분석 기법을 이용한 가설 검정

통계적 가설 검정이란?

기술 통계와 추론 통계

통계 분석은 기술 통계와 추론 통계로 나눌 수 있습니다.

데이터를 요약해 설명하는 통계 기법을 기술 통계(Descriptive statistics)라고 합니다. 예를 들어, 사람들이 받는 월급을 집계해 전체 월급 평균을 구한다면 이는 기술 통계 분석 입니다.

추론 통계(Inferential statistics)는 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 통계 기법입니다. 예를 들어, 수집된 데이터에서 성별에 따라 월급에 차이가 있는 것으로 나타났을 때, 이런 차이가 우연히 발생할 확률을 계산합니다.

만약 이런 차이가 우연히 나타날 확률이 작다면 성별에 따른 월급 차이가 통계적으로 유의하다(statistically significant)고 결론 내립니다. 반대로 이런 차이가 우연히 나타날 확률이 크다면 성별에 따른 월급 차이가 통계적으로 유의하지 않다(not statistically significant)고 결론 내립니다.

통계적 가설 검정

유의확률을 이용해 가설을 검정하는 방법을 통계적 가설 검정(Statistical hypothesis test)이라고 합니다.

유의확률(Significance probability, p-value)은 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률을 의미합니다.

t 검정 - 두 집단의 평균 비교

t 검정(t-test)은 두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법입니다. R에 내장된 t.test()를 이용해 t 검정을 할 수 있습니다.

In [5]:
library(ggplot2)
mpg <- as.data.frame(ggplot2::mpg)
In [6]:
library(dplyr)

mpg_diff <- mpg %>%
  select(class, cty) %>%
  filter(class %in% c('compact', 'suv'))

head(mpg_diff)
table(mpg_diff$class)
classcty
compact18
compact21
compact20
compact21
compact16
compact18
compact     suv 
     47      62 
In [10]:
t.test(data = mpg_diff,
       cty ~ class, 
       var.equal = T)
	Two Sample t-test

data:  cty by class
t = 11.917, df = 107, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 5.525180 7.730139
sample estimates:
mean in group compact     mean in group suv 
             20.12766              13.50000 

p-value < 2.2e-16 로 p-value 가 0.05보다 작기 때문에 이 분석 결과는 'compact 와 suv 간 평균 도시 연비 차이가 통계적으로 유의하다' 고 해석할 수 있다.

In [11]:
# 일반 휘발유과 고급 휘발유의 도시 연비 t 검정
mpg_diff2 <- mpg %>%
  select(fl, cty) %>%
  filter(fl %in% c('r', 'p'))

table(mpg_diff2)

t.test(data=mpg_diff2, cty ~ fl, var.equal = T)
   cty
fl  11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28
  p  4  1  0  2  6  8  4  7  7  3  7  2  1  0  0  0  0
  r 13  7 21 16 18 11 11 19 13  8 16  2  2  4  2  3  2
	Two Sample t-test

data:  cty by fl
t = 1.0662, df = 218, p-value = 0.2875
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.5322946  1.7868733
sample estimates:
mean in group p mean in group r 
       17.36538        16.73810 

p-value = 0.2875 로 0.05보다 큼. 실제로는 차이가 없는데 우연에 의해 이런 차이가 관찰될 확률이 28.75% 라는 의미입니다.

상관분석 - 두 변수의 관계성 분석

실업자 수와 개인 소비 지출의 상관관계

In [13]:
economics <- as.data.frame(ggplot2::economics)
cor.test(economics$unemploy, economics$pce)
	Pearson's product-moment correlation

data:  economics$unemploy and economics$pce
t = 18.605, df = 572, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5603164 0.6625460
sample estimates:
      cor 
0.6139997 
  • p-value < 2.2e-16 가 0.05 미만이므로, 실업자 수와 개인 소비 지출의 상관이 통계적으로 유의하다고 해석
  • 0.6139997 상관계수가 양수 0.61 이므로, 실업자 수와 개인 소비 지출은 한 변수가 증가하면 다른 변수가 증가하는 정비례 관계임을 알 수 있다.

상관행렬 히트맵 만들기

mtcars는 자동차 32종의 11개 속성에 대한 정보를 담고 있는 데이터입니다.

In [15]:
head(mtcars)
mpgcyldisphpdratwtqsecvsamgearcarb
Mazda RX421.0 6 160 110 3.90 2.62016.460 1 4 4
Mazda RX4 Wag21.0 6 160 110 3.90 2.87517.020 1 4 4
Datsun 71022.8 4 108 93 3.85 2.32018.611 1 4 1
Hornet 4 Drive21.4 6 258 110 3.08 3.21519.441 0 3 1
Hornet Sportabout18.7 8 360 175 3.15 3.44017.020 0 3 2
Valiant18.1 6 225 105 2.76 3.46020.221 0 3 1
In [17]:
car_cor <- cor(mtcars)
round(car_cor, 2)
mpgcyldisphpdratwtqsecvsamgearcarb
mpg 1.00-0.85-0.85-0.78 0.68-0.87 0.42 0.66 0.60 0.48-0.55
cyl-0.85 1.00 0.90 0.83-0.70 0.78-0.59-0.81-0.52-0.49 0.53
disp-0.85 0.90 1.00 0.79-0.71 0.89-0.43-0.71-0.59-0.56 0.39
hp-0.78 0.83 0.79 1.00-0.45 0.66-0.71-0.72-0.24-0.13 0.75
drat 0.68-0.70-0.71-0.45 1.00-0.71 0.09 0.44 0.71 0.70-0.09
wt-0.87 0.78 0.89 0.66-0.71 1.00-0.17-0.55-0.69-0.58 0.43
qsec 0.42-0.59-0.43-0.71 0.09-0.17 1.00 0.74-0.23-0.21-0.66
vs 0.66-0.81-0.71-0.72 0.44-0.55 0.74 1.00 0.17 0.21-0.57
am 0.60-0.52-0.59-0.24 0.71-0.69-0.23 0.17 1.00 0.79 0.06
gear 0.48-0.49-0.56-0.13 0.70-0.58-0.21 0.21 0.79 1.00 0.27
carb-0.55 0.53 0.39 0.75-0.09 0.43-0.66-0.57 0.06 0.27 1.00
In [18]:
install.packages('corrplot')
library(corrplot)
Installing package into 'C:/Users/Playdata/Documents/R/win-library/3.5'
(as 'lib' is unspecified)
package 'corrplot' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\Playdata\AppData\Local\Temp\RtmpI54u2T\downloaded_packages
corrplot 0.84 loaded
In [19]:
corrplot(car_cor)
In [20]:
corrplot(car_cor, method='number')
In [22]:
col <- colorRampPalette(c('#BB4444', '#EE9988', '#FFFFFF', '#77AADD', '#4477AA'))
corrplot(car_cor,
         method = 'color',
         col = col(200),
         type = 'lower',
         order = 'hclust',
         addCoef.col = 'black',
         tl.col = 'black',
         tl.srt = 45,
         diag = F)