[R] 가설 검정
programming/r

[R] 가설 검정

7. 가설 검정

 

7.1 통계 분석

7.1.1 모집단과 표본

7.1.1.1 모집단: 우리가 알고자 하는 대상 전체, 조사 대상의 범위

7.1.1.2 표본: 모집단으로부터 조사하기 위해 선택된 조사대상

 

7.1.2 전수조사와 표본조사

7.1.2.1 전수조사: 모집단을 구성하는 대상 전부를 조사하는 것

가장 정확하지만, 비용과 시간이 많이 들게 됨

전수조사가 불가능한 경우도 있음(예를 들어 감기약의 경우 모두 복용을 해야만 효과를 알 수 있음)

 

7.1.2.2 표본조사: 표본을 대상으로 조사

 

7.1.3 통계 분석 기법

7.1.3.1 어떤 그룹, 집단, 형태 등의 차이를 검정

1개, 2개 또는 그 이상의 데이터 차이가 있다고 볼 수 있는지를 검정하는 것

독립표본 t 검정, 대응표본 t 검정, ANOVA 등

 

7.1.3.2 요소와 요소 간의 인과관계(상관관계)를 파악

상관분석 - 변수와 변수 사이의 직선 관계를 상관계수를 이용해서 분석

회귀분석 - 종속변수와 독립변수 간의 관계를 모형화하여 분석

 

 

7.2 가설 검정

7.2.1 가설 검정의 기초

7.2.1.1 과학 분야에서의 증명 : 반증법에 의거해 증명

"모든 사람은 정직하다"라는 명제가 있을 때 이 명제가 참인지 거짓인지를 확인하는 접근법에는 2가지가 존재

  1. 모든 사람을 일일이 조사해서 정직한지 확인하는 방법
  2. 정직하지 못한 사람(사례)을 하나 찾아내 명제가 거짓임을 입증하는 방법

위 2가지 방법 중 어느 것이 효율적일까? (현실적으로 가능한 방법일까?)

1000명이 정직함을 확인했을 때, 1001명째 사람이 정직하다고 확언할 수 있을까?

 

7.2.1.2 귀무가설(H0)과 대립가설(Ha)

우리가 알고 싶은 명제(주로 A와 B는 다르다, A와 B는 차이가 있다 등)는 대립가설로 두고, 그 반대인 귀무가설(주로 A와 B는 같다, A와 B는 차이가 없다 등)이 기각됨을 보임으로서 내가 입증해 보이고 싶은 명제를 증명

 

7.2.2 독립표본 t-검정

서로 독립된 두 집단간의 평균의 차이가 통계적으로 유의미한지 비교하고자 할 때 사용

즉, 서로 독립된 두 집단에 대해 각 집단별 특정 연속형 변수 평균값이 서로 차이가 있는지 없는지를 통계적으로 검정할 때 사용되는 기법

예) 전체 응답자 중 남자와 여자 사이의 연령은 차이가 있는가?

 

7.2.3 대응표본 t-검정(Paired-samples t-test)

서로 동일한 모집단에서 추출된 두 표본에 대해 특정 연속형 변수 평균값이 서로 차이가 있는지, 없는지를 통계적으로 검정할 때 사용되는 기법

예) 한 회사에서 자사가 개발한 한 달간의 식이요법 프로그램이 효과가 있는지 여부를 분석하고자 함

 

7.2.4 일원배치 분산분석(One-way ANOVA)

세 개 이상의 집단간의 평균의 차이가 통계적으로 유의미한지 비교하고자 할 때 사용

예) 학력수준에 따라 직무만족도의 수준은 차이가 있는가?

 

7.2.5 가설검정의 정리

분석의 대상이 되는 두 변수의 특징에 따라, 다음과 같이 다른 검정기법을 적용해야 함

 

 

 

7.3 실습예제

7.3.1 카이제곱 검정(Chi-Square Test)

두 범주형 변수(범주로만 분류되고 수치적으로 측정되지 않는 자료)가 서로 상관이 있는지 판단하는 통계적 검정 방법

