728x90

R

가설검정 이론 바탕으로한 실습을 진행했습니다. 이번 강의를 통해 다소 헷갈렸던 가설검정을 정리 할수 있었던 좋은 시간이였습니다. 강의 들으면서 필기 했던 부분을 짧게나마 정리하여 간단하게 적어 보겠습니다.

 

* 대립가설은 보통 양측검정 보다는 단측검정을 사용한다(가설 설정하기 전에 데이터를 대략 파악하여 관계를 설정한다)

* 분할표는 주로 연관성을 볼때 사용한다(예를들어 흡연과 폐암의 연관성) -> 카이제곱 검정

* 대응표본 t검정은 A,B 집단에 속한 대상자가 같다 (예를들어 성형하기 전/후 처럼 대상자는 같고 전/후로 나뉜 경우를 말한다)

* 모집단에 대해서 주의할점: 모집단은 관심이 있는 전체 집단이다. 경기도 20대 남성 평균키일 경우, 모집단은 경기도에 살고 있는 모든 20대 남성들의 키 모음이다.

* t검정은 30개 미만일때 사용하는 것이므로 t검정하기전에 정규성 검정을 하고 등분산 검정을 거친 후 t검정을 적용한다

이때, 정규성 데이터가 아니라면 t검정 대신 비모수 검정을 실시 할수 있다.

* t분포는 정규분포보다 꼬리가 더 두껍다. 그리고 t분포의 n이 커질수록 정규분포에 수렴한다.

*p-value란 귀무가설이 참이라고 했을때, 표본데이터가 수집될 확률을 말한다. 즉, p-value가 낮으면 표본 데이터가 수집될 확률도 낮다. 낮을수록 극단치로 향해 간다. 

*anova는 세 집단 이상일때 사용한다. 아노바의 오차는 집단 간 오차 +집단 내 오차 로 구성된다. 

 

집단 내 오차는 왜 구하는걸까?

만일 집단 간 오차 > 집단 내 오차 일 경우에는 집단간의 차이가 크다는 얘기이므로 집단 간 평균 차이가 있다는 걸 알수가 있다. 

 

아래는 가설검정 실습 내용입니다.

rawN3 <- read.csv(file = 'htest01.csv', header = TRUE)
library(dplyr)

groupA <- rawN3[rawN3$group=='A',1:2] 
groupB <- rawN3[rawN3$group=='B',1:2]
mean(groupA[,2])
mean(groupB$height)
#step1: 가설검정 설정
#귀무: 두 집단간의 차이가 없다
#대립: B그룹이 A그룹보다 크다

#step2: 데이터 정규성 검정
#첫번째 방법: 샤피로 검정
shapiro.test(groupA[,2]) #0.05보다 크므로 귀무가설
shapiro.test(groupB[,2])
#qq plot
qqnorm(groupA[,2])
qqline(groupA[,2])

qqnorm(groupB[,2])
qqline(groupB[,2])
#정규성의 직선에 점이 가까울수록 정규성을 따른다

#step3: 분산동질성 검정
#귀무: 두 집단 간 분산은 동일하다
#대립: 분산이 서로 다르다
var.test(groupA[,2],groupB[,2]) #0.05보다 크므로 귀무

#step4: T-test(합동분산 사용)
#alternative: 대립가설 뜻함
#less: A<B(왼쪽집단<오른쪽집단)
t.test(groupA[,2],groupB[,2], alternative = 'less', var.equal = TRUE)

#step5: 0.05보다 크므로 그룹 간 평균키 차이가 없다

#==============================================
#각 집단 샘플 사이즈 = 10(소표본)
rawN10 <-  read.csv(file = 'htest02.csv',header = TRUE)
groupA <- rawN10[rawN10$group=='A',1:2]
groupB <- rawN10[rawN10$group=='B',1:2]
mean(groupA[,2]) #170
mean(groupB[,2]) #181

#step1: 가설설정
#귀무: 평균 키 차이가 없다
#대립: B가 A보다 크다

#step2: 정규성 검정
shapiro.test(groupA[,2]) #정규성따름
shapiro.test(groupB[,2]) #정규성따름

