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

    Navigation

    • FindPage
    • HelpContents
    • FunReading

    Upload page content

    You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

    File to load page content from
    Page name
    설명

    • 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.