[ R ] 집단간 차이분석 - 세 집단 검정 #3
세 집단 검정
(1) 세 집단 비율 검정
세 집단을 대상으로 비율 차이 검정을 통해서 세 집단 간의 비율이 같은지 또는 다른지를 검정
데이터 대상 전처리 과정(결측치와 이상치 제거) 후 비교대상의 세 집단 분류 후 prop.test()함수로 비율 차이 검정
두 집단 및 세 집단 이상의 비율 검정은 prop.test()함수 이용
ex)----------------------------------------------------------------------------------------------------------------------------------------------------------
연구가설
H0: 세 가지 교육 방법에 따른 집단 간 만족율에 차이가 없다.
H1: 세 가지 교육 방법에 따른 집단 간 만족율에 차이가 있다.
연구환경: IT 교육센터에서 세 가지 교육 방법을 적용하여 교육을 시행하였다. 세 가지 교육 방법 중 더 효과적인 교육 방법을 조사하기 위해서 교육생 150명을 대상으로 설문 조사를 시행하였다
--------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 세 집단 subset 작성과 기술통계량 계산
비율 검정을 위한 데이터 셋을 대상으로 전처리 과정을 통해 데이터를 정제한 후 비율 검정에 필요한 기술통계량을 계산
ex) 세 집단 subset 작성과 기술통계량 계산
#1 파일 가져오기
data <- read.csv("C:/three_sample.csv", header = TRUE) head(data) no method survey score 1 1 1 1 3.2 2 2 2 0 NA 3 3 3 1 4.7 4 4 1 0 NA 5 5 2 1 7.8 6 6 3 1 5.4 |
#2 세 집단 subset 작성(데이터 전처리)
method <- data$method survey <- data$survey method;survey # [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 # [30] 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 # [59] 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 # [88] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 # [117] 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 # [146] 2 3 1 2 3 # [1] 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 1 1 1 0 0 # [30] 1 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 0 1 1 # [59] 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 # [88] 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 # [117] 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 # [146] 1 1 1 1 1 |
#3 기술통계량(빈도수)
table(method,useNA = "ifany") # method # 1 2 3 # 50 50 50 table(method,survey,useNA = "ifany") # survey # method 0 1 # 1 16 34 # 2 13 37 # 3 11 39 |
2. 세 집단 비율 차이 검정
명목척도의 비율을 바탕으로 pro.test()함수를 이용하여 세 집단 간 이항분포의 양측 검정을 통해서 검정 통계량을 구한 후 이를 이용하여 가설을 검정한다.
세 집단 비율 차이 검정을 위한 prop.test()함수의 형식을 적용한 예는 다음과 같다.
첫 번째 벡터는 방법1, 방법2, 방법3에 대한 만족 수(성공 횟수), 두번째 벡터는 세 교육 방법에 대한 변량의 길이(시행 횟수)이다.
ex)세 집단 비율 차이 검정
세 가지 교육 방법의 만족도에 차이가 있는지를 검정한다.
#1
prop.test(c(34,37,39),c(50,50,50)) # 3-sample test for equality of proportions without # continuity correction # # data: c(34, 37, 39) out of c(50, 50, 50) # X-squared = 1.2955, df = 2, p-value = 0.5232 # alternative hypothesis: two.sided # sample estimates: # prop 1 prop 2 prop 3 # 0.68 0.74 0.78 |
#2 결과: p-value > α 때문에 세 가지 교육 방법 간의 만족도에 차이가 있다고 볼 수 없다. 즉 “세 가지 교육 방법에 따른 집단 간 만족율에 차이가 없다.”는 귀무가설을 기각할 수 없다
(2) 분산분석(F-검정)
분산분석(ANOVA Analysis):
T-검정과 동일하게 평균에 의한 차이 검정 방법
두 집단 이상의 평균 차이를 검정
분석분석을 시행할 때 주의점
- 1개의 범주형 독립변수와 종속변수 간의 관계를 분석하는 일원 분산분석과 두 개 이상의 독립변수가 종속변수에 미치는 효과를 분석하는 이원 분산분석으로 분류.
- 독립변수는 명목척도(성별), 종속변수는 등간척도나 비율척도로 구성되어야 한다.
- 마케팅전략의 효과, 소비자 집단의 반응 차이 등과 같이 기업의 의사결정에 도움을 주는 비계량적인 독립변수와 계량적인 종속변수 간의 관계를 파악할 때 이용한다.
cf) ANOVA 가 아닌 여러 번 t 검정을 하면 1종 오류가능성이 증대됨
ex)----------------------------------------------------------------------------------------------------------------------------------------------------------
예) 세 집단을 비교하기 위해서는 세 번의 독립표본 t 검정을 수행하여야 함. 각 t 검정에서 유의수준을 0.05로 설정하였다면, 세 번 모두 귀무가설이 맞는데 귀무가설을 기각하지 않은 옳은 결정을 할 확률은 0.95 ✕ 0.95 ✕ 0.95 = 0.86, 1종 오류는 0.14 m개의 집단을 두 개씩 t 검정을 수행한다면 1종오류는? 1-(1-α) m(m-1)/2 분산분석에서 집단 간의 동질성 여부를 검정하기 위해서 barlett.test()함수 사용 cf) 두 집단 간 동질성 검정 시 var.test()함수 사용, 분석분석은 barlett.test()함수 사용 집단 간의 분포가 동질한 경우 분산분석을 위해 aov()함수 사용 집단 간의 분포가 동질하지 않는 경우 kruskal.test()함수 사용 27 사후비교(post hoc comparisons) • 귀무가설이 기각된 경우 어떤 집단간 차이가 있는지 2개씩 짝지어 차이를 분석함 • m개의 집단이면 mC2 번 비교 • 집단 i와 집단 j를 비교하는 경우 H0 : μi = μj H1 : μi ≠ μj 사후비교 방법 • Least Squate Difference method: 최소유의차, 검정력이 낮음 • Bonferroni’s method LSD: 방법을 보완 • Scheffe’s method: 사회과학에서 많이 사용 • Tukey’s method : 검정력이 높음 TukeyHSD()함수를 이용하여 사후검정 수행 연구가설 H0: 교육 방법에 따른 세 집단 간 실기시험의 평균에 차이가 없다. H1: 교육 방법에 따른 세 집단 간 실기시험의 평균에 차이가 있다. 연구환경: 세 가지 교육 방법을 적용하여 1개월 동안 교육받은 교육생 각 50명씩을 대상으로 실기시험을 시행하였다. 세 집단 간 실기시험의 평균에 차이가 있는지를 검정한다.
-------------------------------------------------------------------------------------------------------------------------------------------------------
1. 데이터 전처리
데이터 정제 (NA, 이상치 제거)
ex) 데이터 전처리 수행
#1 파일 가져오기
data <- read.csv("C:/three_sample.csv", header = TRUE) head(data) no method survey score 1 1 1 1 3.2 2 2 2 0 NA 3 3 3 1 4.7 4 4 1 0 NA 5 5 2 1 7.8 6 6 3 1 5.4 |
#2 데이터 전처리 (NA, 이상치 제거)
data <- subset(data,!is.na(score),c(method,score)) head(data) # method score # 1 1 3.2 # 3 3 4.7 # 5 2 7.8 # 6 3 5.4 # 8 2 8.4 # 9 3 4.4 |
#3 차트이용 outlier보기(데이터 분포 현황 분석)
par(mfrow =c(1,2)) plot(data$score) ![]() barplot(data$score) ![]() mean(data$score) # 14.4472514.44725 |
#4 데이터 정제(이상치 제거, 평균(14)이상 제거
length(data$score) # 91 data2 <- subset(data,score < 14) length(data2$score) # 88 head(data2) # method score # 1 1 3.2 # 3 3 4.7 # 5 2 7.8 # 6 3 5.4 # 8 2 8.4 # 9 3 4.4 |
#5 정제된 데이터 확인
x <- data2$score x # [1] 3.2 4.7 7.8 5.4 8.4 4.4 2.8 7.7 5.8 4.3 5.1 2.4 4.1 3.3 # [15] 5.0 5.9 4.7 6.7 5.2 4.0 4.1 7.4 8.5 5.1 3.8 3.3 7.0 5.4 # [29] 5.5 7.3 3.9 4.1 4.5 6.0 3.3 7.7 5.6 6.2 7.8 3.4 5.1 6.4 # [43] 3.0 6.8 6.3 5.5 5.8 5.4 6.0 6.7 5.2 5.6 3.0 6.1 2.7 5.7 # [57] 3.7 5.1 2.0 6.3 6.5 6.5 6.0 6.2 7.2 6.5 6.8 5.8 4.8 7.7 # [71] 3.7 7.7 6.7 3.4 6.4 5.1 7.9 6.3 6.1 6.3 6.0 6.9 4.3 3.7 # [85] 5.4 6.5 6.2 5.9 par(mfrow=c(1,1)) boxplot(x) ![]() |
2. 세 집단 subset작성과 기술 통계량
ex) 세 집단 subset작성과 기술통계량 구하기
#1 세집단 subset 작성
data2$method2[data2$method == 1] <- "방법1" data2$method2[data2$method == 2] <- "방법2" data2$method2[data2$method == 3] <- "방법3" head(data2) # method score method2 # 1 1 3.2 방법1 # 3 3 4.7 방법3 # 5 2 7.8 방법2 # 6 3 5.4 방법3 # 8 2 8.4 방법2 # 9 3 4.4 방법3 |
#2 교육 방법별 빈도수
table(data2$method2) # 방법1 방법2 방법3 # 31 27 30 |
#3 교육 방법을 x변수에 저장
x <- table(data2$method2) x # 방법1 방법2 방법3 # 31 27 30 |
#4 교육 방법에 따른 시험성적 평균 구하기
y <- tapply(data2$score,data2$method2,mean) y # 방법1 방법2 방법3 # 4.187097 6.800000 5.610000 |
tapply()함수
#5 교육방법과 시험성적으로 데이터프레임 생성
df <- data.frame(교육방법=x,시험성적=y) df # 교육방법.Var1 교육방법.Freq 시험성적 # 방법1 방법1 31 4.187097 # 방법2 방법2 27 6.800000 # 방법3 방법3 30 5.610000 |
3. 세 집단 간 동질성 검정
barlett.test()함수 사용 검정 결과가 유의수준 0.05보다 큰 경우 세 집단 간 분포의 모양이 동질하다고 할 수 있다.
barlett.test(종속변수 ~ 독립변수, data=dataset)
ex) 세 집단간 동질성 검정 수행
bartlett.test(score~method, data=data2) # Bartlett test of homogeneity of variances # # data: score by method # Bartlett's K-squared = 3.3157, df = 2, p-value = 0.1905 |
* 틸드(~)를 이용하여 분석 식을 작성하면 집단별로 subset을 만들지 않고 사용할 수 있다.
4. 분산분석 (세 집단 간 평균 차이 검정)
세 집단 간의 동질성 검정에서 분포 형태가 동질하다고 분석되었기 때문에 aov()함수를 이용하여 세 집단 간 평균 차이 검정 동질하지 않다면 kruskal.test()함수 이용하여 비모수 검정을 수행
ex) 분산분석 수행
help(aov) result <- aov(score~method2, data=data2) names(result) # [1] "coefficients" "residuals" "effects" "rank" # [5] "fitted.values" "assign" "qr" "df.residual" # [9] "contrasts" "xlevels" "call" "terms" # [13] "model" summary(result) # Df Sum Sq Mean Sq F value Pr(>F) # method2 2 99.37 49.68 43.58 9.39e-14 *** # Residuals 85 96.90 1.14 # --- # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 |
p-value 이용 검정
5. 사후검정
집단별로 평균의 차에 대한 비교를 통해 사후검정을 수행
ex) 사후검정 수행
#1 분산분석 결과에 대한 사후검정
TukeyHSD(result) # Tukey multiple comparisons of means # 95% family-wise confidence level # # Fit: aov(formula = score ~ method2, data = data2) # # $method2 # diff lwr upr p adj # 방법2-방법1 2.612903 1.9424342 3.2833723 0.0000000 # 방법3-방법1 1.422903 0.7705979 2.0752085 0.0000040 # 방법3-방법2 -1.190000 -1.8656509 -0.5143491 0.0001911 |
#2 사후검정 시각화
plot(TukeyHSD(result))![]() |
#3 결론: lwr과 upr은 신뢰구간의 하한값과 상한값이다. 95% 신뢰수준에서 신뢰구간의 범위가 0을 포함하지 않으면 차이가 통계적으로 유의하다. ‘통계적으로 유의하다’는 의미는 t값이 채택역을 벗어나거나, p adj값이 0.05미만인 경우를 말한다. 만약 신뢰구간에 0이 포함되면 차이가 통계적으로 유의하지 ㅇ낳다. .즉 집단 간의 평균 차이가 없다고 볼 수 있다. 따라서 유의미한 수준에서 세 집단 간 분산의 차이가 있다고 볼 수 있다 (세 집단 모두 p adj < 0.05)