기본 콘텐츠로 건너뛰기

5. 통계적 가설검정

Ch3. 가설검정

통계적 가설검정은 어떤 가설을 세우고 그 가설이 사실일 가능성과 사실이 아닐 가능성을 비교해서 의사결정을 하는 하나의 추론과정입니다. 그리고 언제나 강조하지만, 가능성은 곧 확률로 표현되고 확률을 계산하기 위해서는 확률분포가 필요합니다. 결국 추정량의 확률분포를 가정하거나 근사시키는 방법으로 구간추정과 동일한 아이디어, 동일한 결과를 보여줍니다. 가설검정을 이해하기 위해서는 몇 가지 용어에 대한 학습이 필요합니다. 정리해 보도록 하겠습니다.

  • 가설검정과 관련된 용어
귀무가설(Null Hypothesis, )

귀무가설은 분석자가 검정하기를 원하는 가설입니다. 또한 통계적 가설검정의 시작이자 끝입니다. 왜 그런지는 가설검정의 과정을 간단하게 요약하면 다음과 같습니다.

  1. 얻어진 표본을 이용해 귀무가설 하에서 가정되는 확률분포를 계산할 수 있는 형태를 만듭니다.
  2. 귀무가설 하에서 가정되는 확률분포를 검토해서 의사결정을 합니다.

귀무가설이 사실일 것 같으면 '귀무가설을 기각하지 못한다' 라고 표현하며 그렇지 않으면 '귀무가설을 기각한다' 라고 표현합니다. 위의 표현을 보면 알 수 있듯이 모든 가설검정은 귀무가설 중심으로 이루어집니다. 이는 통계적으로 매우 중요한 관점입니다. 검정의 모든 과정은 귀무가설이 사실이라는 가정하에 이루어지고 일반적으로 우리의 목표는 귀무가설이 사실이 아니라는 것을 증명하는 것입니다. 그렇기에 귀무가설을 기각하지 못한다고 하더라도 귀무가설이 사실이라고 해석하기 보다는 '귀무가설이 틀렸다는 확실한 증거를 찾지 못했다' 정도로 생각하시는게 정확한 시각입니다.

대립가설(Alternative hypothesis, )

대립가설은 귀무가설이 기각 되었을 때 받아들여지는 가설입니다. 그렇기에 당연하게도 귀무가설과 수학적으로 배타적입니다(exclusive). 두 가설의 교집합은 없고 두 가설의 합집합은 전체집합입니다. 대립가설은 검정의 대상이 아닙니다. 다만 우리가 선택한 귀무가설에 반하는 결과가 나올 시 선택되는 것 뿐이죠. 그래서 대부분 대립가설은 귀무가설은 사실이 아니다( ) 라고 표현하곤 합니다.

제 1종 오류(type 1 error)와 제 2종 오류(type 2 error) 그리고 유의수준(significance levele)
  • 1종 오류는 귀무가설이 사실일 때 귀무가설을 기각할 확률이고, 일반적으로 라고 표현합니다.
  • 2종 오류는 귀무가설이 사실이 아닐 때, 귀무가설을 기각하지 않을 확률이고 라고 표현합니다.

즉, 두 경우 모두 분석자가 잘못된 선택을 하게 될 확률(오류율)입니다.

 H0 : TRUEH1 : TRUE
H0 기각 못함정확한 선택2종 오류
H0 기각1종 오류정확한 선택

오류(Error)는 어떤 오류를 막론하고 일단은 낮은 것이 중요합니다. 하지만 같은 표본 핳에서 우리는 이 두가지의 오류를 동시에 줄이지 못합니다. 흔히 Trade - off관계라고 할 수 있습니다. 를 줄이려고 하면 가 늘어나며, 반대로 를 줄이려고 하면 가 늘어나게 됩니다. 이 두 경우를 동시에 줄이는 방법은 오로지 표본 수 n을 늘려가는 방법밖에 없습니다.

그렇기에 고정된 표본 수 하에서 우리는 하나의 오류율을 고정시키고 분석을 진행합니다. 우리가 관심있는 것은 언제나 귀무가설이므로 일반적으로 귀무가설이 사실일 때 귀무가설을 기각할 확률, 즉 1종 오류를 고정시킵니다. 여기서 고정시킨다는 것은 그 한계치를 정해둔다는 의미입니다.

