Skip to content

R활용 비율,테이블 #

Find similar titles

5회 업데이트 됨.

Edit
  • 최초 작성자
    Tuohy
  • 최근 업데이트
    Tuohy

Structured data

Category
Statistics

Population Proportion test #

통계적 검정(Statistical testing)은 모집단의 모수 또는 분포 형태에 대한 추정에 대해 그것이 옳은지 그를지를 임의로 추출한 표본(샘플)로부터 통계량을 측정하여 판단하는 통계적 절차를 말한다.

그 중 단일 모집단의 모비율에 대한 신뢰구간과 검정에 대해 알아보고자 한다.

자료가 범주형(categorical)인 경우, 기술 통계는 흔히 비율의 형태로 표현된다. 단순히 비율만을 결과로 보기도 하지만, 어떤 경우에는 비율을 가지고 가설검증을 해야하는 경우가 있다. 이럴 경우 비율 하나에 대한 검정, 두 비율을 비교하는 검정, 셋 이상의 비율을 비교하는 검정 등을 수행한다.

하나의 비율 #

Image

하나의 비율이 어떤 값 P0와 같은지 검정할 때 binom.test()로 exact test를 이용하거나 prop.test()로 정규분포에 근사시켜 분석할 수 있다.

binom.test() #

binom.test()는 이항분포로부터 직접 p-value를 구하는 exact test이다. 한 번의 시행에서 사건 A가 일어날 확률이 p로 일정할 때, n번의 독립시행에서 사건 A가 일어나는 횟수를 X라고 하자. 이때 확률변수 X가 가질 수 있는 값은 0, 1, 2, ... , n이며, 그 확률질량함수는 다음과 같다.

Image

이와 같은 확률분포를 이항분포라고 하며, 이것을 기호로 B(n, p)와 같이 나타내고, 확률변수 X는 이항분포 B(n,p)를 따른다고 한다.

여기서 n은 시행 횟수이고 p는 각 시행에서 사건 A가 일어날 확률이다.

[예제]
동전을 100번 던졌을 때 앞면이 44번 나왔다. 
이 동전의 앞면이 나올 확률이 0.5와 같은지 검정해보자.
> binom.test(44,100, 0.5)

    Exact binomial test

data:  44 and 100
number of successes = 44, number of trials = 100, p-value = 0.2713
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.3408360 0.5428125
sample estimates:
probability of success 
              0.44

[결과]              
귀무가설 : 동전의 앞면이 나올 확률은 0.5이다.
대립가설 : 동전의 앞면이 나올 확률은 0.5가 아니다.
검정통계량 : p = 0.44
p-value : 0.2713 > 0.05
=> 결정 : p-value가 0.05보다 크므로 귀무가설을 기각하지 못하므로 동전의 앞면이 나올 확률은 0.5이다.

prop.test() #

prop.test()는 정규분포를 띄는 단일 모집단에서 충분히 큰 규모로 임의로 표본을 추출하여 표본비율(one sample proportion)을 분석하여 미지의 모수인 모비율(one population proportion)에 대한 검정을 하기 위해 사용한다. prop.test()는 귀무가설하의 기대값인 p0를 빼고 표준오차로 나누어 정규분포에 근사한다.

Image

도수가 커질수록 exact test인 binom.test()와 prop.test()와의 차이가 적어져 근사한 결과를 보인다. exact test는 많은 계산이 요구되므로 과거에는 도수가 적을 때만 사용하였으나, 요즘에는 도수가 크다고 하더라도 exact test를 수행하는데에 큰 문제가 되지 않아 binom.test()를 사용하기도 한다.

[예제]
100원짜리 동전 던지기를 1000번 했는데, 앞면이 485번 나왔다. 그렇다면 이 동전은 앞면과 뒷면이 균일한 동전이라고 말할 수 있는지를 유의수준 5%로 검정하고, 신뢰계수 95%의 신뢰구간을 구하여라.
> prop.test(485, 1000, p = 0.5, alternative = c('two.sided'), conf.level = 0.95)

    1-sample proportions test with continuity correction

data:  485 out of 1000, null probability 0.5
X-squared = 0.841, df = 1, p-value = 0.3591
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.4536437 0.5164729
sample estimates:
    p 
0.485

p_value가 0.3591로 0.05보다 크므로, 유의수준(significance level) 5%에서 귀무가설에 기각하지 못하게 되어 동전의 앞면이 나올 확률은 0.5이다.

## 신뢰구간 ##
> prop.test_confi_95$conf.int
[1] 0.4536437 0.5164729

또한, 신뢰계수 95%의 신뢰구간은 0.453 ~ 0.516이다.

이산형 분포를 연속형인 정규분포 등으로 근사시켜 생기는 오차를 보정해줄 수 있는데, 이를 연속성 수정(continuity correction)이라 한다. 이는 prop.test() 함수에 옵션으로 correct = TRUE 값을 추가함으로써 보정할 수 있다(default : FALSE).

