[R] 추정 및 검정

반응형

 

  • 이번 포스팅에서는 평균, 분산, 비율에 대한 추정(inference) 및 검정(test)하는 방법에 대해서 말씀드리겠습니다. 주로 설명할 추정은 구간 추정에 대한 부분입니다. 예를 들면, 평균의 구간 추정은 데이터로부터 표본을 추출하여 표본평균을 구한 뒤 전체 데이터의 평균이 어떤 구간 \([a, b]\)안에 있다고 말하는 것 입니다.

1. 하나의 모평균(일표본 평균)

  • 하나의 모집단으로부터 표본을 추출하고 표본으로부터 모집단 평균의 신뢰구간을 구하는 방법에 대해서 살펴보겠습니다.

이론적 배경

  • 확률변수 \(X_{1}, X_{2}, ..., X_{n}\)이 서로 독립이고 정규분포 \(N(\mu, \sigma^2)\)을 따른다고 합시다. 즉, \(X_{i}\)\(N(\mu, \sigma^2)\)으로부터 구한 표본이며, 표본의 크기는 \(n\)이다. 표본평균을 \(\bar{X}\)라 할 때 다음과 같이 평균이 0, 분산이 1인 정규분포를 따르는 식을 구할 수 있습니다.
  • \[\frac{\bar{X} - \mu}{ \sigma / \sqrt{n}} \sim N(0, 1)\]
  • 모집단의 분산 \(\sigma^2\)은 보통 알려진 값이 아니므로 다음에 정의된 표본 분산을 사용합니다.
  • \[S^2 = \frac{1}{n-1} \sum_{i=1}^{n} (X_{i} - E(X))^{2}\]
  • 즉 첫번째 위 식에 \(\sigma^2\) 대신 \(S^2\)을 사용하면 자유도가 \(n-1\)\(t\) 분포를 따르게 됩니다.
  • \[\frac{\bar{X} - \mu}{ S^2 / \sqrt{n}} \sim N(0, 1)\]
  • 따라서 유의수준 \(\alpha\)가 0.05일 때 모평균에 대한 95% 신뢰수준의 신뢰구간은 다음과 같습니다.
  • \[\bigg(\bar{x} - t_{n-1, \alpha/2} \frac{S}{\sqrt{n}} , \bar{x} + t_{n-1, \alpha/2} \frac{S}{\sqrt{n}}\bigg)\]

적용

  • 일표본 평균의 구간 추정 및 가설 검정에는 t.test() 함수를 사용합니다.
    • x, y : 일표본 t검정의 경우 x에만 input하고 이표본의 경우 x, y 모두에 숫자 벡터를 지정합니다.
    • alternative : 대립가설의 방향을 지정
    • mu : 모집단의 평균 설정, 기본값은 \(\mu = 0\)
    • paired : 짝지은 이표본 평균의 경우 TRUE, 그렇지 않으면 FALSE
    • val.equal : 이표본 검정에서 두 집단의 분산이 같은지 여부
    • conf.level : 신뢰수준
    x <- rnorm(30)
    
    t.test(x)
    ## 
    ##  One Sample t-test
    ## 
    ## data:  x
    ## t = 0.7311, df = 29, p-value = 0.4706
    ## alternative hypothesis: true mean is not equal to 0
    ## 95 percent confidence interval:
    ##  -0.2569133  0.5427772
    ## sample estimates:
    ## mean of x 
    ##  0.142932
    • 평균이 0, 분산이 1인 정규분포로부터 30개의 랜덤샘플을 추출하여 모평균의 구간추정한 예시 입니다.
    x <- rnorm(30, mean = 10, sd = 1)
    
    t.test(x, mu = 10)
    ## 
    ##  One Sample t-test
    ## 
    ## data:  x
    ## t = -0.84508, df = 29, p-value = 0.405
    ## alternative hypothesis: true mean is not equal to 10
    ## 95 percent confidence interval:
    ##   9.429156 10.237034
    ## sample estimates:
    ## mean of x 
    ##  9.833095
    • 평균이 10, 분산이 1인 정규분포로부터 30개의 랜덤샘플을 추출하여 모평균이 10인지에 대한 가설검정을 한 예시 입니다.
  • t.test(x, y = NULL, alternative = c("two.sided", "less", "greater"), mu = 0, paired = FALSE, var.eqaul = FALSE, conf.level = 0.95, ...)

2. 두 개의 모평균(독립 이표본 평균)

  • 두 모집단에서 각각 표본을 추출한 뒤 표본으로부터 두 모집단의 평균이 같은지를 알아보는 내용을 다룹니다.