가설검정을 할 때 혹은 과 같은 문구들을 보았을 것입니다. 여기서 알파가 바로 제 1종오류의 허용치입니다. 귀무가설이 사실일 때 귀무가설을 기각할 확률의 한계치를 5% 혹은 10%로 고정시키고 분석을 하는 것이죠. 이 최대 허용치를 유의수준이라고 부릅니다.

일반적으로 유의수준과 1종오류는 같지만 이산형과 같이 확률을 연속적으로 컨트롤할 수 없는 경우에는 유의수준보다 1종오류가 작을 수 있습니다. 하지만 우리는 대부분 연속형 검정을 다루기 때문에 대부분 같다고 생각하시면 될 것 같습니다.

검정통계량(test statistic)

검정통계량은 검정에 사용되는 통계량입니다. 이 역시 하나의 통계량이므로 표본들의 함수입니다. 표본들의 함수라는 말을 조금 가볍게 표현하면 표본들을 이리 저리 조합해서 만든다는 말이죠. 그렇다면 여기서 하나의 궁금증이 생기게 됩니다. '이리 저리 조합'하는 기준은 뭘까요? 즉, 검정통계량의 형태에 대한 궁금증입니다. 어렵게 생각하시지 마시고 위에서 학습한 구간추정과 같은 아이디어라고 생각하시면 편합니다. 귀무가설 하에서 우리가 원하는 확률분포를 따르도록 조합하는 것입니다. 그리고 그 조합의 결과물이 검정통계량인 것이죠. 이는 확률을 계산하기 위한 핵심 아이디어 입니다.

유의확률(significance probability, p-value)

유의확률은 귀무가설 하에서 계산된 검정통계량 값보다 더 극단적인 값이 나올 확률입니다. 흔히 pvalue 혹은 p값이라고 부르며 가설검정에서 의사선택을 하게 해주는 중요한 지표라고 할 수 있습니다. 귀무가설 하에서 검정통계량은 분석자가 의도했던 확률분포를 따르기 때문에 우리가 계산한 검정통계량이 그 확률 구조에서 어느 영역에 포함되어 있는지 알 수 있습니다. 그리고 그 검정통계량보다 더 극단적인 영역에 있을 확률이 바로 유의확률입니다. (만약 오른쪽 검정을 한다면 더 오른쪽에 있을 확률이고 양측 검정을 한다면 양쪽 극단에 있을 확률일겁니다.)

예시를 통해 조금 더 설명을 해보도록 하겠습니다. 대한민국 남성의 키를 추정하고자하는 예시를 이용하도록 하겠습니다.

정규모집단에서 100명의 표본을 뽑아서 모평균이 167.5이 맞는지 인 검정을 하려합니다. (참고로 이는 일표본 t검정이라 불리는 가설검정입니다.)

표본평균은 170, 표본표준편차는 10이 나왔습니다. 정리하면 다음과 같습니다.

귀무가설은 모평균이 167.5인 경우이고 대립가설은 167.5가 아닌 경우입니다. 즉, 대립가설은 167.5보다 큰 경우도167.5보다 작은 경우도 포함합니다.(이를 양측 검정이라고 부릅니다)

위에서 말씀드렸던 것처럼 가설검정을 하기 위해서는 확률 구조가 필요하기 때문에 우리가 아는 확률분포를 따르도록 표본들을 조합해서 검정통계량을 만들어야 합니다. 확률 구조를 알아보기 위해 구간추정의 경우와 마찬가지로 스튜던트 정리를 이용해서 검정통계량을 구하도록 하겠습니다.

만약 귀무가설이 사실이라면, 일겁니다. 그렇다면,

다음의 식이 성립하게 됩니다. 여기서 n = 100이므로, 위의 검정통계량은 자유도가 99인 t분포를 따를 것입니다.

계산된 검정통계량 값을 t(99)의 그래프 상에 이를 표현해 보겠습니다.

보시는 바와 같이 t(99)의 분포에서 2보다 더 극단적인 값을 나올 확률은 오른쪽에서 0.007입니다. 우리는 양측검정을 하였으니 반대쪽도 계산해 주어야 합니다.