ex) 학력, 성별, 직업의 만족도 등

child1 <- c(5, 11, 1)
child2 <- c(4, 7, 3)

Toy <- cbind(child1, child2)

rownames(Toy) <- c("car", "truck", "doll")
Toy

 

카이제곱 검정

# p-value가 0.05보다 작으면 대립가설 채택, 귀무가설 기각

# p-value가 0.05보다 크면 대립가설 기각, 귀무가설 채택

chisq.test(Toy)     # 카이제곱 검정

 

피셔 검정

표본수가 적거나 데이터의 분포가 치우친 경우에 적용됨

fisher.test(Toy)
  • 귀무가설: child1과 child2 두 데이터는 차이가 없다.
  • 대립가설: child1과 child2 두 데이터는 차이가 있다.
  • 결론: p-value가 0.05보다 크기 때문에 child1과 child2 두 데이터는 차이가 없다(대립가설을 기각한다).

 

7.3.2 t 검정

표본으로부터 추정된 분산이나 표준편차를 가지고 가설을 검정하는 방법

  • 귀무가설: 두 모집단은 평균간의 차이가 없다.
  • 대립가설: 두 모집단은 평균간의 차이가 있다.

 

7.3.2.1 표본이 1개인 경우

전체 모집단에 대한 정보가 없을 때 표본이 과연 모집단으로부터 나온 것인지를 판단할 때 사용

 

A 회사의 건전지 수명시간이 1000시간일 때 무작위로 뽑은 10개의 건전지에 대해 수명은 다음과 같다.

980, 1008, 968, 1032, 1012, 1002, 996, 1017 샘플이 모집단과 다르다고 할 수 있는가?

 

귀무가설: 건전지의 수명은 1000시간이다.

대립가설: 건전지의 수명은 1000시간이 아니다.

 

먼저 데이터분포가 정규분포인지 아닌지를 확인하기 위해 Shapiro-Wilk 검정을 실시한다.

 

Shapiro-Wilk 검정의 가설

  • 귀무가설: 자료가 정규분포를 따른다.
  • 대립가설: 자료가 정규분포를 따르지 않는다.
a <- c(980, 1008, 968, 1032, 1012, 1002, 996, 1017)

shaprio.test(a)

p-value가 0.05보다 크므로 귀무가설을 기각할 수 없다. 따라서 이 자료는 정규분포를 따른다. 이 데이터에 대해 T-Test를 할 수 있다.

 

# sample_vector: 샘플 데이터 벡터
# mu: 비교하는 대상의 평균
# alternative: two.sided 샘플이 주어진 평균과 다르다
# greater: 샘플이 주어진 평균보다 크다
# less: 샘플이 주어진 평균보다 작다
t.test(sample_vector, mu = 1000, alternative = "two.sided")

 

* 어떤 학급의 수학 평균성적은 55점이었다. 0교시 수업을 시행하고나서 학생들의 시험 성적은 다음과 같았다.

 

58, 49, 39, 99, 32, 88, 62, 30, 55, 65, 44, 55, 57, 53, 88, 42, 39

 

0교시 수업을 시행한 후, 학생들의 성적은 올랐다고 할 수 있는가?

 

H0(귀무가설): 0교시 수업 시행 후 학생들의 성적은 오르지 않았다.

H1(대립가설): 0교시 수업 시행 후 학생들의 성적은 올랐다.

 

먼저 데이터분포가 정규분포인지 아닌지를 확인하기 위해 Shapiro-Wilk 검정을 실시한다.

 

Shapiro-Wilk 검정의 가설

  • 귀무가설: 자료가 정규분포를 따른다.
  • 대립가설: 자료가 정규분포를 따르지 않는다.
# 0교시 수업 시행 후의 점수
a <- c(58, 49, 39, 99, 32, 88, 62, 30, 55, 65, 44, 55, 57, 53, 88, 42, 39)

# 기초 통계량 요약
summart(a)

# 정규분포인지 검사
shaprio.test(a)

p-value가 0.05보다 크므로 귀무가설을 기각할 수 없다. 따라서 이 자료는 정규분포를 따른다. 이 데이터에 대해 T-Test를 할 수 있다.

 