이론적 배경

  • 독립 이표본은 서로 독립인 두 개의 표본집단이 있는 경우를 말합니다. 먼저 두 표본은 서로 독립이라고 가정합니다.
    • \(X_1, X_2, ..., X_m\) : \(N(\mu_1, \sigma^2_1)\)으로부터의 표본
    • \(Y_1, Y_2, ..., Y_n\) : \(N(\mu_2, \sigma^2_2)\)으로부터의 표본
  • 그러면 표본평균 \(\bar{X}\), \(\bar{Y}\)는 다음의 정규분포를 따릅니다.
  • \[\bar{X} \sim N\big(\mu_1, \frac{\sigma^2_1}{m}\big), \bar{Y} \sim N\big(\mu_2, \frac{\sigma^2_2}{n}\big)\]
  • 그리고 \(X\), \(Y\)가 서로 독립이라고 가정했기에 다음이 성립합니다.
  • \[\bar{X} - \bar{Y} \sim N\bigg( \mu_1 - \mu_2 , \frac{\sigma_1^2}{m} + \frac{\sigma^2_2}{n}\bigg)\] \[\frac{\bar{X} - \bar{Y} - (\mu_1 - \mu_2)}{\sqrt{\sigma^2_1 / m} + \sqrt{\sigma^2_2 / n}} \sim N(0, 1)\]
  • 일표본 평균의 경우와 마찬가지로 \(\sigma_1^2\), \(\sigma_2^2\)는 모두 모집단의 분산이고 이 값은 보통 사전에 잘 알려지지 않은 값이라 표본분산을 대신 사용하게 됩니다.
    • 여기서 표본분산을 구할 때에는 두 모분산이 같은 경우(\(\sigma_1^2 = \sigma_2^2\))와 같지 않은 경우(\(\sigma_1^2 \ne \sigma_2^2\))로 나누어 풀이합니다. 여기서는 모분산이 같은 경우(등분산)만 포스팅하도록 하겠습니다.
  • 두 모분산이 같은 경우(\(\sigma_1^2 = \sigma_2^2\))는 합동 표본분산(Pooled sample variance) \(S^2_p\)를 구하여 모분산 대신 사용합니다.
  • \[S^2_p = \frac{(m-1)S_1^2 + (n-1)S^2_2}{m+n-2}\]
  • 따라서 \(S_p\)를 식에 그대로 대입하면 다음과 같이 자유도가 \(m+n-2\)\(t\)분포를 따르게 됩니다.
  • \[\frac{\bar{X} - \bar{Y} - (\mu_1 - \mu_2)}{S_p \sqrt{1/m + 1/n}} \sim t_{m+n-2}\]
  • 두 표본으로부터 구한 모평균 차이의 95$ 신뢰 구간은 다음과 같습니다.
  • \[\bigg( \bar{X} - \bar{Y} - t_{m+n-2, \alpha/2} S_p \sqrt{1/m + 1/n}, \bar{X} - \bar{Y} + t_{m+n-2, \alpha/2} S_p \sqrt{1/m + 1/n}\bigg)\]

