두개의 모집단에 대한 추정과 검정 (two sample tests)에 대해서 정규분포 가정을 만족하는 경우와 그렇지 않은 경우로 나누어서 알아보겠습니다.

 

 

정규성 가정을 충족하는 경우

 

(1) 독립된 두 표본의 평균 차이에 대한 추정과 검정 : t.test()

     (indepentent two sample t-test)

 

(2) 짝을 이룬 표본에 대한 평균 차이에 대한 추정과 검정 : t.test(paired=TRUE)

     (paired sample t-test)

 

(3) 두 모집단의 모비율 차이에 대한 추정과 검정 : prop.test()

     (independent two population proportions test)

 

 

 

정규성 가정을 충족하지 못하는 경우, 혹은 분포형태를 모르는 경우

 

(4) 두 모집단의 중심 차이에 대한 비모수 검정 : wilcox.test()

    (non-parametric wilcoxon tests on two indepedent sample)

 

 

 

지난번 포스팅에서는 독립된 두 표본, 짝을 이룬 표본에 대한 평균 차이에 대한 추정과 검정을 했는데요, 이번 포스팅에서는 정규성 가정을 만족하는 분포에서 (3) 두 모집단의 모비율 차이에 대한 추정과 검정(independent two population proportions test), R의 prop.test() 함수에 대해 소개하겠습니다.

 

두 집단의 모비율에 대한 추정과 검정은 범주형 변수(categorical variable)에 대해 두 집단의 비율의 차이를 비교해보려고 할 때 사용하게 됩니다.  가령, 두 집단 간의 특정 정당 혹은 후보에 대한 지지율의 차이, 흡연자와 비흡연자의 폐암 발병률의 차이, A학교와 B학교 야구부 선수들의 평균 타율의 차이 등과 같이 yes/no, success/failure 로 구분이 되는 범주형 변수(categorical variable)에 대해 집단 간 차이가 있는지를 통계량을 사용해서 P-value 를 가지고 (혹은 채택역, 기각역을 사용해서) 검정을 하게 됩니다.

 

 

[ 두 모집단의 모비율 차이에 대한 추정과 검정통계량 ]

 

 

 

 

R의 prop.test() 함수의 기본적인 사용법은 아래와 같습니다.

 

 

[ R prop.test() 함수 사용법 ]

 

 

 

 

아래 예를 R porp.test() 함수를 사용해서 풀어보도록 하겠습니다.

 

 

예제 )  A회사 직장인 500명과 B회사 직장인 600명을 대상으로 조사를 한 결과, A회사 직장인의 흡연율은 33%, B회사 직장인의 흡연율은 41%로 나타났다. 그러면 A회사와 B회사 직장인의 흡연율(proportion of smokers)에는 차이가 있다고 할 수 있는지 유의수준 (significance level) 5% 에서 검정하시오.

 

 

 

귀무가설 Ho : A회사와 B회사의 흡연율은 차이가 없다 (p1 - p2 = 0)

대립가설 H1 : A회사와 B회사의 흡연율은 차이가 있다 (p1 - p2 != 0)

 

 

prop.test(x, ...)의 x에는 'number of events'를 집어넣어야 하므로 아래 문제에서는 비율(proportion) 과 관측값수(n)을 곱해서 x <- prop*n 으로 계산을 해서 새로운 벡터 x를 생성해서 prop.test(x,...)에 집어넣었습니다.

 

> ##----------------------------------------------------------
> ## independent two population proportions test : prop.test()
> ##----------------------------------------------------------
> 
> prop <- c(0.33, 0.41) # proportion of events
> n <- c(500, 600) # number of trials
> x <- prop*n # number of events
> x 
[1] 165 246
> 
> 
> prop.test(x = x, # number of events
+           n = n, # number of trials
+           alternative = c("two.sided"), # alternative = c("two.sided", "less", "greater")
+           conf.level = 0.95) # confidence level (= 1- significance level 'alpha')

	2-sample test for equality of proportions with continuity correction

data:  x out of n
X-squared = 7.1203, df = 1, p-value = 0.007622
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.13881966 -0.02118034
sample estimates:
prop 1 prop 2 
  0.33   0.41

 

 

