두개의 모집단에 대한 추정과 검정 (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

댓글을 달아 주세요

  1. AJK 2017.11.21 14:42  댓글주소  수정/삭제  댓글쓰기

    머신러닝을 진행하면서 t-test를 사용하는 경우가 있는지 궁금합니다!

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

 

단일 모집단에 대한 통계적 추론 (추정과 검정) 과 관련하여

 

[표본이 크고 정규성 충족 시]

- 단일 모집단의 모평균에 대한 신뢰구간 추정과 검정

   : t.test()

 

- 단일 모집단의 모분산에 대한 신뢰구간 추정과 검정

 

   : chisq test

 

- 단일 모집단의 모비율에 대한 신뢰구간 추정과 검정

   : prop.test()

 

 

[정규성 미충족 시]

- 단일 모집단 중심에 대한 비모수 검정

  : wilcox.test()

 

 

[정규성 여부 검정]

- 단일 모집단 분포의 정규성 검정

  : shapiro.test(), qqnorm(), qqline()

 

을 차례로 살펴보겠습니다.

 

이번 포스팅에서는 정규분포 형태를 띠는 단일 모집단에서 임의로 많은 갯수의 표본을 추출하여 미지의 모수인 모평균 μ 에 대한 95% 신뢰계수의 신뢰구간 추정과 검정을 R의 t.test() 함수를 활용해서 해보겠습니다.

(표본의 크기가 충분히 크면 중심 극한의 정리에 의거하여 정규분포를 가정)

 

 

먼저, 기본 용어부터 살펴보자면

 

[ 귀무가설 (null hypothesis: H0), 대립가설 (alternative hypothesis : H1) ]

 

 

  • 귀무가설 (null hypothesis: H0) : 현재까지 참이라고 알려진 사실

  • 대립가설 (alternative hypothesis : H1) : 귀무가설에 반대되는 가설로, 연구자가 표본자료로 부터 입증하고자 하는 주장, 추정, 가설

 

 

 

 

[ 대립가설의 형태에 따른 검정의 분류 (Types of alternative hypothesis) ]

 

 

  • 단측 검정 (One-sided test) : H1 : population mean > (greater) or < (less) than specific value
    (greater : 우측 검정, less : 좌측 검정)
  • 양측 검정 (Tow-sided test) : H1 : population mean =! (not equal) with specific value

 

 

 

 

[ 검정 통계량 (test statistic)과 P-value]

  • 검정 통계량 (test statistic) : 귀무가설의 채택 또는 기각 여부를 판단하는데 사용하는 통계량
  • 표본자료로부터 관측된 모수의 추정값이 귀무가설 하에서 일어나기 힘든 값, 매우 희귀한 값이면 귀무가설을 기각하고 대립가설을 채택하는 원리
  • 임의적 판단이 아닌, 검정 통계량의 확률분포와 유의 수준(significance level)를 이용해 판단
  • P-value : 귀무가설이 옳다는 가정 하에서 표본으로부터 계산된 검정 통계량의 값보다 더 극단적인 결과가 나올 확률로서, P-value가 유의 수준보다 작으면 귀무가설을 기각하고 대립가설을 채택

 

---------------------------------------------------------------------

 

문제 하나를 가지고 예를 들어서 R t.test() 함수를 활용해 추정과 검정 해보겠습니다.

 

 

문제 ) 2010년도에 서울 지역의 고등학교 1학년 남학생의 몸무게를 전수 조사하였더니 평균이 63.0 kg, 표준편차가 8.0 kg이 나왔다.  2015년에 15명의 남학생을 무작위로 표본을 추출하여 몸무게를 재어보니 {70.2, 54.9, 67.0, 60.5, 63.4, 61.9, 71.8, 66.1, 72.6, 73.0, 68.7, 70.3, 66.2, 55.6, 65.9} 와 같이 나왔을 때 서울 지역 고등학교 1학년 남학생의 몸무게가 5년 전보다 더욱 증가했다고 볼 수 있는가?

 

(대립가설 1, 단측 검정 "greater") 서울 지역 고등학교 1학년 남학생의 몸무게가 5년 전보다 더욱 증가하였다는 대립가설을 검정하시오.

 