적용

  • 이 또한 t.test() 함수를 이용하여 구간추정 및 가설검정을 할 수 있습니다.
  • 이번에는 sleep 이라는 예제 데이터를 가지고 진행하겠습니다. 이 데이터는 최면성 약물을 환자(ID 변수)에게 투여했을 때 수면시간의 증가(extra 변수)를 기록한 데이터로 수면제의 종류는 2가지이며(group 변수) 각 10명씩 투여한 기록입니다.
    ##    extra group ID
    ## 1    0.7     1  1
    ## 2   -1.6     1  2
    ## 3   -0.2     1  3
    ## 4   -1.2     1  4
    ## 5   -0.1     1  5
    ## 6    3.4     1  6
    ## 7    3.7     1  7
    ## 8    0.8     1  8
    ## 9    0.0     1  9
    ## 10   2.0     1 10
    ## 11   1.9     2  1
    ## 12   0.8     2  2
    ## 13   1.1     2  3
    ## 14   0.1     2  4
    ## 15  -0.1     2  5
    ## 16   4.4     2  6
    ## 17   5.5     2  7
    ## 18   1.6     2  8
    ## 19   4.6     2  9
    ## 20   3.4     2 10
    • 예를 들어 환자1은 1번 수면제를 사용했을 때 수면 시간 증가량은 0.7이며 2번 수면제를 사용했을 경우 수면 시간 증가량은 1.9임을 나타냅니다.
  • sleep
  • 즉, 1번 수면제와 2번 수면제 효과의 평균 차이 검정을 시행할 수 있습니다. 먼저 어떤 환자인지에 대한 정보를 제거합니다.
    ##    extra group
    ## 1    0.7     1
    ## 2   -1.6     1
    ## 3   -0.2     1
    ## 4   -1.2     1
    ## 5   -0.1     1
    ## 6    3.4     1
    ## 7    3.7     1
    ## 8    0.8     1
    ## 9    0.0     1
    ## 10   2.0     1
    ## 11   1.9     2
    ## 12   0.8     2
    ## 13   1.1     2
    ## 14   0.1     2
    ## 15  -0.1     2
    ## 16   4.4     2
    ## 17   5.5     2
    ## 18   1.6     2
    ## 19   4.6     2
    ## 20   3.4     2
  • sleep2 <- sleep[, -3]
    sleep2
  • 다음 수면제별 수면 시간 증가량의 평균을 계산해보면 다음과 같습니다.
    ##    1    2 
    ## 0.75 2.33
    • 1번 수면제를 복용했을 때 수면 시간 증가량의 평균은 0.75, 2번 수면제의 경우는 2.33 입니다.
  • tapply(X = sleep2$extra, 
           INDEX = sleep2$group,
           FUN = mean)
  • 두 평균 차이를 검정하기 앞서 두 수면제의 분산이 같을 것(분산비가 1이다)이라고 가정하고 t.test()를 적용하면 다음과 같습니다.
    ## 
    ##  Welch Two Sample t-test
    ## 
    ## data:  extra by group
    ## t = -1.8608, df = 17.776, p-value = 0.07939
    ## alternative hypothesis: true difference in means is not equal to 0
    ## 95 percent confidence interval:
    ##  -3.3654832  0.2054832
    ## sample estimates:
    ## mean in group 1 mean in group 2 
    ##            0.75            2.33
    • 그 결과 p-value는 0.05보다 크므로 \(H_0\) : 모평균에 차이가 없다 라는 귀무가설을 기각할 수 없습니다. 즉 유의수준 0.05 하에 두 모평균은 차이가 있다고 말할 수 있습니다.
    • 또는 신뢰구간이 0을 포함하므로 평균 차이가 없다고 봐도 무방합니다.
  • t.test(extra ~ group,
           data = sleep2, 
           paired = FALSE,
           val.equal = TRUE)

3. 짝지은 이표본 평균

  • 짝지은 이표본 평균은 표본추출 시 연관된 것 끼리 짝을 지어 데이터를 추출하는 경우를 말합니다. 쉽게 예를 들자면, 전에 했던 sleep 데이터에서 우리는 독립 이표본 평균 검정을 위해 환자(ID 변수)를 제거한 sleep2 데이터를 가지고 검정을 시행했지만, 짝지은 이표본 평균의 경우 환자를 제거하지 않고 그대로 이용하게 됩니다.
  • 이 말은 즉, 각 환자마다 1번 수면제와 2번 수면제로 인한 수면 증가 시간을 알아볼 수 있고 이 2개의 수면제로 인한 수면 시간 증가폭의 차이를 개인별로 알 수가 있습니다.
  • 그리고 이 개인별로 측정한 차이 값의 평균을 구하면 두 수면제 중 어느 것이 더 많은 수면시간을 가져오는 지 확인할 수 있습니다.

이론적 배경

  • 짝 지은 이표본 \((X_1, Y_1), ..., (X_n, Y_n)\)이 있을 때 차이 값 \(D_i = X_i - Y_i\)가 정규분포를 따른다고 가정하면 \(D_i\)의 평균 \(\bar{D}\)는 다음의 정규분포를 따르게 됩니다.
  • \[\bar{D} \sim N(\mu_{D}, \sigma^2_{D}/n)\]
  • 이 역시 마찬가지로 \(\sigma_{D}\)는 모분산으로 알려지지 않은 값이므로 이를 표본분산으로 치환하면 \(t\)-분포를 따르게 되고 다음과 같습니다.
  • \[/frac{\bar{D}-\mu_{D}}{S_{D}/sqrt{n}} \sim t_{n-1}\]
  • 따라서 \(\bar{D}\)의 95% 신뢰구간은 \(\alpha = 0.05\)일 때 다음과 같습니다.
  • \[\bigg( \bar{D} - t_{n-1, \alpha/2} \frac{S_D}{\sqrt{n}}, \bar{D} + t_{n-1, \alpha/2} \frac{S_D}{\sqrt{n}}\bigg)\]