P-value가 0.007622 이므로 유의수준(significance level) 5%에서 귀무가설을 기각하고 대립가설을 채택하여 A회사와 B회사의 흡연율에 차이가 있다고 할 수 있겠습니다. A회사보다 B회사가 스트레스를 더 받는 회사인 모양입니다. ^^; 

 

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

 

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

 

Posted by R Friend R_Friend

두개의 모집단에 대한 추정과 검정 (two sample tests)에 대해서 정규분포 가정을 만족하는 경우와 그렇지 않은 경우로 나누어서 알아보겠습니다.

 

 

정규성 가정을 충족하는 경우

 

(1) 독립된 두 표본의 평균 차이에 대한 추정과 검정 : t.test()

     (indepentent two sample t-test)

 

(2) 짝을 이룬 표본에 대한 평균 차이에 대한 추정과 검정 : t.test(paired=TRUE)

     (paired sample t-test)

 

(3) 두 모집단의 모비율 차이에 대한 추정과 검정 : prop.test()

     (independent two population proportions test)

 

 

 

정규성 가정을 충족하지 못하는 경우, 혹은 분포형태를 모르는 경우

 

(4) 두 모집단의 중심 차이에 대한 비모수 검정 : wilcox.test()

    (non-parametric wilcoxon tests on two indepedent sample)

 

 

 

지난번 포스팅에서는 독립된 두 표본에 대한 평균 차이에 대한 추정과 검정을 했는데요, 이번 포스팅에서는 정규성 가정을 만족하는 분포에서 (2) 짝을 이룬 두 표본의 평균 차이에 대한 추정과 검정(paired sample t-test)를 R의 t.test(paired=TRUE) 함수에 대해 소개하겠습니다.

 

 언제 짝을 이룬 표본에 대한 평균 차이에 대한 추정과 검정이 필요한지가 궁금할 텐데요, 두 표본이 상관관계가 있을 때, 전/후 비교 (paired before-after comparison)을 할 때 사용합니다. 

 

 

 

 

가령, 새로운 당뇨병 의약품을 만든 제약사가 신약의 효과를 측정하고 싶을 텐데요, 치료의 경과와 수준은 환자의 건강상태, 성별, 나이, 식생활 환경, 체질, 스트레스 수준,... 통제해야 할 수준이 무척 많으므로 치료의 차도가 있다고 하더라도 이게 신약 때문에 효과가 있는 것인지, 아니면 앞서 말씀드린 신약 외의 다양한 외부변수에 의한 치료 개선효과인지 분간하기가 힘들게 됩니다.  이런 문제를 해결하기 위해서, 즉 외부 요인을 최대한 통제할 수 있는 방안으로 검증하고자 하는 요인 외의 요인은 모두 동일하게 만들 수 있는 방법이 '짝을 이룬 두 표본(paired sample)'에 대해서 검증하고자 하는 요인만을 달리해서 그 차이(paired comparison)를 가지고 검정을 하는 방법이 있습니다.  이해를 돕기 위해서 아래에 2개의 예를 들어보았습니다.

 

 

 

 

 

Example 1 ) 새로운 당뇨병 치료제를 개발한 제약사의 예를 계속 들자면, 치료에 지대한 영향을 주는 외부요인을 통제하기 위해 10명의 당뇨병 환자를 선별하여 1달 동안 '위약(placebo)'을 투여한 기간의 혈압 (Xi)과 '신약(new medicine)'을 투여한 1달 기간 동안의 혈당 수치(Yi)를 측정하여 짝을 이루어 혈당 차이를 유의수준 5%에서 비교하는 방법이 짝을 이룬 표본에 대한 검정이 되겠습니다.

 

 

[ 환자 10명에 대한 당뇨병 치료제 투약 전/후 혈당 비교(before/after paired sample comparison) ]

 

(예를 들어 설명하기 위해 임의로 가공해서 만든 가짜 수치임.  혈당에 대해서는 아무것도 모름 ^^;)

 

 

귀무가설 H0 : 당뇨병 치료제는 효과가 없다 (mu1 = mu2, ie. difference = 0)

대립가설 H1 : 당뇨병 치료제는 효과가 있다 (혈당을 낮춘다, mu1 > mu2) => 우측검정(right-sided test)

 

위 문제를 R의 t.test(paired=TRUE) 함수를 사용해서 풀어보면 아래와 같습니다.

 