> prop.test(485, 1000, p = 0.5, correct = TRUE)
    1-sample proportions test with continuity correction
data:  485 out of 1000, null probability 0.5
X-squared = 0.841, df = 1, p-value = 0.3591
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.4536437 0.5164729
sample estimates:
    p 
0.485

두 비율의 차이 #

독립적인 두 비율의 차이가 있는지 검정하고 싶을때, 귀무가설은 두 비율이 같다는 전제하에 다음과 같은 대립가설을 세울 수 있다.

대립가설 R 명령어
A의 비율 == B의 비율 prop.test(c(샘플a,샘플b), c(샘플a의 모집단,샘플b의 모집단))
A의 비율 > B의 비율 prop.test(c(샘플a,샘플b), c(샘플a의 모집단,샘플b의 모집단), alter = 'greater')
A의 비율 < B의 비율 prop.test(c(샘플a,샘플b), c(샘플a의 모집단,샘플b의 모집단), alter = 'less')
[예제]
A는 주사위를 50번 던져서 1의 눈이 9번 나왔고, B는 60번 주사위를 던져서 1의 눈이 8번 나왔다. 두 사람의 1의 눈이 나오는 비율이 같은지 검정할 수 있다.

> prop.test(c(9,8), c(50,60))

    2-sample test for equality of proportions with continuity correction

data:  c(9, 8) out of c(50, 60)
X-squared = 0.16756, df = 1, p-value = 0.6823
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.1085548  0.2018881
sample estimates:
   prop 1    prop 2 
0.1800000 0.1333333

결론 : A의 비율은 0.18, B의 비율은 0.133이고, p_value는 0.6823으로 유의하지 않아서 귀무가설을 기각하지 못하고 A와 B의 비율은 유의한 차이가 없다.

셋 이상 비율의 차이 #

prop.test()함수를 통해 셋 이상의 비율들이 모두 동일한지에 대해서도 검정할 수 있다.

[예제]
A, B, C 세사람이 주사위를 각 100번씩 던져 1의 눈이 나온 비율을 구한 결과, 14, 18, 15번이다. 그렇다면, A, B, C에서 1의 눈이 나오게 던지는 확률이 모두 같은지 검정해보자.

> prop.test(c(14,18,15), c(100,100,100))

    3-sample test for equality of proportions without continuity
    correction

data:  c(14, 18, 15) out of c(100, 100, 100)
X-squared = 0.65596, df = 2, p-value = 0.7204
alternative hypothesis: two.sided
sample estimates:
prop 1 prop 2 prop 3 
  0.14   0.18   0.15

p_value 값이 0.05보다 크므로 유의하지 않다. 
즉, 귀무가설을 기각시키지 하므로, 세 비율간에는 유의한 차이가 없다는 결론을 얻을 수 있다.

Table #

R에서 통계적인 방법인 chi-square test 나 Fisher-exact test, McNemar test 들은 일반적으로 입력값으로 table 형태의 데이터가 필요하다.

보통 table 형태의 데이터를 만들기 위해 matrix()함수를 이용하여 직접 도수를 입력하는 방법도 있지만, xtabs()함수를 통해 더욱 편리하게 table 데이터를 만들 수 있다.

Table 만들기 #

matrix() #

table 형태의 데이터를 다음과 같이 matrix() 함수를 이용하여 생성할 수 있다.

matrix(벡터, ncol = 열의 수)

(예제)
> matrix(c(48,20,16,40), ncol = 2)
     [,1] [,2]
[1,]   48   16
[2,]   20   40

만약 byrow = TRUE 라는 옵션을 추가하게 되면 row를 중심으로 순서대로 값이 채워진다.

(예제)
> matrix(c(48,20,16,40), ncol = 2, byrow = TRUE)
     [,1] [,2]
[1,]   48   20
[2,]   16   40

xtabs() #

앞의 matrix() 함수의 경우, table의 각 영역에 해당되는 도수를 알 때 더욱 적극적으로 사용할 수 있고, xtabs()의 경우는 데이터의 각 번부에 해당하는 정보를 이용하여 테이블을 구성할 수 있다.

xtabs(도수 ~ 가로  + 세로)

(예제)
> head(respire)
  treat    outcome    count
1 placebo        1       16
2 placebo        0       48
3 test           1       40
4 test           0       20

> resp = xtabs(count ~ treat + outcome, data = respire)
> resp
            outcome
  treat       0   1
    placebo  48  16
    test     20  40

참고 #

http://math7.tistory.com/23
http://rfriend.tistory.com/tag/population proportion test [R, Python 분석과 프로그래밍 (by R Friend)]

0.0.1_20230725_7_v68