# t 검정, mu: 평균값, greater: 평균이 올랐는지
t.test(a, mu = 55, alternative = "greater")

p-value가 0.05보다 크기 때문에 0.4046이기 때문에 귀무가설을 기각할 수 없다. 0교시를 시행해도 성적은 오르지 않았다.

 

7.3.2.2 표본이 2개인 경우의 t 검정

환자 10명을 상대로 혈압약을 먹었을 때와 먹지 않았을 때의 혈압을 측정하고 이 두 자료의 평균이 같다고 할 수 있는지를 검정

 

귀무가설: 혈압약을 먹었을 때와 먹지 않았을 때의 혈압 차이가 없다.

대립가설: 혈압약을 먹었을 때와 먹지 않았을 때의 혈압 차이가 있다.

pre <- c(13.2, 8.2, 10.9, 14.3, 10.7, 6.6, 9.5, 10.8, 8.8, 13.3)
summary(pre)

post <- c(14, 8.8, 11.2, 14.2, 11.8, 6.4, 9.8, 11.3, 9.3, 13.6)
summary(post)

t.test(pre, post)

p-value가 0.05보다 크므로 귀무가설 채택, 대립가설 기각

결론: 혈압약 복용 전후의 혈압이 차이가 없다.

 

7.3.2.3 ANOVA (ANalysis Of VAriance, 분산분석)

비교하고자 하는 집단이 3개 이상인 경우

k개의 모집단의 평균을 이용하여 상관관계의 유무를 판단하는 기법

 

귀무가설: 평균이 같다.

대립가설: 평균이 같지 않다.

# 샘플데이터 생성
xx <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
yy <- c(1.09, 2.12, 2.92, 4.06, 4.9, 6.08, 7.01, 7.92, 8.94)
zz <- c(1.1, 1.96, 2.98, 4.09, 4.92, 6.1, 6.88, 7.97, 9.01)

# 벡터형으로 자료를 생성함
mydata <- c(xx, yy, zz)
mydata

group <- c(rep(1, 9), rep(2, 9), rep(3, 9))
group

 

분산(variance): 자료가 흩어져 있는 정도

 

관찰값들이 평균값으로부터 얼마나 많이 퍼져 있는지를 파악하기 위한 것이 분산

분산을 알기 위해서는 먼저 평균을 알아야 하고, 각각의 관찰값들과 평균 사이의 거리(distance)를 재기 위해 관찰값에서 평균을 빼게 된다. 그런데 어떤 관찰값들은 반드시 평균 이하에 존재하고 있고, 이들의 존재로 인해 양수 값들과 음수 값들이 혼재하게 된다. 그리고 이들을 모두 합칠 경우 결과는 0이 나온다.

 

ex) 1 2 3 4 5 6 7 평균 4

= (-3) + (-2) + (-1) + 0 + 1 + 2 + 3

= 0

 

이 문제를 해결하기 위해 각각의 편차를 제곱한 값((편차제곱, squares of deviation))을 모두 더하고 합친 후 전체 관찰값의 개수만큼 나눈다. 즉 편차제곱을 가지고 평균을 구하는 것이다. 이것이 분산이다.

 

통계처리를 할 때 모집단 전체에 대한 전수조사보다는 표본을 이용하는 경우가 대부분임.

모집단의 분산을 구할 때는 n으로 나누고 표본집단의 분산을 구할 때는 n으로 나누지 않고 n - 1로 나눈다(표본분산).

ex) 1 2 3 4 5 6 7 평균 4

= (9+4+1+0+1+4+9) / 6

= 28 / 6

= 4.666667

 

R에서 분산을 구하는 방법

val <- c(1, 2, 3, 4, 5, 6, 7)
mean(val)
var(val)

 

# var=T: 등분산(분산이 같다는 가정)을 가정함
oneway.test(mydata ~ group, var = T)

p-value가 0.05보다 크기 때문에 귀무가설을 기각할 수 없다. 즉, 평균이 같다.