Home ChungLab Wiki
    • 설명
    • 못 고치는 문서
    • Menu
      • Navigation
      • RecentChanges
      • FindPage
      • 사이트맵
      • Help
      • HelpContents
      • HelpOnMoinWikiSyntax
      • 보기
      • 첨부
      • 정보
      • 원문 보기
      • 인쇄용 화면
      • 수정
      • 로드
      • 저장
    • 로그인

    Navigation

    • FindPage
    • HelpContents
    • FunReading
    이 위키는 메일 처리를 할 수 없도록 되어 있습니다. 위키 관리자에게 연락하여 메일을 쓸 수 있도록 요청하세요.
    • Class
    • Statistics
    • ChiSquared

    Chi-squared Test

    T-Test는 평균값을 비교할 때 사용

    우리나라는 매년 겨울 서풍에 실려오는 초미세먼지로 불편을 겪는다.

    • 2020년 1월 신종 코로나 바이러스에 대한 대책으로 중국의 경제 활동이 멈췄고, 우리는 겨울답지 않는 맑은 공기를 반갑게 맞이했다.
    • 실제 공기 질이 좋아졌는지 서울시 일별 대기오염도 정보 자료를 이용해서 2019년 12월과 2020년 2월의 초미세먼지 농도를 비교 해 보자.

    • 다음 예제는 실습의 편의를 위하여 GitHub에 올려둔 파일을 사용한다.

       1 dataFile <- 'https://raw.githubusercontent.com/gehoon/statistics/master/data/seoul_daily_air_20200923.csv'
       2 df <- read.csv(dataFile, fileEncoding='euc-kr')
       3 # 혹은 df <- read.csv(file.choose(), fileEncoding='euc-kr')
       4 
       5 df <- df[ grep('구$', df$측정소명), ]
       6 
       7 dust19 <- data.frame(month = as.factor('2019.12'),
       8                      pm2.5 = df[ grep('^201912', df$측정일시) , '초미세먼지.....'  ])
       9 dust20 <- data.frame(month = as.factor('2020.02'),
      10                      pm2.5 = df[ grep('^202002', df$측정일시) , '초미세먼지.....'  ])
      11 
      12 dust = rbind(dust19, dust20)
      13 summary(dust)
      14 boxplot(pm2.5 ~ month, data=dust, col=c('brown2','deepskyblue'))
      15 
      16 shapiro.test(dust19$pm2.5)
      17 shapiro.test(dust20$pm2.5)
      18 
      19 wilcox.test(pm2.5 ~ month, data=dust)
    

    dust1912_2002.png

    > shapiro.test(dust19$pm2.5)
    
            Shapiro-Wilk normality test
    
    data:  dust19$pm2.5
    W = 0.9001, p-value < 2.2e-16
    
    > shapiro.test(dust20$pm2.5)
    
            Shapiro-Wilk normality test
    
    data:  dust20$pm2.5
    W = 0.90371, p-value < 2.2e-16
    
    > wilcox.test(pm2.5 ~ month, data=dust)
    
            Wilcoxon rank sum test with continuity correction
    
    data:  pm2.5 by month
    W = 266166, p-value = 0.4786
    alternative hypothesis: true location shift is not equal to 0
    
    

    T-test 결과

    T-Test (실제로는 Wilcoxon rank sum test)결과 2019년 12월과 2020년 2월의 초미세먼지 농도는 유의미하게 다르지 않다고 한다!!

    Chi-squared Test는 빈도를 비교할 때 사용

    '매우 나쁨'날의 빈도 비교

    2020년 2월의 공기질이 2019년 12월보다 나았다는 것을 꼭 주장하고 싶어서 다른 통계 방법을 써 보기로 한다.

    • boxplot을 보면, 초미세먼지 농도가 대부분 20~40 사이에 분포한다.
    • 그런 날은 우리가 미세먼지에 대한 생각 없이 그냥 살다가, 수치가 증가한 날 먼지의 존재를 느끼게 된다.
    • 단순히 초미세먼지의 농도를 비교하는 방법보다, "초미세먼지가 심한 날"이 몇일이나 되었나를 비교하는 방법을 써 보기로 했다.

    2018년 3월 20일 발표된 환경부 기준에 따르면,

    • 초미세먼지 농도가 76㎍/㎥ 이상이면 '매우 나쁨'이다.
    • dust 데이타의 pm2.5 가 76 이상인지 판단하여 dust$severe 라는 TRUE/FALSE vector로 만들어 저장하고,
    • table() 함수를 이용하여 TRUE/FALSE의 갯수를 헤아릴 것이다.

       1 dust$severe <- dust$pm2.5 >= 76
       2 veryBadDust <- table(dust$month, dust$severe)
       3 
       4 veryBadDust
    

              FALSE TRUE
      2019.12   761   11
      2020.02   675    0
    
    

    Chi-squared Test

    초미세먼지가 '매우 나쁨'인 날이 11일 vs. 0일이어서 비교가 불필요하지만, 어쨋든 chisq.test()를 하면 다음과 같다.

    • 계산 결과, p < 0.01 로 다른 어떤 이유없이 '우연히' 이러한 차이를 얻을 확률이 100분의 1 이하라고 한다.

    • 2019년 12월과 2020년 2월의 초미세먼지 '매우 나쁨'인 날의 수는, 우연이 아닐 가능성이 큰 것으로 보인다.

       1 chisq.test(veryBadDust)
    

            Pearson's Chi-squared test with Yates' continuity correction
    
    data:  veryBadDust
    X-squared = 7.8949, df = 1, p-value = 0.004958
    
    

    공기질을 여러 등급으로 나눠서 비교하기

    2018년 3월 20일 발표된 환경부 기준에 따르면,

    • 초미세먼지 농도가 0~15㎍/㎥ 면 '좋음',
    • 초미세먼지 농도가 16~35㎍/㎥ 면 '보통',
    • 초미세먼지 농도가 36~75㎍/㎥ 면 '나쁨',
    • 초미세먼지 농도가 76㎍/㎥ 이상이면 '매우 나쁨'이다.
    • 이 기준에 따라 공기질을 4등급으로 나누면,

       1 dust$severity = 'Good'
       2 dust$severity[dust$pm2.5 >= 16] = "Plain"
       3 dust$severity[dust$pm2.5 >= 36] = "Bad"
       4 dust$severity[dust$pm2.5 >= 76] = "Very Bad"
       5 
       6 dustSeverity <- table(dust$month, dust$severity)
       7 dustSeverity
    

    > dustSeverity
              Bad Good Plain Very Bad
      2019.12 185  146   431       11
      2020.02 195  146   334        0
    
    

    Category가 알파벳순(Bad, Good, Plain, Very Bad)으로 자동 정렬되었다.

    • 카이제곱 검정과는 관계 없지만, 공기질을 심각 순서로 정렬하려면 이 category를 factor로 인식시켜야 한다.

    그리고 Chi-squared test를 하면, p < 0.001 으로 계산된다.

    • 이는 2019년 12월과 2020년 2월의 초미세먼지 등급 차이를 '우연히' 얻을 확률이 1000분의 1 이하라는 뜻으로,
    • 우연에 의한 차이가 아닐 것으로, 유의미한 차이일 것으로 본다.

       1 dust$severity <- factor(dust$severity,
       2                         levels = c('Good','Plain','Bad','Very Bad'))
       3 dustSeverity <- table(dust$month, dust$severity)
       4 dustSeverity
       5 
       6 chisq.test(dustSeverity)
    

    > dustSeverity
              Good Plain Bad Very Bad
      2019.12  146   431 185       11
      2020.02  146   334 195        0
    
    > chisq.test(dustSeverity)
            Pearson's Chi-squared test
    
    data:  dustSeverity
    X-squared = 17.008, df = 3, p-value = 0.0007041
    
    


    /CentralLimitTheorem   /ChiSquared   /Clustering   /InstallR   /InstallRStudio   /Lies   /NormalDistribution   /RBasic   /RBasic1   /RBasic2   /RBasic3   /RCloud   /RIntro   /RKorean   /T-Test  
    Copyright © ChungLab. Built on MoinMoin and Bootstrap. All Rights Reserved.