Chi-squared Test

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

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

   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월보다 나았다는 것을 꼭 주장하고 싶어서 다른 통계 방법을 써 보기로 한다.

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

   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()를 하면 다음과 같다.

   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일 발표된 환경부 기준에 따르면,

   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)으로 자동 정렬되었다.

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

   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


Class/Statistics/ChiSquared (2020-09-27 21:16:06에 gehoon가(이) 마지막으로 수정)