이란 말은 곧 을 의미하기 때문입니다. t분포는 대칭분포이니 같은 확률을 보이며, 우리가 구한 값보다 더 극단적인 값이 나올 확률(유의확률, p-value)는 0.014 즉, 1.4%가 됩니다.

조금 넓은 의미에서 해석해보자면, p값은 (귀무가설이 사실일 때) 우리가 얻은 표본들이 일반적으로 나올 법한 표본들이냐 아니냐를 말해주는 값입니다.

  • 즉, 모평균이 정말 167.5일 때, 우리가 구한 170은 그것보다 극단적인 값이 나올 확률이 1.4% 정도 밖에 안될 정도로 꽤나 이상한 값이라는 뜻입니다.
  • 다시 말해 귀무가설이 사실이어도 우연히 나올 수 있는 값이긴 하지만 그 확률이 1.4% 정도 밖에 안된다는 말이죠.

우리는 귀무가설이 사실일 때 귀무가설을 기각할 확률의 허용한계를 0.05로 고정하였기 때문에 이 예에서의 p값 0.014는 우리가 허용할만한 수준이 아닙니다. 그렇다면 귀무가설이 사실이 아니라는 결론을 내리고 기각하게 되는 것입니다.

만약 p값이 큰 값이 나왔다면 귀무가설 하에서 충분히 나올 만한 값이라고 판단할 수 있으므로 귀무가설을 기각하지 않게 될 것입니다.

가설검정은 결국 단순비교를 통해 맞냐 아니냐를 결정하는 것이 아닌 추정량의 분포를 반영하여 변동을 포함해도 맞을 수 있냐 아니냐를 결정하는 것입니다. 즉, 추정량과 그 추정량의 분포를 반영하는 구간추정과 아이디어의 방향이 똑같습니다. 실제로 이 둘은 같은 분포를 이용했다면 정확히 같은 결과를 알려줍니다.

구간추정에서 신뢰구간이 포함하고 있는 값은 (주어진 신뢰도 하에서) 분포를 반영하여도 충분히 나올 수 있는 값이라는 뜻입니다. 위에서 설명한 가설검정과 같은 의미죠. 그래서 신뢰구간에 포함된 값들은 가설검정을 하여도 전부 귀무가설을 기각할 수 없습니다. 반대로 신뢰구간이 포함하지 않는 값들은 가설검정에도 기각될 값들입니다. 이번 예제를 통해 간단히 확인할 수 있습니다. 같은 표본분포(자유도 99의 t분포)를 활용한 구간추정의 경우 신뢰구간이 [168.016, 171,984]이었습니다. 우리가 이번에 검정한 값은 167.5 였죠. 구간에 포함되어있지 않고 그렇기에 당연히 라는 귀무가설은 기각되었습니다. 이는 다른 수를 넣어봐도 같은 결과를 보일겁니다. 계산이 그리 복잡하니 않으니 몇 가지를 넣어서 확인해보시기 바랍니다.

이 블로그의 인기 게시물

6.1.2 고수들이 자주 쓰는 R코드 소개 2편 [중복 데이터 제거 방법]

Ch2. 중복데이터 제거하기 및 데이터 프레임 정렬 Ch2. 중복데이터 제거하기 및 데이터 프레임 정렬 흔하지는 않지만, 중복으로 입력되는 데이터 셋을 마주치는 일이 생기기 마련입니다. 보통 중복데이터는 데이터 수집단계에서 많이 발생합니다. 하지만 이를 하나하나 엑셀로 처리하는 것은 한계가 있기때문에, R에서 처리하는 방법에 대해 다루어 보고자 합니다. 1차원 벡터, 리스트에서의 중복 제거 A = rep(1:10, each = 2) # 1 ~ 10까지 2번씩 반복 print(A) ## [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 # 중복 제거 unique(A) ## [1] 1 2 3 4 5 6 7 8 9 10 데이터 프레임에서의 중복 제거 다음과 같은 데이터 프레임을 예시로 삼겠습니다. 변수 설명 OBS : 번호 NAME : 환자 이름 ID : 환자 고유번호 DATE : 검사 날짜 BTW : Body total water 먼저, 환자 이름이 있고, 그 환자의 고유 ID가 있습니다. 세상에 동명이인은 많기 때문에 항상 고유 ID를 기록해둡니다. # 데이터 불러오기 DUPLICATE = read.csv("C:/R/DUPLICATED.csv") DUPLICATE ## OBS NAME ID DATE BTW ## 1 1 A A10153 2018-11-30 1 ## 2 2 A A10153 2018-11-30 3 ## 3 3 B B15432 2018-11-30 4 ## 4 4 A A15853 2018-11-29 5 ## 5 5 C C54652 2018-11-28 5 ## 6 6 C C54652 2018-11-27 6 ## 7 7 D D14