위의 t-검정통계량 공식에 따라서 계산한 아래 값과, t.test(paired=TRUE) 함수로 계산한 t-검정통계량 값이 3.5507로 서로 같음을 알 수 있습니다.  당뇨병 치료제가 효과가 있어서 혈당을 낮추었는지를 검정하는 것이므로 'alternative = c("greater") 옵션(mu1 > mu2)을 입력하였습니다. P-value 가 0.003105 이므로 유의수준 (significance level) 5% 에서 귀무가설을 기각하고 대립가설(치료제가 효과가 있음. 혈당을 낮추었음)을 채택하게 됩니다.

 

> 
> ##----------------------------------------------------------
> ## paired sample t-test
> ##----------------------------------------------------------
> 
> # paired 10 sample of patient's blood sugar
> x1 <- c(51.4, 52.0, 45.5, 54.5, 52.3, 50.9, 52.7, 50.3, 53.8, 53.1)
> x2 <- c(50.1, 51.5, 45.9, 53.1, 51.8, 50.3, 52.0, 49.9, 52.5, 53.0)
> 
> 
> # difference of x1, x2
> diff_x <- x1 - x2 
> diff_x
 [1]  1.3  0.5 -0.4  1.4  0.5  0.6  0.7  0.4  1.3  0.1
> 
> # mean of difference
> mean_diff_x <- mean(diff_x) 
> mean_diff_x
[1] 0.64
> 
> # standard deviation of difference
> sd_diff_x <- sd(diff_x) 
> sd_diff_x
[1] 0.5699903
> 
> # t statistics
> t_x <- mean_diff_x/(sd_diff_x / sqrt(length(diff_x))) 
> t_x
[1] 3.550688
> 
> # paired sample t-test : greater
> t.test(x1, x2, 
+        alternative = c("greater"), 
+        paired = TRUE, 
+        conf.level = 0.95)

	Paired t-test

data:  x1 and x2
t = 3.5507, df = 9, p-value = 0.003105
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
 0.3095874       Inf
sample estimates:
mean of the differences 
                   0.64

 

 

 

 

 

Example 2) 또 하나의 예를 들자면 두 종류의 신발 밑창의 원재료가 닳는 정도가 차이가 있는지를 검정하기 위해서 10명의 소년에게 한쪽은 A라는 원재료로 만든 신발을 신기고, 다른 한쪽은 B라는 원재료로 만든 신발을 신긴 후에, 일정 기간이 지난후에 신발을 수거하여 10명의 각 소년의 왼쪽 신발 밑창의 닳은 정도와 오른쪽 신발 밑창의 닳은 정도의 차이를 비교하여 두 종류 원재료의 재질이 다른지를 검정하는 방법이 짝을 이룬 표본에 대한 검정에 해당되겠습니다.

 

 

[ 신발 밑창 원재료 A, B별 닳은 정도 비교 (shoes material paired sample comparison) ]

 

 

귀무가설 H0 : 두 신발 원재료 A, B는 닳는 정도가 같다 (mu1 = mu2, ie. difference = 0)

대립가설 H1 : 두 신발 원재료 A, B는 닳는 정도가 다르다(mu1 != mu2, ie. difference != 0)
                    => 양측검정(two-sided test)

 

유의수준(significance level) 5%에서 위 가설을 검정하시오.

 

 

이번 예제는 MASS 패키지에 들어있는 shoes list 데이터셋을 이용해서 분석을 해보겠습니다.  위의 t-검정통계량 공식에 넣어 계산한 값과 아래의 R을 통해 계산한 t-검정통계량 값이 -3.3489 로서 서로 같음을 알 수 있습니다.  두 짝을 이룬 표본의 차이의 평균은 -0.41 이며, t-test 결과의 P-value가 0.008539 로서 유의수준 5% 하에서 귀무가설을 기각하고 대립가설(A, B 두 원재료는 차이가 있다)을 채택하게 되었습니다.

 

> ##-- Example 2
> 
> library(MASS)
> 
> str(shoes)
List of 2
 $ A: num [1:10] 13.2 8.2 10.9 14.3 10.7 6.6 9.5 10.8 8.8 13.3
 $ B: num [1:10] 14 8.8 11.2 14.2 11.8 6.4 9.8 11.3 9.3 13.6
> 
> # difference of shoes A and shoes B
> diff_shoes <- shoes$A - shoes$B
> diff_shoes
 [1] -0.8 -0.6 -0.3  0.1 -1.1  0.2 -0.3 -0.5 -0.5 -0.3
