프로그램 소스


# R을 이용한 통계 프로그래밍 기초

# 제8장 카이제곱 검정

# 8.1 카이제곱 독립성 검정

# 8.1.1 데이터가 빈도표로 주어진 경우

x = matrix(c(54, 63, 45, 65), nc = 2)
chi = chisq.test(x) # 카이제곱 검정 결과를 chi 변수에 저장
chi

attributes(chi) # 다양한 카이제곱 검정결과를 확인
chi$observed # 입력값 확인
chi$expected # 기대값 확인
chi$residuals

# 8.1.2 데이터가 개체에 대한 정보로 주어진 경우

x = seq(1, 12)
gender = c("M", "M", "M", "M", "M", "M", "F", "F", "F", "F", "F", "M")
admit = c("Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "N", "N", "Y", "Y")
y = cbind(x, gender, admit)
table(gender, admit)
chisq.test(gender, admit)

# 예 8.1 음주 빈도에 따라 협연 빈도에 차이가 있는가?

y = matrix(c(20, 30, 20, 25, 30,
20, 20, 35, 37, 31,
16, 29, 40, 45, 30,
9, 10, 35, 37, 31,
10, 10, 26, 39, 40), nrow = 5)
chi_sa = chisq.test(y)
chi_sa

# 8.2 카이제곱 적합도 검정

# 예 8.2 빨강, 노랑, 파랑, 초록의 알사탕 개수가 균등한가?

y = c(30, 20, 27, 23)
p = rep(0.25, 4)
chisq.test(y, p = p) # 데이터가 주어진 분포에 맞는가?

# 예 8.3 원주율 파이 2000자리에서 각 수의 분포가 균등한가?
library(UsingR)
data(pi2000)
table(pi2000)
chisq.test(table(pi2000), p = rep(0.1, 10)) # 데이터가 주어진 분포에 맞는가?

# 예 8.4 고등학생 흡연 빈도와 음주 빈도에 관한 연구
library(UsingR)
data(samhda)

# a) 흡연빈도가 주어진 분포와 일치하는가?
y = table(samhda$amt.smoke[samhda$amt.smoke<98]) # amt.smoke가 98미만인 데이터 중 amt.smoke의 빈도표
y
p = c(0.2, 0.15, 0.05, 0.05, 0.1, 0.15, 0.3) # 가정한 분포
chisq.test(y, p = p)

# b) 음주빈도가 주이진 분포와 일치하는가?
z = table(samhda$amt.alcohol[samhda$amt.alcohol < 98]) # amt.alcohol이 98미만인 데이터 중 amt.alcohol의 빈도표
z
p = c(0.01, 0.04, 0.05, 0.1, 0.1, 0.3, 0.4) # 주어진 분포
a = chisq.test(z, p = p)
attributes(a) # 분석결과 범주 확인
a # 기본분석결과 확인
a$expected # 기대값 확인


프로그램 결과

>
> # R을 이용한 통계 프로그래밍 기초
>
> # 제8장 카이제곱 검정
>
> # 8.1 카이제곱 독립성 검정
>
> # 8.1.1 데이터가 빈도표로 주어진 경우
>
> x = matrix(c(54, 63, 45, 65), nc = 2)
> chi = chisq.test(x) # 카이제곱 검정 결과를 chi 변수에 저장
> chi

Pearson's Chi-squared test with Yates' continuity correction

data: x
X-squared = 0.4388, df = 1, p-value = 0.5077

>
> attributes(chi) # 다양한 카이제곱 검정결과를 확인
$names
[1] "statistic" "parameter" "p.value" "method" "data.name" "observed"
[7] "expected" "residuals"

$class
[1] "htest"

> chi$observed # 입력값 확인
[,1] [,2]
[1,] 54 45
[2,] 63 65
> chi$expected # 기대값 확인
[,1] [,2]
[1,] 51.02643 47.97357
[2,] 65.97357 62.02643
> chi$residuals
[,1] [,2]
[1,] 0.4162750 -0.4293158
[2,] -0.3660943 0.3775631
>
> # 8.1.2 데이터가 개체에 대한 정보로 주어진 경우
>
> x = seq(1, 12)
> gender = c("M", "M", "M", "M", "M", "M", "F", "F", "F", "F", "F", "M")
> admit = c("Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "N", "N", "Y", "Y")
> y = cbind(x, gender, admit)
> table(gender, admit)
admit
gender N Y
F 2 3
M 2 5
> chisq.test(gender, admit)

Pearson's Chi-squared test with Yates' continuity correction

data: gender and admit
X-squared = 0.0429, df = 1, p-value = 0.836

Warning message:
In chisq.test(gender, admit) : 카이 자승 근사는 부정확할지도 모릅니다
>
> # 예 8.1 음주 빈도에 따라 협연 빈도에 차이가 있는가?
>
> y = matrix(c(20, 30, 20, 25, 30,
+ 20, 20, 35, 37, 31,
+ 16, 29, 40, 45, 30,
+ 9, 10, 35, 37, 31,
+ 10, 10, 26, 39, 40), nrow = 5)
> chi_sa = chisq.test(y)
> chi_sa

Pearson's Chi-squared test

data: y
X-squared = 36.9249, df = 16, p-value = 0.002149

>
> # 8.2 카이제곱 적합도 검정
>
> # 예 8.2 빨강, 노랑, 파랑, 초록의 알사탕 개수가 균등한가?
>
> y = c(30, 20, 27, 23)
> p = rep(0.25, 4)
> chisq.test(y, p = p) # 데이터가 주어진 분포에 맞는가?

Chi-squared test for given probabilities

data: y
X-squared = 2.32, df = 3, p-value = 0.5087

>
> # 예 8.3 원주율 파이 2000자리에서 각 수의 분포가 균등한가?
> library(UsingR)
> data(pi2000)
> table(pi2000)
pi2000
0 1 2 3 4 5 6 7 8 9
181 213 207 189 195 205 200 197 202 211
> chisq.test(table(pi2000), p = rep(0.1, 10)) # 데이터가 주어진 분포에 맞는가?

Chi-squared test for given probabilities

data: table(pi2000)
X-squared = 4.42, df = 9, p-value = 0.8817

>
> # 예 8.4 고등학생 흡연 빈도와 음주 빈도에 관한 연구
> library(UsingR)
> data(samhda)
>
> # a) 흡연빈도가 주어진 분포와 일치하는가?
> y = table(samhda$amt.smoke[samhda$amt.smoke<98]) # amt.smoke가 98미만인 데이터 중 amt.smoke의 빈도표
> y

1 2 3 4 5 6 7
32 7 13 10 14 43 105
> p = c(0.2, 0.15, 0.05, 0.05, 0.1, 0.15, 0.3) # 가정한 분포
> chisq.test(y, p = p)

Chi-squared test for given probabilities

data: y
X-squared = 52.1756, df = 6, p-value = 1.719e-09

>
> # b) 음주빈도가 주이진 분포와 일치하는가?
> z = table(samhda$amt.alcohol[samhda$amt.alcohol < 98]) # amt.alcohol이 98미만인 데이터 중 amt.alcohol의 빈도표
> z

1 2 3 4 5 6 7
2 2 16 24 39 90 90
> p = c(0.01, 0.04, 0.05, 0.1, 0.1, 0.3, 0.4) # 주어진 분포
> a = chisq.test(z, p = p)
Warning message:
In chisq.test(z, p = p) : 카이 자승 근사는 부정확할지도 모릅니다
> attributes(a) # 분석결과 범주 확인
$names
[1] "statistic" "parameter" "p.value" "method" "data.name" "observed"
[7] "expected" "residuals"

$class
[1] "htest"

> a # 기본분석결과 확인

Chi-squared test for given probabilities

data: z
X-squared = 17.7605, df = 6, p-value = 0.00686

> a$expected # 기대값 확인
1 2 3 4 5 6 7
2.63 10.52 13.15 26.30 26.30 78.90 105.20
>
>
>
>

+ Recent posts