적용

  • t.test 함수를 써서 전에 썼던 sleep 예제 적용시키겠습니다.
    ## 
    ##  Paired t-test
    ## 
    ## data:  sleep$extra[sleep$group == 1] and sleep$extra[sleep$group == 2]
    ## t = -4.0621, df = 9, p-value = 0.002833
    ## alternative hypothesis: true difference in means is not equal to 0
    ## 95 percent confidence interval:
    ##  -2.4598858 -0.7001142
    ## sample estimates:
    ## mean of the differences 
    ##                   -1.58
    • p-value가 0.05 보다 작으므로 \(H_0\) : 모평균의 차이가 0이다 라는 귀무가설을 기각합니다. 따라서 두 수면제의 수면 시간 증가 정도가 다르다고 결론 지을 수 있습니다.
  • t.test(x = sleep$extra[sleep$group == 1], 
           y = sleep$extra[sleep$group == 2], 
           paired = TRUE)

4. 이표본 분산

  • 이 절에서는 두 모집단으로부터의 표본을 추출하여 표본분산을 구해 두 모집단의 분산이 서로 동일한지를 알아보는 방법에 대해 설명하겠습니다.
  • 보통 이표본 분산을 그 자체로 사용하기보다는 다른 통계추정이나 검정에서 이표본 분산의 결과를 사용하게 됩니다.
    • 독립 이표본 검정에서 두 모집단의 분산이 같으면 t.test() 함수의 argument를 var.equal = TRUE로 해야 하며, 다르면 val.equal = FALSE 입니다.

이론적 배경

  • 확률변수 \(X\), \(Y\)가 서로 독립이며 \(X \sim N(\mu_1, sigma^2_1)\), \(Y \sim N(\mu_2, sigma^2_2)\)로 각각 정규분포를 따른다고 가정하고, \(X\)\(Y\)에서의 표본의 수는 각각 \(m\)\(n\)이라고 가정합니다.
  • 이 때 표본분산과 모분산의 비가 다음과 같은 \(F\)-분포를 따르게 됩니다.
  • \[\frac{S^2_1 / \sigma^2_1}{S^2_2 / \sigma^2_2} \sim F_{m-1, n-1)\]
  • 여기서 확률변수의 위치가 서로 바뀌게 되면 자유도 또한 서로 바뀌게 됩니다.
  • 따라서 모분산 비에 대한 95% 신뢰구간은 유의수준 \(alpha = 0.05\)라 할 때 다음과 같습니다.
  • \[\bigg( \frac{S_1^2 / S_2^2}{F_{n-1, m-1, \alpha/2}}, frac{S^2_1 / S^2_2}{F_{n-1, m-1, 1-\alpha/2}} \bigg)\]

적용

  • 분산의 비교에는 var.test() 함수를 사용합니다.
    • x, y : 숫자 벡터
    • ratio : 분산비에 대한 가설, 기본값은 1
    • alternative : 대립가설의 방향을 지정
  • var.test(x, y, ratio = 1, alternative = c("two.sided", "less", "greater"), ...)
  • 기본 내장데이터인 iris 데이터의 Sepal.Width 변수와 Sepal.Length 변수의 분산이 서로 같은지 var.test() 함수를 적용한 결과입니다.
    ## 
    ##  F test to compare two variances
    ## 
    ## data:  iris$Sepal.Width and iris$Sepal.Length
    ## F = 0.27706, num df = 149, denom df = 149, p-value = 3.595e-14
    ## alternative hypothesis: true ratio of variances is not equal to 1
    ## 95 percent confidence interval:
    ##  0.2007129 0.3824528
    ## sample estimates:
    ## ratio of variances 
    ##          0.2770617
    • 그 결과 p-value가 0.05 이하로, 유의수준 0.05 하에 두 모분산비가 1이다(모분산에 차이가 없다) 라는 귀무가설을 기각하게 됩니다.
  • var.test(x = iris$Sepal.Width, y = iris$Sepal.Length)

반응형

'Basic' 카테고리의 다른 글

[R] ggplot2 활용 데이터 시각화 예시  (0) 2017.08.17
[R] 문자열 처리  (0) 2017.07.12
[R] 상관 분석  (0) 2017.07.07
[R] 적합도 검정  (0) 2017.07.04
[R] 범주형 자료에서 독립성 검정  (0) 2017.07.04
TAGS.

Comments