17.통계데이터분석 - 독립성검정과 적합성검정 - 독립성검정.Rmd
0.01MB
17.통계데이터분석---독립성검정과-적합성검정---독립성검정.html
1.32MB
17.통계데이터분석 - 독립성검정과 적합성검정 - 독립성검정
2022-07-30
1. 독립성검정(independence test)의 특징
- 독립성검정의 특징
- 독립성검정은 범주형변수가 서로 독립인지 검정함
- 여기서 독립이라는 것은 두 변수가 서로 관련이 없다는 것을 의미함
- 독립성검정에서
- 귀무가설: 두 변수는 독립이다(=두 변수는 서로 관련이 없다)
- 대립가설: 두 변수는 독립이 아니다(=두 변수는 서로 관련이 있다)
- 예시) 혈액형과 선호하는 영화 장르가 서로 아무런 관련이 없을 때, 즉, 혈액형에 따라서 좋아하는 영화 장르가 다르지 않을 때 “이 두 변수가 서로 독립이다”라고 얘기함
- 귀무가설: 혈액형과 선호하는 영화 장르는 독립이다
- 대립가설: 혈액형과 선호하는 영화 장르는 독립이 아니다
- 귀무가설을 기각하고 대립가설를 채택하게 되면 “혈액형과 선호하는 영화 장르간에는 관련이 있다” 라고 결론을 내리게 됨
2. 독립성검정을 수행하는 절차
2-1. 데이터셋 설명
https://youtu.be/CO7LsfET2kc?list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&t=94
- 독립성검정 수행: χ2검정 절차에 따라 두 변수의 범주 조합별 빈도를 기록한 교차표를 토대로 수행
- 타이타닉 데이터셋 설명
str(Titanic)
## 'table' num [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ...
## - attr(*, "dimnames")=List of 4
## ..$ Class : chr [1:4] "1st" "2nd" "3rd" "Crew"
## ..$ Sex : chr [1:2] "Male" "Female"
## ..$ Age : chr [1:2] "Child" "Adult"
## ..$ Survived: chr [1:2] "No" "Yes"
- 결과해석
- 타이타닉호 침몰사건과 관련 데이터가 테이블 형식 데이터 구조로 저장돼 있음
- 4개의 차원으로 구성됨 (승객구분 /성별 / 나이 / 생존여부)
- 승객구분: 1등실 2등실 3등실 선원으로 구분
- 생존여부: 생존한 경우와 그렇지 않은 경우로 구분
2-2. margin.table() - 다차원 테이블에서 원하는 차원만 추출해 요약표 생성
- 타이타닉호 탑승기에 승객구분에 따라서 생존율 차이가 있는지 검정
- 다차원의 테이블 객체에 저장된 데이터셋을 이용해 독립성검정을 하기 위해서는 검정하고자 하는 변수로 이루어진 2차원 형태의 교차표로 테이블을 변환해야 함
- 인수로 지정된 차원으로 구성된 새로운 요약 테이블 생성해야 함
- 인수설명:
- 1st: 테이블 객체 지정
- 2nd: 추출하고자 하는 차원 지정
- 여기서는 승객구분에 따른 생존율 차이가 있는지를 검정하기 때문에 4번째 차원(생존여부) / 1번째 차원(승객구분) 추출
Titanic.margin <- margin.table(Titanic, c(4, 1))
Titanic.margin
## Class
## Survived 1st 2nd 3rd Crew
## No 122 167 528 673
## Yes 203 118 178 212
- 결과해석: 행에는 생존여부 / 열에는 승객구분이 배치된 2차원 교차표 생성
2-3. margin.table() - 행과 열의 합 추가, 열의 비율 계산
addmargins(Titanic.margin) # 행과 열의 합 추가
## Class
## Survived 1st 2nd 3rd Crew Sum
## No 122 167 528 673 1490
## Yes 203 118 178 212 711
## Sum 325 285 706 885 2201
- 열의 비율 계산 절차
addmargins(Titanic.margin, 2) # 열의 합계 추가
## Class
## Survived 1st 2nd 3rd Crew Sum
## No 122 167 528 673 1490
## Yes 203 118 178 212 711
prop.table(addmargins(Titanic.margin, 2), 2) # 비율로 변환. 열의 합계가 100%가 되는 교차표 생성
## Class
## Survived 1st 2nd 3rd Crew Sum
## No 0.3753846 0.5859649 0.7478754 0.7604520 0.6769650
## Yes 0.6246154 0.4140351 0.2521246 0.2395480 0.3230350
addmargins(prop.table(addmargins(Titanic.margin, 2), 2), 1) # 열의 합계 100% 를 명시적으로 보여주기 위해 합계가 100% 가 되는 것을 보여주는 행 추가
## Class
## Survived 1st 2nd 3rd Crew Sum
## No 0.3753846 0.5859649 0.7478754 0.7604520 0.6769650
## Yes 0.6246154 0.4140351 0.2521246 0.2395480 0.3230350
## Sum 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
- 결과해석
- 열의 비율이 100%인 비율의 교차표 완성
- 이 교차표를 통해 승객구분별로 생존율 차이가 있는지 추론 가능함
- 1등실 승객의 경우에는 62.5% 가 생존한 반면에 3등실 승객의 경우에는 25.2% 만이 생존함. 가장 낮은 생존율을 보인 사람들은 승무원임. 24% 정도 만이 생존함
- 승객구분에 따라서 생존율에 있어서 차이가 있는 것처럼 보임
3. 통계적으로 독립성검정 수행
3-1. chisq.test() - 독립성검정 수행
- 인수설명: 교차표를 인수로 지정함
chisq.test(Titanic.margin)
##
## Pearson's Chi-squared test
##
## data: Titanic.margin
## X-squared = 190.4, df = 3, p-value < 2.2e-16
- 결과해석
- p값이 10의 - 16 순수 준 으로서 거의 0에 가까움
- 유의수준 0.05에 비해 매우 작아 “승객구분과 생존여부 간 관계가 없다”는 귀무가설 기각
- “승객구분에 따라서 생존율에 는 차이가 존재”함
3-2. assocstats() - 귀무가설 기각 후 두 범주형변수 간 관련성 강도 평가
- 두 범주형변수 간 관계가 없다는 귀무가설 기각하면 이어서 이들 간 관련성 강도 평가가능
- 인수설명: 교차표를 인수로 지정
library(vcd)
assocstats(Titanic.margin)
## X^2 df P(> X^2)
## Likelihood Ratio 180.9 3 0
## Pearson 190.4 3 0
##
## Phi-Coefficient : NA
## Contingency Coeff.: 0.282
## Cramer's V : 0.294
- 결과해석
- 이 함수는 기본적으로 3개의 지표 출력함
- 이 지표 값들은 그 값이 클수록 두 변수 간 관련성이 크다는 것을 의미함
3-3. mosaic()함수<모자이크도표> - 승객구분과 생존율 간 관계의 시각화
- 인수섦명
- 1st: 교차표 지정
- shade: TRUE 지정하면 귀무가설을 기각하는 데 있어 어떠한 범주쌍이 더 큰 기여를 하는지색깔로 구분해서 볼 수 있음
mosaic(Titanic.margin, shade=TRUE)
- 도표해석
- 직사각형의 크기는 교차표상 셀값에 비례함
- 파란색 계통의 셀과 빨간색 계통의 셀이 있음
- 오른쪽 범례에 Pearson residuals는 귀무가설이 사실이라는 가정하에서 계산된 관측빈도와 기대빈도의 차이를 의미함
- 관측빈도와 기대빈도의 차이가 양수의 큰 값일수록 파란색으로 표현되고
- 관측빈도와 기대빈도의 차이가 음수의 큰 값일수록 빨간색으로 표현됨
- 파란색은 관측빈도>기대빈도, 빨간색은 관측빈도<기대빈도 라는 의미임
- 그래서 파란색이나 빨간 색에 가까운 셀들은 귀무가설을 기각하는데 크게 기여하는 셀이라 할 수 있음
3-4. chisq.test() - 데이터프레임으로 저장된 데이터로 독립성검정 수행
- 테이블로 저장된 데이터셋 뿐만 아니라 데이터프레임 형태로 저장된 데이터셋에 대해서도 교차표 생성 과정 없이 독립성검정 바로 수행 가능. chisq.test() 에 검정대상 변수를 직접 지정함
- 데이터셋 변수 설명
- Sex: 성별
- Fold: 팔짱을 끼었을 때 어느 쪽 손이 위쪽에 위치하는 지를 나타냄
library(MASS)
str(survey)
## 'data.frame': 237 obs. of 12 variables:
## $ Sex : Factor w/ 2 levels "Female","Male": 1 2 2 2 2 1 2 1 2 2 ...
## $ Wr.Hnd: num 18.5 19.5 18 18.8 20 18 17.7 17 20 18.5 ...
## $ NW.Hnd: num 18 20.5 13.3 18.9 20 17.7 17.7 17.3 19.5 18.5 ...
## $ W.Hnd : Factor w/ 2 levels "Left","Right": 2 1 2 2 2 2 2 2 2 2 ...
## $ Fold : Factor w/ 3 levels "L on R","Neither",..: 3 3 1 3 2 1 1 3 3 3 ...
## $ Pulse : int 92 104 87 NA 35 64 83 74 72 90 ...
## $ Clap : Factor w/ 3 levels "Left","Neither",..: 1 1 2 2 3 3 3 3 3 3 ...
## $ Exer : Factor w/ 3 levels "Freq","None",..: 3 2 2 2 3 3 1 1 3 3 ...
## $ Smoke : Factor w/ 4 levels "Heavy","Never",..: 2 4 3 2 2 2 2 2 2 2 ...
## $ Height: num 173 178 NA 160 165 ...
## $ M.I : Factor w/ 2 levels "Imperial","Metric": 2 1 NA 2 2 1 1 2 2 2 ...
## $ Age : num 18.2 17.6 16.9 20.3 23.7 ...
- Sex, Fold 변수로 “성별에 따라서 팔짱을 끼웠을 때의 손 위치에 차이가 있는지 검정” 수행
- 인수로 검정하고자는 두 개의 범주형변수를 나란히 지정함
- 그러면 chisq.test()함수는 내부적으로 교차표 생성 후, 그 결과로 독립성검정을 수행함
- 이렇게 chisq.test()에 직접 데이터를 지정할 때는 그 데이터들은 벡터 형식이어야 함
chisq.test(survey$Fold, survey$Sex)
##
## Pearson's Chi-squared test
##
## data: survey$Fold and survey$Sex
## X-squared = 2.5741, df = 2, p-value = 0.2761
- 결과해석
- p값 0.2761로 유의수준 0.05 에 비해서 크기 때문에 귀무가설을 기가하지 못함
- “성별에 따라서 팔짱을 끼었을 때 손 위치의 차이가 없다”는 귀모가설을 기각하지 못하기 때문에 “손 위치와 성별 간에는 관련성이 없다” 라고 결론 내릴 수 있음
- 교차표를 먼저 생성하고 그걸 바탕으로 독립성검정을 수행해도 동일한 결과 출력됨
crsstab <- table(survey$Fold, survey$Sex) # 테이블 함수로 교차표 생성
crsstab
##
## Female Male
## L on R 48 50
## Neither 6 12
## R on L 64 56
chisq.test(crsstab)
##
## Pearson's Chi-squared test
##
## data: crsstab
## X-squared = 2.5741, df = 2, p-value = 0.2761
# 그리고 이 교차표를 chisq.test()에 직접 지정해 독립성검정 수행
- 결과해석: 동일한 p값이 출력됨