연속형 확률분포 (Continuous probability distribution)에는
: norm()
: unif()
- 지수분포 (exponential distribution)
: exp()
: t()
: 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))
|
(3) 누적 카이제곱 분포 확률 값 계산 (chisq-distribution probability)
: pchisq(q, df, lower.tail = TRUE)
> 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) 카이제곱 분포 난수 발생
> > 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)
|
많은 도움 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^
'R 분석과 프로그래밍 > R 통계분석' 카테고리의 다른 글
R 단일 모집단의 모평균에 대한 신뢰구간 추정(confidence interval estimation)과 검정(test) : t.test() (13) | 2015.09.30 |
---|---|
R 신뢰구간(confidence interval), 신뢰계수(confidence coefficient), 유의수준(significance level) (0) | 2015.09.30 |
R 연속확률분포 F-분포(F-distribution) : df(), pf(), qf(), rf() (5) | 2015.09.25 |
R t-분포 (Student’s t-distribution) : t() (0) | 2015.09.24 |
R 지수분포 (exponential distribution) : exp() (6) | 2015.09.22 |