'카이제곱 분포'에 해당되는 글 1건

  1. 2015.09.30 R 카이제곱 분포 (chi-squared distribution) : chisq()

연속형 확률분포 (Continuous probability distribution)에는

 

 - 정규분포 (normal distribution)

   : norm()

 

 - 균등분포 (uniform distribution)

   : unif()

 

  - 지수분포 (exponential distribution)

   : exp()

 

 - t-분포 (t-distribution)

   : t()

 

 - F-분포 (F-distribution)

   : f()

 

  - 카이제곱분포(chisq-distribution)

   : chisq()

 

등이 있습니다.  

 

표본분포를 나타낼 때 t-분포, F-분포, 카이제곱 분포 등을 사용하는데요, 이번 포스팅에서는 이중에서 카이제곱 분포 (chi-squared distribution)에 대해서 소개하도록 하겠습니다.

 

카이제곱 분포 (chi-squared distribution)은 k개의 서로 독립적이고 표준정규분포를 따르는 확률변수 X 를 제곱한 값들을 합하였을 때의 분포이며, 이때 k 는 자유도 (degrees of freedom) 로서 카이제곱 분포의 parameter 가 됩니다.

 

 

 

 

위에서 카이제곱 분포는 표본분포 중의 하나이며, 정규분포와도 관련이 있다고 했는데요, 카이제곱 분포 (chi-squared distribution)은 모집단의 분산에 대한 추정과 검정에 활용됩니다.  그리고 F-분포와도 관련이 있는데요, F-분포가 카이제곱 분포를 따르는 두 개의 확률변수를 가지고 자유도 2개를 parameter로 사용하는 분포이구요, 카이제곱 분포는 정규분포를 따르는 확률변수를 가지고 제곱해서 합한 값의 분포로서 자유도 1개만을 parameter로 사용하는 분포가 되겠습니다. 

 

 

R을 활용한 카이제곱 분포 함수 및 parameter는 다음과 같습니다. 그래프 모양부터 확인하고 함수를 하나씩 예를 들어보겠습니다.   카이제곱 분포를 활용해서 집단 독립성 여부 가설에 대해 검정하는 예도 마지막에 들어보겠습니다(이것이 카이제곱 분포 공부하는 이유! ^^).

 

함수 구분

함수 / parameter

 chisq()

  밀도함수

  (density function) 

d

  dchisq(df)

  누적분포함수

 (cumulative distribution function)

p

  pchisq(df, lower.tail=TRUE/FALSE)

  분위수 함수

 (quantile function)

q

  qchisq(df, lower.tail=TRUE/FALSE)

  난수 발생

  (random number generation)

r

  rchisq(n, df)

 

 

 

(1) 카이제곱 분포 그래프 (chi-squared distribution plot by degrees of freedom)
    : stat_function(fun=dchisq, args=list(df))

 

위의 카이제곱 분포 정의에서 보다시피 확률변수 Xi를 제곱한 값을 summation 한 값의 분포가 카이제곱 분포이므로 모두 + 값만을 가지고 되어 0 보다 오른쪽에 있게 됩니다.  (표준정규분포는 0을 중심으로 + 와 - 가 양분)  그리고 왼쪽으로 심하게 치우쳐 있고, 오른쪽으로 꼬리가 길게 늘어서 있습니다.  오른쪽으로 갈 수록 값이 큰 경우의 도수가 현저하게 줄어드고, 0 에 가까운 왼쪽으로 갈 수록 도수가 급격하게 증가하는, 심하게 왼쪽으로 쏠린 분포라고 하겠습니다.  자유도 k 에 따라서 그래프가 바뀌는 모양은 아래의 3개 case를 통해서 확인해보기 바랍니다. (자유도 3의 경우 F 분포와 모양이 유사하지요?)

 

 