H0 : 서울 지역 고등학교 1학년 남학생의 몸무게는 5년 전보다 증가하지 않음

H1 : 서울 지역 고등학교 1학년 남학생의 몸무게가 5년 전보다 더욱 증가

 

 

# Normal distribution plot, X~N(63, 8^2), right-sided test
x1 <- c(33:93)
plot(x1, dnorm(x1, mean=63, sd=8), type='l',
     main="Normal distribution, X~N(63,8^2), right-sided test")

abline(v=63, col="blue", lty=3)
abline(v=63 + 1.96*8, col="red", lty=2)
text(82, 0.003, labels = "------->")

 

 

 

 

(1) 단측 검정 (one-sided test) 

 

 
> ##----------------------------------------------------------
> ## 단일 모집단의 모평균에 대한 신뢰구간 추정과 검정: t.test()
> ##----------------------------------------------------------
> 
> # x : random sample of 15 students's weight in high school
> x <- c(70.2, 54.9, 67.0, 60.5, 63.4, 61.9, 71.8, 66.1, 72.6, 73.0, 68.7, 70.3, 66.2, 55.6, 65.9)
> mean(x)
[1] 65.87333
> var(x); sd(x)
[1] 32.54495
[1] 5.704818
> 

> stem(x) # stem-and-leaf plot The decimal point is 1 digit(s) to the right of the | 5 | 5 | 56 6 | 123 6 | 66679 7 | 00233

> 
> 
> # one-sided test : "greater"
> t.test(x, # weight vector for t-test
+        alternative = c("greater"), #  alternative = c("less", "greater", "two-sided")
+        mu = 63.0, # mu of population
+        conf.level = 0.95) # confidence level or confidence coefficient (1-α)

	One Sample t-test

data:  x
t = 1.9507, df = 14, p-value = 0.0357
alternative hypothesis: true mean is greater than 63
95 percent confidence interval:
 63.27896      Inf
sample estimates:
mean of x 
 65.87333

 

 

(해석) 위 t.test()를 활용한 분석 결과 t 통계량은 1.9507, P-value 는 0.0357로서 유의수준 (significance level) 5% 하에서는 귀무가설이 기각, 대립가설이 채택되어 "5년 전보다 남학생들 몸무게가 증가"하였다고 판단할 수 있습니다.

 

P-value가 0.0357 이므로 15개의 임의 표본을 추출해서 100 번 반복 조사를 해보면 약 3번~4번 밖에 위와 같은 경우가 발생한다는 뜻이므로, 귀무가설 하에서는 일어나기에 쉽지 않은 경우라고 하겠지요?

 

95% 신뢰구간은 아래 값처럼 (63.27896 ~ 무한대)가 되겠네요.  단측검정으로 우측검정을 했기 때문에 이런 신뢰구간 값이 나온겁니다. 

 

 95 percent confidence interval:
63.27896      Inf

 

5년 전의 모집단의 몸무게 평균이 63.0 kg 이라고 했는데요, 5년 후에 조사한 표본집단의 몸무게 평균의 95% 신뢰구간이 (63.27896~무한대) 이므로 서로 겹치지 않습니다.  그만큼 귀무가설에서는 일어나기 힘든 일이 벌어진 것이므로, 대립가설("greater")을 채택하게 됩니다.

 

 

---------------------------------------------------------------------

 