> 
> 
> # mean of difference
> mean_diff_shoes <- mean(diff_shoes)
> mean_diff_shoes
[1] -0.41
> 
> 
> # standard deviation of difference
> sd_diff_shoes <- sd(diff_shoes)
> sd_diff_shoes
[1] 0.3871549
> 
> 
> # t statistics
> t_shoes <- mean_diff_shoes/ (sd_diff_shoes/sqrt(length(diff_shoes)))
> t_shoes
[1] -3.348877
> 
> 
> # paired sample t-test : two.sided
> t.test(shoes$A, shoes$B, 
+        alternative = c("two.sided"), 
+        paired = TRUE, 
+        conf.level = 0.95)

	Paired t-test

data:  shoes$A and shoes$B
t = -3.3489, df = 9, p-value = 0.008539
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.6869539 -0.1330461
sample estimates:
mean of the differences 
                  -0.41 

 

 

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

 

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

 

 

Posted by R Friend R_Friend

두개의 모집단에 대한 추정과 검정 (two sample tests)에 대해서 정규분포 가정을 만족하는 경우와 그렇지 않은 경우로 나누어서 알아보겠습니다.

 

 

정규성 가정을 충족하는 경우

 

(1) 독립된 두 표본의 평균 차이에 대한 추정과 검정 : t.test()

     (indepentent two sample t-test)

 

(2) 짝을 이룬 표본에 대한 평균 차이에 대한 추정과 검정 : t.test(paired=TRUE)

     (paired sample t-test)

 

(3) 두 모집단의 모비율 차이에 대한 추정과 검정 : prop.test()

     (independent two population proportions test)

 

 

정규성 가정을 충족하지 못하는 경우, 혹은 분포형태를 모르는 경우

 

(4) 두 모집단의 중심 차이에 대한 비모수 검정 : wilcox.test()

    (non-parametric wilcoxon tests on two indepedent sample)

 

 

먼저, (1) 독립된 두 표본의 평균 차이에 대한 추정과 검정(indepentent two sample t-test)를 R의 t.test() 함수를 이용해 분석해 보겠습니다.

 

예제로 사용할 데이터는 MASS 패키지에 내장된 Cars93 데이터프레임의 가격(Price)과 생산국가(Origin) 입니다. 생산국이 USA vs. non-USA 2개의 group 에 대해서 차 가격(Price)의 평균이 차이가 있는지를 검정해보고, 95% 신뢰구간을 추정해보겠습니다.

 

> # Dataset
> library(MASS)
> str(Cars93)
'data.frame':	93 obs. of  27 variables:
 $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
 $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
 $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
 $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
 $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
 $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
 $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
 $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
 $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
 $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
 $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
 $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
 $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
 $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
 $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
 $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
 $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
 $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
 $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
 $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
 $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
 $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
 $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
 $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
 $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
 $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
 $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ... 

 

 

 

 

(1) 탐색적 분석

 

t-test에 들어가기 전에 탐색적 데이터 분석의 일환으로 R로 Origin별 관측값의 개수를 살펴보고, summary statistics, 박스그림(Box plot)과 Histogram 을 그려보면 아래와 같습니다.  

 

- USA 48개, non-USA 45개 관측치로서 sample size가 작지는 않으므로 t-test에 문제는 없겠습니다.

- summary 통계량(mean), Box plot과 Histogram을 보니 두 집단(USA vs. non-USA)의 가격의 평균에는 큰 차이는 없어보이는군요.

- summary 통계량(Min, Max), Box plot과 Histogram을 보니 두 집단(USA vs. non-USA)의 가격의 분산은 아무래도 차이가 있어보이는데요,

 

이것을 t-검정(t-test)을 통해서 확인해보겠습니다.

 

 

> # frequency distribution table
> table(Cars93$Origin)

    USA non-USA 
     48      45 
> 
> 
> # summary
> with(Cars93, tapply(Price, Origin, summary))
$USA
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   7.40   13.48   16.30   18.57   20.72   40.10 

$`non-USA`
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   8.00   11.60   19.10   20.51   26.70   61.90
> 
> 
> # box plot
> boxplot(Price ~ Origin, # Price by Origin (USA, non-USA)
+         data = Cars93, 
+         main = "Boxplot of Price by Origin",  
+         xlab = "Origin",  # x axis label
+         ylab = "Price") # y axis label
> 

 