4.4.1 R 문자열(TEXT) 데이터 처리하기 1

Ch4. 문자열 데이터 다루기 1 데이터 다운로드 링크: https://www.kaggle.com/PromptCloudHQ/imdb-data # 데이터 불러오기 DATA=read.csv("C:\\R/IMDB-Movie-Data.csv") Ch4. 문자열 데이터 다루기 1 이번에는 문자열 데이터를 처리하는 방법에 대해 다루겠습니다. 문자열을 다룰 때 기본적으로 숙지하고 있어야 하는 명령어는 다음과 같습니다. 문자열 대체 : gsub() 문자열 분리 : strsplit() 문자열 합치기 : paste() 문자열 추출 : substr() 텍스트마이닝 함수: Corpus() & tm_map(), & tdm() # 문자열 추출 substr(DATA$Actors[1],1,5) # 첫번째 obs의 Actors변수에서 1 ~ 5번째에 해당하는 문자열 추출 ## [1] "Chris" # 문자열 붙이기 paste(DATA$Actors[1],"_",'A') # 첫번째 obs의 Actors변수에서 _ A 붙이기, 기본적으로 띄어쓰기르 구분 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana _ A" paste(DATA$Actors[1],"_",'A',sep="") # 띄어쓰기 없이 붙이기 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana_A" paste(DATA$Actors[1],"_","Example",sep="|") # |로 붙이기 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana|

3. Resampling 방법론(Leave one out , Cross Validation)

Ch4. Resampling 방법론 이전 챕터에서는 앙상블에 대해 다루었습니다. 앙상블을 요약하자면, Training Set을 Resampling할 때 마다, 가중치를 조정할 것인지 말 것인지를 다루는 내용이었습니다. 이번에는 구체적으로 Resampling 방법들에 대해 다루어 보고자 합니다. 1. Resampling의 목적과 접근 방식 모형의 변동성(Variability)을 계산하기 위해서 입니다. Training Set으로 모형을 만들고, Test Set으로 Error rate를 계산하며, 이를 반복합니다. 각 실행 별, Error Rate 값이 계산이 될 것이며, 해당 Error rate의 분포를 보고 모형의 성능을 평가할 수 있습니다. Model Selection : 모형의 성능을 Resampling 방법론을 통해 평가한다면, 모델링 과정에서 어떤 변수를 넣어야 하고, 혹은 모형의 유연성(Flexibility)을 어느정도로 조절하는 것이 적당한지 결정을 할 수 있기 때문에 매우 중요한 방법론 중 하나입니다. 모형의 유연성에 대해서는 다음 챕터에서 설명하도록 하겠습니다. 2. Leave-One-Out Cross Validation(LOOCV) LOOCV는 n개의 데이터에서 1개를 Test Set으로 정하고 나머지 n-1개의 데이터로 모델링을 하는 방법을 의미합니다. LOOCV 방법은 데이터 수 n이 크다면, n번의 모델링을 진행해야되기 때문에, 시간이 오래 걸립니다. 회귀, 로지스틱, 분류모형 등에 다양하게 적용할 수 있습니다. 3. K - Fold Cross - Validation 연산시간이 오래걸린 다는 것은 곧, 작업시간이 길어진다는 의미이며 이는 곧 야근을 해야된다는 소리와 다를게 없어집니다. 그래서 시간이 오래걸리는 LOOCV를 대채하기 위하여 K-Fold Cross - Validation이 존재합니다. 위 그림은 데이터 셋을 총 4개의 Set로 구성하였습니다. Cross -