(대립가설 2, 양측 검정 "two.sided))  서울 지역 고등학교 1학년 남학생의 몸무게는 5년 전과 동일하다는 대립가설을 검정하시오.

 

H0 : 서울 지역 고등학교 1학년 남학생의 몸무게는 5년 전과 동일

H1 : 서울 지역 고등학교 1학년 남학생의 몸무게가 5년 전과 다름 (증가 혹은 감소)

 

 

# Normal distribution plot, X~N(63, 8^2), two-sided test
x1 <- c(33:93)
plot(x1, dnorm(x1, mean=63, sd=8), type='l',
     main="Normal distribution, X~N(63,8^2), two-sided test")

abline(v=63, col="blue", lty=3)
abline(v=63 - 1.96*8, col="red", lty=2)
abline(v=63 + 1.96*8, col="red", lty=2)

text(82, 0.003, labels = "------->")
text(44.5, 0.003, labels = "<-------")

 

 

 

 

 

 

 

(2) 양측 검정 (two-sided test) 

 

 
> # two-sided test : "two.sided"
> t.test(x, # weight vector for t-test
+        alternative = c("two.sided"), #  alternative = c("less", "greater", "two-sided")
+        mu = 63.0, # mu of population
+        conf.level = 0.95) # confidence level or confidence coefficient (1-α)

	One Sample t-test

data:  x
t = 1.9507, df = 14, p-value = 0.0714
alternative hypothesis: true mean is not equal to 63
95 percent confidence interval:
 62.71411 69.03256
sample estimates:
mean of x 
 65.87333

 

 

위 양측검정 (two-sided testing) 결과 P-value 가 0.0714 이므로 유의수준 (significance level) 5% 하에서는 귀무가설을 채택(대립가설 기각, 즉 5년 전과 몸무게 평균 같다)하고, 유의수준 10% 하에서는 귀무가설을 기각(대립가설 채택, 즉 5년 전과 몸무게 평균 다르다)하게 됩니다.

 

 

 

---------------------------------------------------------------------

 

(3) 95% 신뢰구간 값 구하기 (indexing of 95% confidence level value)

 

 

> # indexing of 95% confidence level value
> t.test_confi_95 <- t.test(x, alternative = c("two.sided"), mu = 63.0, conf.level = 0.95) 
> 
> 
> names(t.test_confi_95) # statistics
[1] "statistic"   "parameter"   "p.value"     "conf.int"    "estimate"    "null.value"  "alternative"
[8] "method"      "data.name"  
> 
> t.test_confi_95$conf.int # confidence interval at 95% confidence level
[1] 62.71411 69.03256
attr(,"conf.level")
[1] 0.95
> 
> t.test_confi_95$conf.int[1] # lower limit
[1] 62.71411
> t.test_confi_95$conf.int[2] # upper limit
[1] 69.03256

 

 

 

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

 

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

 


Posted by R Friend R_Friend

댓글을 달아 주세요

  1. ㅇㅇㄹ 2017.10.19 23:33  댓글주소  수정/삭제  댓글쓰기

    양측검정이니까 유의수준 10%하에서도 p값이 0.05보다 작아야 하므로 귀무가설 기각되지 않나요?

  2. 감사합니다! 2017.12.12 17:09  댓글주소  수정/삭제  댓글쓰기

    정말로 차근차근 잘 설명해주셔서 덕분에 잘 공부하고 있습니다! 좋은 자료 제공해주셔서 진심으로 감사드려요! ㅎㅎㅎ

  3. yes89929@gmail.com 2018.01.08 21:39  댓글주소  수정/삭제  댓글쓰기

    # Normal distribution plot, X~N(63, 8^2), two-sided test
    위 내용을 보면
    abline(v=63 - 1.96*8, col="red", lty=2)에서
    Z(시그마 / 루트 n)을 안하셔서 제가 알고있는 신뢰구간 식과는 다른데
    그림을 제가 원하는 형태가 나왔어요.

    왜 루트n을 계산하지 않았는지, 그리고 루트n을 계한하지 않아도 되는지 알려주시면 감사하겠습니다.

    추가로 95% t 검정을 했을때는 62~69가 나오는데 위에 값가고 많이 달라서 왜그런지도 알려주시면 감사하겠습니다.

  4. aa 2018.11.05 23:04  댓글주소  수정/삭제  댓글쓰기

    P-value : 귀무가설이 옳다는 가정 하에서 표본으로부터 계산된 검정 통계량의 값을 기준으로 대립가설 방향으로의 확률로서, P-value가 유의 수준보다 작으면 귀무가설을 기각하고 대립가설을 채택함

    라고 되어있는데 '대립 가설 방향으로의 확률' 보다는 '극단값이 나올 확률' 이 아닌가요??

  5. 세진컴퓨터랜드 2018.12.18 18:08  댓글주소  수정/삭제  댓글쓰기

    와 정말 좋은 포스팅 잘 읽고 갑니다 !!
    감사합니다 !!