16.통계데이터분석 - 독립성검정과 적합성검정.Rmd
0.02MB
16.통계데이터분석---독립성검정과-적합성검정.html
2.52MB
16.통계데이터분석 - 독립성검정과 적합성검정 - 카이제곱검정
2022-07-26
https://www.youtube.com/watch?v=XIxcK0H7J4Y&list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&index=17
1. χ2검정 (독립성검정과 적합성검정 정의 포함)
1-1. 교차표와 χ2검정
- χ2검정의 특징
- 범주형 변수로 만들어지는 교차표 상의 빈도를 바탕으로 수행됨
- 교차표를 이용하면 범주형으로 수집된 두 변수의 범주 조합에 따른 조합별 빈도를 살펴볼 수 있음. 그리고 이를 통해 두 변수 간 관계를 파악을 할 수 있음
- χ2검정의 종류
- 독립성검정: 두 범주형 변수 간의 관련성이 모집단에서 존재하는지 검정함
- 예) 연령대와 선호하는 음식 종류 간 서로 관계가 있을지 검정
- 20대는 중식, 30대는 양식, 40대는 한식을 좋아한다면 “연령대와 선호하는 음식 간에는 서로 관련성이 있다라고 생각을 해 볼 수 있음
- 그러한 관련성이 모집단에서 존재하는지 검정 할 때 독립성검정 사용
- 예) 연령대와 선호하는 음식 종류 간 서로 관계가 있을지 검정
- 적합성검정: 범주형 변수가 하나가 있을 경우에 그 하나의 범주형 변수에 포함돼있는 범주별 빈도를 바탕으로 모집단에서 기대되는 비율 분포가 존재하는지 검정
- 예) 이동통신회사가 a, b, c가 있을 때, 100명의 소비자를 대상으로 어느 이동통신회사에 가입해 사용하고 있는지 문의
- 100명 중 50명은 a, 30명은 b, 20명은 c회사를 사용하고 있다면 a b c 회사의 시장점유율 비율은 5:3:2가 될 것임
- 그러한 비율이 모집단에서 도 유지가 되는지, 즉, 세 회사의 시장점유율이 각각 50% 30% 20% 라고 할 수 있는지 검정할 때 적합성검정 사용
- 예) 이동통신회사가 a, b, c가 있을 때, 100명의 소비자를 대상으로 어느 이동통신회사에 가입해 사용하고 있는지 문의
- 독립성검정: 두 범주형 변수 간의 관련성이 모집단에서 존재하는지 검정함
2. χ2검정을 위한 교차표 생성
2-1. 교차표 생성
- χ2검정은 교차표 상의 응답 빈도를 바탕으로 수행
- 안전벨트 착용과 승객안전 간의 관계에 관심이 있다고 가정
- 안전벨트 착용과 승객안전, 이 두 변수 간 교차표를 먼저 생성해야 함
- 교통사고 환자의 안전벨트 착용유무와 환자상태의 데이터를 행렬 형식으로 저장하고,
- 이를 행과 열에 각각 안전벨트 착용유무와 환자상태를 나타낸 범주명 지정 후
- 교차표 확인
survivors <- matrix(c(1443, 151, 47, 1781, 312, 135), ncol=2)
dimnames(survivors) <- list(
Status=c("minor injury", "major injury", "dead"),
Seatbelt=c("with seatbelt", "without seatbelt")
)
survivors
## Seatbelt
## Status with seatbelt without seatbelt
## minor injury 1443 1781
## major injury 151 312
## dead 47 135
- 결과해석
- 행: 환자의 상태가 배치됨
- 열: 안전벨트 착용유무가 배치됨
- 환자상태: 경상, 중상, 사망(3개 범주)
- 안전벨트 착용유무: 안전벨트를 착용한 경우와 그렇지 않은 경우(2개 범주)
- 안전벨트를 착용한 경우 경상자 1443명, 중상자 151명, 사망자 47명임
- 이 교차표로 두 변수 간 관련이 있는지 파악하기 어려움
- 안전벨트 착용유무에 따라서 경상자 중상자 사망자수 간 차이가 크면 “안전벨트 착용유무와 환자상태 간의 관계가 있다” 라고 생각을 해 볼 수 있음
- 그런데 안전벨트 착용자수와 비착용자수가 다르기 때문에 직접 이 수치를 가지고 비교할 수 없음
- 비율을 바탕으로 안전벨트 착용유무가 환자상태에 미치는 영향을 좀 더 쉽게 파악 가능
- 두 변수간 관계를 보다 잘 파악하기 위해 교차표 행과 열의 합을 추가 후
- 열이 100% 로 척도조정된 열의 비율을 계산함
2-2. 교차표 생성 - 100%로 척도조정된 열비율 추가
2-2-1. addmargins() 함수 - 교차표에 행과 열의 합 추가
addmargins(survivors)
## Seatbelt
## Status with seatbelt without seatbelt Sum
## minor injury 1443 1781 3224
## major injury 151 312 463
## dead 47 135 182
## Sum 1641 2228 3869
- 결과해석
- 안전벨트 착용자는 1641명, 안전벨트 미착용자는 2228명의 환자가 있음
- 총 3869 명의 환자가 이 데이터 셋에 포함이 돼 있음
- 그 환자 중 경상자 3224명, 중상자 463 명, 사망자 182명임
- 현재 안전벨트 착용자과 미착용자 숫자가 다르기 때문에,
- 착용자 1641명을 100%로 해서 경상자, 중상자, 사망자 비율 계산
- 미착용자 2228명을 100%로 해서 경상자, 중상자, 사망자 비율 계산
- 즉, 열의 비율이 100%가 되는 그런 비율의 교차표를 생성해야 함
2-2-2. prop.table() 함수 - 행과 열의 비율이 100%가 되는 교차표 생성
- addmargins() 함수로 우선 열의 합만 추가
- margin 인수: 열의 합 추가(margin=2)
addmargins(survivors, margin=2)
## Seatbelt
## Status with seatbelt without seatbelt Sum
## minor injury 1443 1781 3224
## major injury 151 312 463
## dead 47 135 182
- prop.table() 함수 - 이 교차표로 열의 합계가 100%인 비율의 교차표 생성
- margin 인수: 열의 비율이 100%가 되는 합계열 추가(margin=2)
prop.table(addmargins(survivors, 2), margin=2)
## Seatbelt
## Status with seatbelt without seatbelt Sum
## minor injury 0.87934186 0.79937163 0.83329026
## major injury 0.09201706 0.14003591 0.11966917
## dead 0.02864107 0.06059246 0.04704058
- 결과해석
- 안전벨트 착용자 중 경상자 비율이 87.9%, 중상자 9.2%, 사망자 2.9% 임
- 3개 비율을 모두 합하면 100%가 됨
- 안전벨트 미착용자 중 경상자 비율이 79.9%, 중상자 14.0%, 사망자 6.1% 임
- 역시 3개 비율 합하면 모두 100%가 됨
- 합계열도 마찬가지로 경상자 중상자 사망자 비율 모두 합하면 100%가 됨
- 그래서 열애 합계가 100%가 되는 교차표를 생성 됨
- 안전벨트 착용자 중 경상자 비율이 87.9%, 중상자 9.2%, 사망자 2.9% 임
- addmargin() 함수 - 이 교차표에 행의 합계가 100%가 되는 행 추가
- margin 인수: 열의 비율이 100%가 되는 합계행 추가(margin=1)
addmargins(prop.table(addmargins(survivors, 2), margin=2), margin=1)
## Seatbelt
## Status with seatbelt without seatbelt Sum
## minor injury 0.87934186 0.79937163 0.83329026
## major injury 0.09201706 0.14003591 0.11966917
## dead 0.02864107 0.06059246 0.04704058
## Sum 1.00000000 1.00000000 1.00000000
- 결과해석
- 최종적으로 합계행까지 포함되고, 열의 비율이 100%가 되는 교차표 생성
2-3. 생성된 교차표로 안전벨트 착용과 승객의 안전 간 관련성 유추
- 경상자 분석
- 안전벨트 착용시 1443명, 미착용시 1781명, 각각 비율로는 87.9%와 79.9%임
- 안전벨트 착용시, 미착용시보다 경상자 비율이 더 높음
- 중상자 분석
- 안전벨트 착용시 151명, 미착용시 311명, 각각 비율로는 9.2%와 14.0%임
- 안전벨트 미착용시, 착용시보다 중상자 비율이 더 높음
- 사망자 분석
- 안전벨트 착용시 47명, 미착용시 135명, 각각 비율로는 2.9%와 6.1%임
- 안전벨트 미착용시, 착용시보다 사망자 비율이 더 높음
- 그래서 이 비율의 교차표를 통해 “안전벨트 착용이 승객의 안전과 관련이 있다”라고 판단 가능
3. 시각화를 통한 두 범주형 변수 간 관련성 확인
3-1. barplot()함수<막대도표> - 안전벨트착용과 안전간의 관계 시각화
barplot(survivors,
col=c("yellowgreen", "lightsalmon", "orangered")
)
- 도표해석
- 왼쪽이 안전벨트 착용한 경우이고, 오른쪽이 안전벨트 미착용한 경우임
# 그래프 개선
barplot(survivors, ylim=c(0, 2500), las=1,
col=c("yellowgreen", "lightsalmon", "or angered"),
ylab="Frequency", main="Frequency of Survivors")
legend(0.2, 2500, rownames(survivors),
fill=c("yellowgreen", "lightsalmon", "orangered") )
- 도표해석
- ylim 인수: y축 범위지정
- las 인수: 1을 대입해 y 축 숫자가 x축과 평행 하도록 나타냄
- ylab, main인수: y축, 그래프 제목 지정
- legend() 함수: 색깔로 구분되가는 범례 추가
- 0.2, 2500: 범례가 위치할 x,y축 위치 좌표
- rownames(survivors): 범례로 사용될 이름 지정
- fill 인수: 범례 색깔 지정
3-2. barplot()함수<막대도표> - 안전벨트착용과 안전간의 관계 시각화
- 위 상자도표는 빈도로 만들어진 것이기 때문에 경상자 중상자 사망자의 상대적 비교가 어려움
- 그래서 열의 교차표를 만든 것처럼, 안전벨트 착용한 경우의 환자수를 100%라고 착용하지 않은 경우의 환자수를 100%해서, 그 가운데 경상자 중상자 사망자의 비율이 나타나도록 비율의 형태로 막대도표 생성
- 먼저 비율을 계산해 survivors.prop 변수에 저장 후, 막대도표 상에 비율을 표현
survivors.prop <- prop.table(survivors, 2)
barplot(survivors.prop*100, las=1,
col=c("yellowgreen", "lightsalmon", "or angered"),
ylab="percent", main="percent of Survivors")
# legend(0.2, 2500, rownames(survivors),
# fill=c("yellowgreen", "lightsalmon", "orangered") )
- 도표해석
- y 축이 100% 로 척도가 조정되어 있는 그래프 생성됨
- y 축에 0부터 1로 되어 있는데 survivors.prop*100으로 100을 곱해 100% 로 환산
- 경상자 중상자 사망자의 비율이 안전벨트 착용자와 미착용자 간 분명한 차이가 있는 것처럼 보임
- 따라서 “안전벨트 착용은 승객의 안전과 밀접한 관련이 있다” 라고 생각할 수 있음
4. χ2검정 - 안전벨트 착용과 안전 간 관련성의 통계적 검정
4-1. χ2검정 및 χ2분포 설명
- χ2검정: 범주형 변수 간 관련성이 모집단에서 존재하는지 검정
- χ2검정 절차: 기대빈도와 관측빈도의 비교를 통해 계산되는 χ2값을 가설검정을 위한 검증 통계량 으로 사용함
- 관측빈도: 교차표 상의 실제 빈도
- 기대빈도: 변수 간 관련성이 없다는 가정하에 기대할 수 있는 예상 빈도
- χ2값 계산: 교차표를 바탕으로 계산함
- 교차표의 각 셀 값은 기본적으로 관측빈도를 의미 함
- 귀무가설이 사실이라는 가정 하에 관측빈도를 바탕으로 기대빈도를 각 셀마다 계산
- 귀무가설: “두 범주형 변수 간에 아무런 관련이 없다”
- 그럼 각 셀은 관측빈도와 기대빈도의 쌍이 계산 됨
- 이 쌍을 이용해, 위 산식에 의해 χ2값 계산
- 산식설명
- 각 셀에 대해 관측빈도와 기대빈도의 차이 계산
- 이를 제곱한 값을 기대빈도로 나눔
- 이러한 계산을 모든 셀에 대해 수행하고, 모든 셀에 대해 합산
- 산식설명
- χ2분포
- χ2값은 χ2분포를 따름
- χ2분포는 자유도에 따라서 분포의 모양이 달라지고
- 대체로 위 그래프와 같이 오른쪽으로 긴 꼬리를 가짐
- χ2분포의 자유도 계산
- χ2분포의 자유도는 교차표를 구성하는 두 변수의 범주의 개수에서 결정됨
- 행 변수 범주의 개수에서 1을 뺀 값과 열 변수 범주의 개수에서 1을 뺀 값을 곱한 값
- 위의 경는 우, 자유도는 (3-1) * (2-1) =2 가 됨
- χ2값을 통한 가설검정
- 표본에서 χ2값을 산출하고 귀무가설이 사실이라는 가정하에서
- 이 χ2값이 χ2분포 상에 얼마나 나타나기 어려운 희박한 경우인지 혹은 흔하게 관찰될 수 있는 경우인지를 평가해서 가설 검정
- χ2값 계산식을 보면, 관측빈도와 기대빈도의 차에 의해서 계산하는데,
- 만약 관측빈도와 기대빈도의 차이가 크다면,
- 이 기대빈도는 귀무가설이 사실이라는 가정 하에서 만들어진 값이기 때문에
- 우리가 실제로 표본으로부터 관측된 관측빈도와 많이 다르다는 것이며
- 결국은 가설이 아닐 가능성이 높다는 얘기입니다
- 반대로 관측빈도와 기대빈도가 유사하면 (극단적으로 관측빈도와 기대빈도가 같아 0이 나온다면)
- 귀무가설이 사실이란 가정하에 만들어진 기대빈도와 실제 관측빈도가 같다는 것이며
- 귀무가설이 맞을 가능성이 크다고 할 수 있음
- χ2값이 크면 클수록 귀무가설을 기각하고 대립가설 채택
- χ2값이 작으면 작을수록 귀무가설을 채택가능성이 높아짐
4-2. χ2검정절차 상세 설명
- 관측빈도: 안전벨트 착용 유무와 환자의 상태를 바탕으로 생성했던 교차표의 셀값은 관측빈도에 해당 됨
- 기대빈도: 귀무가설이 사실이라는 가정하에서 기대할 수 있는 빈도
- 여기서 귀무가설은 “안전벨트 착용과 승객안전 간에는 관련이 없다”는 것임
- 귀무가설이 사실이면 안전벨트 착용자와 미착용자는 사고 이후 상태에 대해 동일한 패턴을 보이게 될 것임
- 이는 사고 이후 환자 상태의 비율이 안전벨트 착용자와 미착용자 간 동일하다는 의미임
- 비율이 동일해도 안전벨트 착용자와 미착용자수가 같지 않아 빈도는 다를 수 있음
- 기대빈도 산출방법
- 우선 환자상태의 비율 파악
- 전체 3869명 환자 가운데 경상자 3224명, 83.3% 비율, 중상자 463명, 12% 비율, 사망자 182명, 4.7% 비율임
- 귀무가설이 사실이라면 이 비율은 안전벨트 착용 여부와 관계없이 착용자와 미착용자 집단 모두에게 동일하게 나타날 것으로 기대할 수 있음
- 이 비율을 빈도로 변화한 기대빈도는 각 환자상태 비율에 안전벨트 착용자 및 미착용자수를 곱해서 구할 수 있음
- 우선 환자상태의 비율 파악
- 기대빈도 산출
- 경상자 기대빈도
- 경상자 비율은 전체의 83.3% 임 (총 3869명 중 3224명)
- 귀무가설이 사실이면 이 비율은 안전벨트를 착용여부 관계없이 동일하게 적용돼야 함
- 안전벨트 착용자 가운데서 경상자 기대빈도는 안전벨트 착용자수 1641명의 83.3% 인 1327명이 됨
- 안전벨트 미착용자로부터 경상자 기대빈도는 안전벨트 미착용자수 2228명의 83.3% 인 1855.9명이 됨
- 중상자 기대빈도
- 중상자 비율은 전체의 12% 임 (총 3869명 중 463명)
- 귀무가설이 사실이면 이 비율은 안전벨트를 착용여부 관계없이 동일하게 적용돼야 함
- 안전벨트 착용자 가운데서 중상자 기대빈도는 안전벨트 착용자수 1641명의 12%인 196.9명이 됨
- 안전벨트 미착용자로부터 중상자 기대빈도는 안전벨트 미착용자수 2228명의 14%인 267.4명이 됨
- 사망자 기대빈도
- 사망자 비율은 전체의 4.7%임 (총 3869명 중 182명)
- 귀무가설이 사실이면 이 비율은 안전벨트를 착용여부 관계없이 동일하게 적용돼야 함
- 안전벨트 착용자 가운데서 사망자 기대빈도는 안전벨트 착용자수 1641명의 12%인 77.1명이 됨
- 안전벨트 미착용자로부터 사망자 기대빈도는 안전벨트 미착용자수 2228명의 14%인 104.7명이 됨
- 이제 관측빈도와 기대빈도의 차이를 구하고 그것을 제곱 한 후 기대빈도로 나눔
- 이러한 작업을 모든 셀에 대해 반복해서 모두 합산하면 χ2값으로 45.91 산출
- 경상자 기대빈도
- χ2검정
- 귀무가설이 사실이라는 가정하에서 표본으로부터 산출된 χ2값 45.91이 χ2분포 상에서 얼마나 희박한 경우인지 혹은 흔하게 관찰될 수 있는지 평가해야 함
- 평가방식1(유의확률 비교)
- 관측된 χ2값에서의 유의확률을 구한 다음, 유의수준 0.05 또는 0.01과 비교
- 관측된 χ2값의 유의확률이 0.05 또는 0.01의 유의수준보다 작으면 귀무가설 기각함
- 평가방식2(χ2값 비교)
- 유의수준 0.05 또는 0.01에서의 χ2값을 구한 다음, 관측된 χ2값과 비교
- 관측된 χ2값이 유의수준에 대응되는 χ2값보다 크면 귀무 가설을 기각함
4-3. χ2검정 (R사용)
4-3-1. 평가방식1(유의확률 비교) - pchisq()로 특정 χ2값에 대응되는 유의확률 구함
- 인수설명
- q: χ2값 지정. 표본으로부터 관측된 χ2값 45.91 지정
- df: 자유도 지정. 행범주 개수 3에서 1을 빼고, 열범주 개수 2에서 1을 빼 곱한 수치
- lower.tail: 이대로 계산하면 45.91 이하 영역이 계산되기 때문에, 45.91 이상이 발생할 확률 구하기 위해, FALSE로 지정하여 오른쪽 꼬리 부분 영역의 확률 계산함
pchisq(45.91, df=(3-1)*(2-1), lower.tail=FALSE)
## [1] 1.073421e-10
- 결과해석
- 결과는 1.07 곱하기 10의 마이너스 10승
- 유의수준 0.05나 0.01에 비해서 굉장히 작은 수치기 때문에 귀무가설 기각, 대립가설 채택
- 즉, “안전벨트 착용 유무는 환자의 상태와 관련이 있다” 라고 결론을 내릴 수가 있음음
4-3-2. 평가방식2(χ2값 비교) - qchisq()로 특정 유의확률에 대응되는 χ2값 구함
- 인수설명
- p: 유의확률 지정. 0.05로 지정하면 유의수준 0.05에 대응되는 χ2값 계산
- df: 자유도 지정. 행범주 개수 3에서 1을 빼고, 열범주 개수 2에서 1을 빼 곱한 수치
- lower.tail: 이대로 계산하면 왼쪽 꼬리 부분 영역의 면적이 0.05에 대응되는 χ2값이 계산되기 때문에, 오른쪽 꼬리 부분 영역이 0.05인 곳에 대응되는 χ2값 계산위해, FALSE로 지정
qchisq(0.05, df=(3-1)*(2-1), lower.tail=FALSE)
## [1] 5.991465
- 결과해석
- 유의수준 0.05에 대응되는 χ2값은 5.99
- 표본으로부터 관측된 χ2값이 45.91이고, 45.91은 5.99에 오른쪽에 위치하기 때문에 귀무가설 기각하고 대립가설 채택
4-4. χ2검정 결과 그래프로 확인
- qchisq() 함수를 통해서 오른쪽 꼬리 부분의 면적이 0.05 에 대응되는 χ2값 5.99 계산함
- 표본으로부터 관측된 값이 45.91은 5.99보다 상당히 오른쪽 끝에 있어 굉장히 작은 영역임
- 이 영역은 0.05 에 비해서 굉장히 작고, pchisq()로 이 부분 확률이 1.073421e-10로 0.05에 비해서 굉장히 작기 때문에 역시 귀무가설 기각하고 대립가설을 채택함
- 따라서 “안전벨트 착용 유무는 환자의 상태와 밀접한 관련이 있다” 라는 것을 알 수 있음