> 
> # Histogram
> # install.packages("ggplot2") # only for first user of ggplot2
> library(ggplot2)
> 
> ggplot(Cars93, aes(x=Price)) + 
+   geom_histogram(binwidth=5) + 
+   facet_grid(Origin ~ .) +
+   ggtitle("Histogram of Price by Origin")
 

 

 
 

 

 

 

(2) 두 모집단의 분산 동일성 가정에 대한 검정 : F-test

두 독립 표본의 t-test 에서 두 모집단의 분산 동일성 가정을 만족하는지 여부에 따라 분석 옵션을 달리 주어야 하므로, 먼저 분산 동일성에 대한 F-검정(F-test)을 var.test() 함수를 이용해 해보겠습니다.

 

> # independent two sample variance test : var.test()
> # H0 : variance of price by origin is equal (sigma1^2/sigma2^2  = 1)
> # H1 : variance of price by origin is not equal (sigma1^2/sigma2^2  != 1)
> 
> var.test(Price ~ Origin, data = Cars93)

	F test to compare two variances

data:  Price by Origin
F = 0.47796, num df = 47, denom df = 44, p-value = 0.01387
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.2645004 0.8587304
sample estimates:
ratio of variances 
         0.4779637

 

 

P-value가 0.01387로서 매우 작은 값이 나왔으므로, 유의수준 5% 하에서 두 모집단의 분산이 동일하다는 귀무가설을 기각하고, 분산이 서로 다르다는 대립가설을 채택하게 됩니다.  따라서 아래에 t-test 할 때는 분산 동일성 여부에 대한 옵션에서 FALSE (var.equal = FALSE)를 지정하면 되겠습니다.

 

 

 

R의 t-test() 함수를 이용하는 방법에는 2가지가 있습니다.  첫번째는 x (numeric vector) ~ factor, data = data.frame 형식으로 사용하는 방법이며, 두번째는 x, y numeric vector 를 이용하는 방법입니다.  아래에 2가지 방법 모두를 순서대로 소개하였으며, 분석 결과는 똑같습니다.

 

(3-1) 두 모집단의 모평균 차이에 대한 추정과 검정 : t-test

        - 방법 1 : x ~ factor, data = data.frame

 

 

> 
> # independent two sample t-test : t-test()
> # H0 : price of USA vs. non-USA is equal
> # H1 : price of USA vs. non-USA is not equal
> 
> ##-- way 1. x ~ factor, data = data.frame
> t.test(Price ~ Origin, 
+        data = Cars93, 
+        alternative = c("two.sided"), # c("two.sided", "less", "greater")
+        var.equal = FALSE, 
+        conf.level = 0.95)

	Welch Two Sample t-test

data:  Price by Origin
t = -0.95449, df = 77.667, p-value = 0.3428
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -5.974255  2.102311
sample estimates:
    mean in group USA mean in group non-USA 
             18.57292              20.50889
 

 

 

 

(3-2) 두 모집단의 모평균 차이에 대한 추정과 검정 : t-test

        - 방법 2 : x, y numeric vectors

 

> 
> ##--- way 2. x, y numeric vectors

>

> # x, y numeric vector indexing > Price_USA <- Cars93[which(Cars93$Origin == c("USA")), c("Price")] > Price_nonUSA <- Cars93[which(Cars93$Origin == c("non-USA")), c("Price")] >

> # t-test() > t.test(Price_USA, Price_nonUSA, + alternative = c("two.sided"), # c("two.sided", "less", "greater") + var.equal = FALSE, + conf.level = 0.95) Welch Two Sample t-test data: Price_USA and Price_nonUSA t = -0.95449, df = 77.667, p-value = 0.3428 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -5.974255 2.102311 sample estimates: mean of x mean of y 18.57292 20.50889

 

 

P-value 가 0.3428로서 10% 유의수준(significance level) 하에서 양측검정(two-sided test) 결과 'USA와 non-USA의 가격의 모평균에는 차이가 없다'는 귀무가설(H0)을 채택(accept)할 수 있게 되었습니다.

 

그리고, 두 모집단의 모평균 차이에 대한 95% 신뢰구간은 (-5.974255, 2.102311) 로 나왔습니다.

 

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

 

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

 

 

Posted by R Friend R_Friend