Summary

galton 데이터셋을 이용해서, 아버지의 평균키와 자식의 평균키에 대한 차이값이 의미 있는지를 t-test 로 확인해 본다.

먼저, 통계에 대한 기본 내용을 되새겨본다.

2개의 표본 확률변수 Xbar, Ybar가 있다고 하자.

각각의 기대치(평균)과 분산은 다음과 같다.

2개 표본확률변수를 뺀 기대치와 분산은 다음과 같게 된다.

표준점수 Z = (x1 - mean(x)) / sd(x) 로 계산한다. 즉, 표준편차의 몇 배인지 아는 것이 확률을 계산하는데 중요한 정보가 된다.

예를 들어, 표준정규 분포에서 표준점수 1.96 은 상위 97.5% 지점을 나타내고, -1.96은 하위 2.5% 지점을 나타낸다.

이 값은 5% 유의수준으로 95% 신뢰구간을 계산할 때, 평균을 중심으로 표준편차 sd(x)의 (+-) 1.96 배의 위치로 계산이 가능하다.

x가 정규화 되어 있다면, 평균 mean(x) = 0, 표준편차 sd(x) = 1이 된다. 즉, 표준점수 자체가 확률값을 나타내기도 하고 신뢰구간을 나타내기도 한다.

x가 정규화 되어 있지 않다면, 평균을 중심으로 표준편차의 몇 배가 (+-)로 되어 있느냐가 확률값을 의미하게 된다.

따라서 샘플에 대한 평균과 분산을 구하면, 신뢰구간을 구할 수도 있고, 서로 다른 2개 샘플에 대한 평균차이가 의미 있는지도 검증할 수 있게된다.

library(UsingR)

CASE 1: Paired t-test

case 수가 동일하면서, 측정 전후의 차이가 의미가 있는지 테스트한다.

# 수작업으로 신뢰구간 계산
child <- galton$child
parent <- galton$parent

diff <- child - parent

mn <- mean(diff)
s <- sd(diff)
n <- length(galton$parent)

# 평균 +- 95%일때의 통계량 * 표준오차(s / sqrt(n))
mn + c(-1, 1) * qt(.975, df = (n-1)) * s / sqrt(n)
## [1] -0.36949983 -0.06993982
# t.test() 함수 사용, 신뢰구간 계산
t.test(diff)
## 
##  One Sample t-test
## 
## data:  diff
## t = -2.8789, df = 927, p-value = 0.004082
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.36949983 -0.06993982
## sample estimates:
##  mean of x 
## -0.2197198
모집단에 대한 통계량이 다음과 같다고 하자.
X ~ N(mu, sigma^2)

여기서 표본을 n개 샘플링했을 경우,
평균 mu = sum(Xi) / n
분산 var(x) = sum((xi -mu)^2) / n
표준편차 = sqrt(var(x)) = s

standard error (표준오차)는 표본평균에 대한 표준편차를 의미한다.

Xbar ~ N(mu, s^2/n) 가 된다.
Xbar: 표본 평균에 대한 확률변수
mu: 표본 평균의 점추정
s: 표본에 대한 표준편차 점추정

t값과 자유도, 그리고 p-value 확률값의 관계

위에서 아래와 같은 결과가 나왔다.

t = -2.8789, df = 927, p-value = 0.004082

pt(), qt() 함수로 t값과 p-value(확률값)을 구하면, 위와 동일한 값을 얻게 된다.

pt(q = -2.8789, df = 927) * 2       # 양측 검정이라서 2배 해준다.
## [1] 0.004082418
qt(p = (0.004082 / 2), df = 927)    # 확률값 p-vale의 반을 한 t 값 조회
## [1] -2.878933
# t 값 구하기
(mean(child) - mean(parent)) / (s / sqrt(n)) 
## [1] -2.878929
  • pt(): t 값을 이용해서 확률을 구한다.
  • qt(): 확률을 이용해서 t 값을 구한다.

신뢰구간에 대한 관계

  1. 95% 의 신뢰구간이 -0.36949983 -0.06993982 라는 이야기는…
  2. 2개 sample의 평균 차이가 0이라는 귀무가설(주장)에 대해서 (즉, 전후 차이가 없다)
  3. 0이 신뢰구간내에 포함되지 않으므로
  4. 2개의 차이는 0일 가능성이 거의 없다고 생각해도 된다.

bonus: 표본의 분산을 직접 구해보자.

# var()를 이용하나, 편차제곱합의 평균(불편분산)을 이용하나 값은 동일하다.
var(diff)                     
## [1] 5.40536
v <- sum((diff - mn)^2) / (n-1)
v
## [1] 5.40536
# sd()를 이용하나, 분산에 제곱근을 하나 값은 동일하다.
sd(diff)
## [1] 2.324943
sqrt(v)
## [1] 2.324943

CASE 2: Independent sample t-test

기본 t-test 를 하면

t.test(galton$child, galton$parent)
## 
##  Welch Two Sample t-test
## 
## data:  galton$child and galton$parent
## t = -2.1677, df = 1672.026, p-value = 0.03032
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.4185305 -0.0209092
## sample estimates:
## mean of x mean of y 
##  68.08847  68.30819

아래 값을 주목하자.

t = -2.1677, df = 1672.026, p-value = 0.03032 

이때 확률 p-value를 t값과 df 값을 이용해서 계산해 보자.

pt(-2.1677, df = 1672.026) * 2
## [1] 0.03032223

역시 동일한 p-value 가 나옴을 알 수 있다.

pt(): t 값과 df 값을 이용해서 확률을 계산함.

95% 신뢰 구간은 다음과 같다.

95 percent confidence interval:
 -0.4185305 -0.0209092

t 값을 구해보자

(mean(child) - mean(parent)) / sqrt(sd(child)^2/n + sd(parent)^2/n)
## [1] -2.167665
# 또는
ps <- sqrt((sd(child)^2*(n-1) + sd(parent)^2*(n-1))/(n+n-2))
(mean(child) - mean(parent))/ps * sqrt(n*n / (n+n))
## [1] -2.167665

child_bar ~ N(mu1, sd/n) parent_bar ~ N(mu2, sd/n)

(child_bar - parent_bar) ~ N(mu1 - mu2, sd/n + sd/n)

평균 차이를 각 표본에 대한 분산(sd^2/n) 에 대한 합의 제곱근으로 나누면 된다.