> library(ggplot2)
> 
> 
> ggplot(data.frame(x=c(0,10)), aes(x=x)) +
+   stat_function(fun=dchisq, args=list(df=1), colour="black", size=1.2) +
+   geom_text(x=0.6, y=1, label="df=1") +
+    
+   stat_function(fun=dchisq, args=list(df=2), colour="blue", size=1.2) +
+   geom_text(x=0, y=0.55, label="df=2") +
+      
+   stat_function(fun=dchisq, args=list(df=3), colour="red", size=1.2) +
+   geom_text(x=0.5, y=0.05, label="df=3") +
+      
+   ggtitle("Chisq-Distribution")

 

 

 

 

 

 

(2) 누적 카이제곱 분포 그래프 (cumulative chi-squared distribution plot)

   : stat_function(fun=pchisq, args=list(df))

 

 

> # (2) 누적 카이제곱 분포 그래프 (cumulative chi-squared distribution plot) > > ggplot(data.frame(x=c(0,10)), aes(x=x)) + + stat_function(fun=pchisq, args=list(df=1), colour="black", size=1.2) + + geom_text(x=2.5, y=0.93, label="df=1") + + + stat_function(fun=pchisq, args=list(df=2), colour="blue", size=1.2) + + geom_text(x=2.5, y=0.77, label="df=2") + + + stat_function(fun=pchisq, args=list(df=3), colour="red", size=1.2) + + geom_text(x=2.5, y=0.45, label="df=3") + + + ggtitle("Cumulative Chisq-Distribution")

 

 

 

 

 

(3) 누적 카이제곱 분포 확률 값 계산 (chisq-distribution probability)

    : pchisq(q, df, lower.tail = TRUE)

 

 

> # (3) 누적 카이제곱 분포 확률 값 계산 (cumulative probability at q quantile of chisq-distribution) > pchisq(q=2.5, df=1, lower.tail = TRUE) [1] 0.8861537 >

> pchisq(q=2.5, df=2, lower.tail = TRUE)
[1] 0.7134952
> 
> pchisq(q=2.5, df=3, lower.tail = TRUE)
[1] 0.5247089
 

 

 

 

(4) 카이제곱 분포 분위수 계산 (quantile value for specific probability of chisq-distribution)

 : qchisq(p, df, lower.tail=TRUE) 

 

위 (3)번의 pchisq()와 역의 관계에 있는 아래 (4)번의 qchisq() 함수 예제는 아래와 같습니다.

 

 
> # (4) 카이제곱 분포 분위수 계산 (quantile value for specific probability of chisq-distribution)
> 
> qchisq(p=0.8861537, df=1, lower.tail = TRUE)
[1] 2.5
> 
> qchisq(p=0.7134952, df=2, lower.tail = TRUE)
[1] 2.5
> 
> qchisq(p=0.5247089, df=3, lower.tail = TRUE)
[1] 2.5

 

 

 

 

(5) 카이제곱 분포 난수 발생

 

> # (5) 카이제곱 분포 난수 발생 (chisq-distribution random number generation) : rchisq(n, df)
> 
> rchisq <- rchisq(n=100, df=2)
> rchisq
  [1]  5.55032676  0.11525963  2.07644124  0.51528086  0.11859888  0.42973604  0.70499599  0.14487303
  [9]  5.97267125  1.56690348  0.58191202  0.70909369  3.35827777  0.21920825  0.61245462  0.38701193
 [17]  0.24927629  1.57808212  0.88996040  0.64965766  0.25870279  1.49434540  3.54133658  0.42318565
 [25] 11.70768889  2.13877942  1.06981339  5.29613195  1.51610509  2.70021112  1.01412157  0.64321783
 [33]  0.12791346  0.34348613  3.98654362  0.66337839  5.49603471  2.08228802  0.03906119  1.58919877
 [41]  0.38777794  2.31990975  3.21569380  0.19971089  1.50807461  4.54283466  2.97805146  3.27722149
 [49]  3.22608707  3.59353437  6.00263483  2.61364942  0.40056050  2.41963582  0.33523347  2.36712127
 [57]  8.51839523  0.13128607  1.41192196  5.25834986  0.83043323  5.23781460  1.70021291  3.83561464
 [65]  4.29016862  2.77080963  0.73163409  9.30564564  0.68487159  1.74665897  3.43854539  1.57618785
 [73]  2.15393289  0.56409968  0.03347495  0.21295686  2.33164034  0.12940326  2.08870172  2.88493676
 [81]  0.28369908  6.03088340  0.15760641  0.67655815  1.46900015  0.41068896  3.06536991  0.48259672
 [89]  0.13034650  1.31484537  0.38220237  1.68373899  2.75310928  0.94021333  0.50195281  0.55858578
 [97]  2.15590237 11.30222464  1.45066890  0.09005381