qqnorm(groupA[,2])
qqline(groupA[,2])
qqnorm(groupB[,2])
qqline(groupB[,2])

#step3: 분산 동질성 검정
var.test(groupA[,2],groupB[,2])
#0.02 이므로 대립가설 채택(분산이 다르다)

#step4: T-test 검정
t.test(groupA[,2],groupB[,2], alternative = 'less', var.equal = FALSE)

#step5: 0.019이므로 대립가설 채택(B가A보다 평균키 크다)

#==============================================
#대응표본 t검정(마케팅에 따른 판매액 차이)
raw_d <-  read.csv(file = 'htest02d.csv',header = TRUE)
raw_d
groupAd <- raw_d[,1]
groupBd <- raw_d[,2]
mean(groupAd)
mean(groupBd)

#step1: 가설검정
#귀무: 마케팅을 통한 판매액 변화 없음
#대립: 마케팅을 통한 팬매액이 증가함  전<후

#step2: 데이터 정규성 검정
d= groupAd-groupBd #차이를 가지고 연산
shapiro.test(d) #귀무가설
qqnorm(d)
qqline(d)

#분산동질성 검정이 없는이유
#-> d라는 집단 하나만 있기 때문에

#step3: T-test
t.test(groupAd,groupBd,alternative = 'less',paired=TRUE)

#step4: 0.05보다 작으므로 마케팅을 통해 판매액 증가했다 

#===========================================
#Z검정(데이터 갯수가 30개 이상): 대표본
rawN30 <-  read.csv(file = 'htest03.csv',header = TRUE)
groupA <- rawN30[rawN30$group=='A',1:2]
groupB <- rawN30[rawN30$group=='B',1:2]
mean(groupA[,2])
mean(groupB[,2])

#step1:가설검정
#귀무: 그룹간의 평균 키 차이가 없다
#대립: 그룹B의 평균키가 A 그룹보다 크다

#step2~3: Z-test, 결론
z.test(groupA[,2],groupB[,2]) #대립가설 채택

#=============================================
#여러지단 비교 검정(집단내오차, 집단간오차 필요)
rawN30 <-  read.csv(file = 'htest04.csv',header = TRUE)
groupA <- rawN30[rawN30$group=='A',1:2]
groupB <- rawN30[rawN30$group=='B',1:2]
groupC <- rawN30[rawN30$group=='C',1:2]

#step1: 가설검정
#귀무:세 집단간 평균 차이가 없다
#대립: 세 집단간 평균 차이가 있다(집단이 세개 이상이므로 단측검정할 사용한 방향 설정이 어렵다 따라서 양측검정을 사용)

#step2: 정규성 검정
shapiro.test(groupA[,2]) #귀무
shapiro.test(groupB[,2]) #귀무
shapiro.test(groupC[,2]) #귀무

#step3:분산 동질성 검정
#아노바의 분산 검정은 levene, bartlett test 사용
install.packages('lawstat')
library(lawstat)

levene.test(rawN30$height, rawN30$group)
#세 집단간 분산이 동일하다

bartlett.test(height~group, data=rawN30)

#step3: anova test
rawAnova <- aov(height~group, data=rawN30)
summary(rawAnova)
#p_value가 0.05보다 작으므로 대립가설 채택
#즉, 세 집단간 평균이 다르다
#658.4:그룹 간 오차
#36.2: 그룹 내 오차

#=============================================
#분할표를 이용한 연관성 분석(카이제곱검정)
raw_chisq<-  read.csv(file = 'htest05.csv',header = TRUE)
rawTable <- table(raw_chisq)
rawTable

#step1:가설 설정
#귀무: 흡연여부와 폐암은 관계가 없다
#대립: 관계가 있다

#step2: 카이제곱 검정
#기대도수 >5 인 경우: correct=FALSE
#기대도수<5 인 경우: correct=TRUE
chisq.test(rawTable, correct = FALSE)
#0.05보다 작으므로 대립채택

 

 

 

 

 

 

 

 

728x90

+ Recent posts