4. 통계적 추정(점추정,구간추정)

Ch1. 점추정 추정량은 우리가 알고 싶어하는 모수를 표본들을 이용하여 단 하나의 점으로 추측하는 통계량입니다. 그 과정을 점추정(Point estimation)이라고 하며, 그렇게 얻어진 통계량을 점주청량(Point estimator)라고 합니다. 점추정량은 다양한 방식으로 구할 수 있습니다. 모평균을 추정하기 위한 표본평균 계산 각 끝의 일정 부분씩은 무시하고 나머지 표본들의 평균 계산(절삭 평균, Trimmed Mean) 등의 방법들이 있습니다. 하지만 가장 많이 쓰는 척도는 표본평균입니다. 그 이유는 대표적으로 수리적인 확장성과 표본평균의 분포를 비교적 쉽게 알 수 있다는 점을 들 수 있습니다. 점추정은 단순히 모평균을 추정하는 것만이 아닌, 회귀식을 추정하였을 때의 회귀계수도 점추정이라고 할 수 있습니다. (회귀분석은 후에 다룰 예정입니다.) 다만, 이런 점추정에도 몇 가지의 장점과 단점이 있습니다. 점추정의 장점 점추정량은 지극히 직관적이다. 통계를 모르는 누군가가 한국의 30대 여성의 평균 수입을 묻는다면 점추정량으로 즉각적인 답을 줄 수 있을 것입니다. 점추정량은 매우 직관적이며 합리적입니다. 점추정량은 우리가 원하는 수치를 대체할 구체적인 값을 제시해준다. 우리가 통계적인 모델링 혹은 함수를 작성하기 위해 30대 여성 수입의 평균치가 필요하나 모평균을 알 수 없을 때 점추정량으로 간단히 대체할 수 있습니다. 사실상 이는 대부분에 통계이론을 전개하는데 가장 중요한 역할을 합니다. 간단한 예를 말씀드리자면 모분산을 추정하기 위해서는 평균이 필요하기 때문에 표본평균을 이용합니다. 여기서 분산은 각 개별 값들이 평균에서 얼만큼 멀리 떨어져있는지에 대한 척도입니다. 그런데 우리는 '진짜 평균'을 알 수 없으니 아래 식과 같이 표본들의 평균으로 대체하는 것입니다. 여기서 평균 값을 표본평균으로 대체하였기에 표본분산은 n이 아닌 n-1으로 나누어 주게 됩니다. 이해를 돕기 위해 자유도에 대한 개념을 잠깐 다루도록 하

3.2.3 R 시각화[ggplot2] 2편 (히스토그램, 밀도글래프, 박스플롯, 산점도)

R 데이터 시각화 2편 R 데이터 시각화 2편 데이터 다운로드 링크: https://www.kaggle.com/liujiaqi/hr-comma-sepcsv # 시각화 이전에 처리 되어 있어야 하는 시각화 DATA = read.csv('C:/R/HR_comma_sep.csv') DATA$left = as.factor(DATA$left) DATA$Work_accident = as.factor(DATA$Work_accident) DATA$promotion_last_5years = as.factor(DATA$promotion_last_5years) 히스토그램(Histogram) [연속형 변수 하나를 집계 내는 그래프, 1차원] 히스토그램은 연속형변수를 일정 범위로 구간을 만들어, x축으로 설정하고 y축은 집계된 값(Counting)을 나타내는 그래프입니다. library(ggplot2) # 기본 ggplot(DATA,aes(x=satisfaction_level))+ geom_histogram() ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. # 구간 수정 및 색 입히기 ggplot(DATA,aes(x=satisfaction_level))+ geom_histogram(binwidth = 0.01,col='red',fill='royalblue') # col은 테두리, fill은 채우기 밀도그래프(Density Plot)[연속형 변수 하나를 집계 내는 그래프, 1차원] 밀도그래프는 연속형변수를 일정 범위로 구간을 만들어, x축으로 설정하고 y축은 집계된 값(percentage)을 나타내는 그래프입니다. # 기본 ggplot(DATA,aes(x=satisfaction_level))+ geom_density() # 색 입히기 ggplot(DATA,a