> 
> hist(rchisq, breaks=20)

 

 

 

 

 

 

(6) 범주형 데이터에 대한 분할표와 카이제곱 검정 (contingency table and chisq-test for categorical data)

  : CrossTable(x, y, chisq = TRUE)

 

vcd 패키지에 들어있는, 류머티스 관점염 환자에 대한 신약 테스트 결과를 모아놓은 Arthritis 데이터 프레임을 가지고 예를 들겠습니다.  gmodels 패키지를 사용해서 분할표를 집계하고, chisq=TRUE 옵션을 추가해서 카이제곱 검정 (신약이 류머티즘성 관점염에 효과가 있는지 없는지, 독립적인지 아닌지) 을 해보았습니다.  p-value = 0.001462643  인 것으로  봐서는 유의수준 5% 에서 통계적으로 효과가 있다고 봐야겠네요. (효과가 없다는 귀무가설을 기각하고, 효과가 있다(즉 독립이 아니다)는 대립가설 채택)

 

> # (6) chisq-test
> library(gmodels)
> library(vcd)
> 
> str(Arthritis)
'data.frame':	84 obs. of  5 variables:
 $ ID       : int  57 46 77 17 36 23 75 39 33 55 ...
 $ Treatment: Factor w/ 2 levels "Placebo","Treated": 2 2 2 2 2 2 2 2 2 2 ...
 $ Sex      : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...
 $ Age      : int  27 29 30 32 46 58 59 59 63 63 ...
 $ Improved : Ord.factor w/ 3 levels "None"<"Some"<..: 2 1 1 3 3 3 1 3 1 1 ...
> 
> attach(Arthritis)
> 
> CrossTable(Treatment, Improved, 
+            expected = TRUE, # expected frequency
+            chisq = TRUE) # chisq-test 

 
   Cell Contents
|-------------------------|
|                       N |
|              Expected N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|

 
Total Observations in Table:  84 

 
             | Improved 
   Treatment |      None |      Some |    Marked | Row Total | 
-------------|-----------|-----------|-----------|-----------|
     Placebo |        29 |         7 |         7 |        43 | 
             |    21.500 |     7.167 |    14.333 |           | 
             |     2.616 |     0.004 |     3.752 |           | 
             |     0.674 |     0.163 |     0.163 |     0.512 | 
             |     0.690 |     0.500 |     0.250 |           | 
             |     0.345 |     0.083 |     0.083 |           | 
-------------|-----------|-----------|-----------|-----------|
     Treated |        13 |         7 |        21 |        41 | 
             |    20.500 |     6.833 |    13.667 |           | 
             |     2.744 |     0.004 |     3.935 |           | 
             |     0.317 |     0.171 |     0.512 |     0.488 | 
             |     0.310 |     0.500 |     0.750 |           | 
             |     0.155 |     0.083 |     0.250 |           | 
-------------|-----------|-----------|-----------|-----------|
Column Total |        42 |        14 |        28 |        84 | 
             |     0.500 |     0.167 |     0.333 |           | 
-------------|-----------|-----------|-----------|-----------|

 
Statistics for All Table Factors


Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 =  13.05502     d.f. =  2     p =  0.001462643 


 
> 
> detach(Arthritis)

 

 

많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^

 

 

Posted by R Friend R_Friend