# chap13_Ttest_Anova
# 추론통계분석
# 1-1. 단일집단 비율차이 검정
# 1-2. 단일집단 평균차이 검정
# 2-1. 두집단 비율차이 검정
# 2-2. 두집단 평균차이 검정
# 2-3. 대응 두 집단 평균차이 검정
# 3-1. 두 집단 이상 비율차이 검정
# 3-2. 두 집단 이상 평균차이 검정
#############################################
# 추론통계분석 - 1-1. 단일집단 비율차이 검정
#############################################
# - 단일 집단의 비율이 어떤 특정한 값과 같은지를 검증
### 사용된 파일은 https://joyfuls.tistory.com/4 에서 다운 받으실 수 있습니다.
# 1. 실습데이터 가져오기
setwd("C:/2_Rwork/Part-III")
data <- read.csv("one_sample.csv", header=TRUE)
head(data)
x <- data$survey
# 2. 빈도수와 비율 계산
summary(x) # 결측치 확인
length(x) # 150개
table(x) # 0:불만족(14), 1: 만족(136)
prop.table(table(x))
# 0.1 # 0.90666667
install.packages("prettyR")
library(prettyR) # freq() 함수 사용
freq(x)
# 3. 가설검정
# 형식) binom.test(성공횟수, 시행횟수, p = 확률)
# - 불만족율 기준 검정
# 양측검정
binom.test(14, 150, p=0.2) # 기존 20% 불만족율 기준 검증 실시
binom.test(14, 150, p=0.2, alternative="two.sided", conf.level=0.95)
# p-value = 0.0006735 < 0.05 : 기각
# 1) 대립가설 : 불만율에 차이가 있음
# 2) 방향성이 있는 대립가설 검정 : 2015 > 2014
binom.test(14, 150, p=0.2, alternative="greater", conf.level=0.95)
# p-value = 0.9999 : 기각
# 3) 방향성이 있는 대립가설 검정 : 2015 < 2014
binom.test(14, 150, p=0.2, alternative="less", conf.level=0.95)
# p-value = 0.0003179 : 채택
#############################################
# 추론통계분석 - 1-2. 단일집단 평균차이 검정
#############################################
# - 단일 집단의 평균이 어떤 특정한 값과 차이가 있는지를 검증
# t분포 용도: 정규분포를 따르는 집단의 평균에 대한 가설검정
# 1. 실습파일 가져오기
data <- read.csv("one_sample.csv", header=TRUE)
str(data) # 150
head(data)
x <- data$time
head(x)
# 2. 기술통계량 평균 계산
summary(x) # NA-41개
mean(x) # NA
mean(x, na.rm=T) # NA 제외 평균(방법1)
x1 <- na.omit(x) # NA 제외 평균(방법2)
mean(x1) # 5.556881
# 3. 정규분포 검정
# 정규분포(바른 분포) : 평균에 대한 검정
# 정규분포 검정 귀무가설 : 정규분포와 차이가 없다.(o)
# shapiro.test() : 정규분포 검정 함수
shapiro.test(x1) # 정규분포 검정 함수(p-value = 0.7242 >= 0.05)
# 4. 가설검정 - 모수/비모수
# 정규분포(모수검정) -> t.test()
# 비정규분포(비모수검정) -> wilcox.test()
# 1) 양측검정 - 정제 데이터와 5.2시간 비교
t.test(x1, mu=5.2)
t.test(x1, mu=5.2, alter="two.side", conf.level=0.95) # p-value = 0.0001417
# t = 3.9461, df = 108, p-value = 0.0001417 < 0.05
# 해설 : 평균 사용시간 5.2시간과 차이가 있다.
# 2) 방향성이 있는 연구가설 검정 : A(5.55) > 국내(5.2)
t.test(x1, mu=5.2, alter="greater", conf.level=0.95)
# t = 3.9461, df = 108, p-value = 7.083e-05 < 0.05 (채택)
# 3) 방향성이 있는 연구가설 검정 : A < 국내
t.test(x1, mu=5.2, alter="less", conf.level=0.95)
# t = 3.9461, df = 108, p-value = 0.9999 > 0.05 (기각)
# 신뢰수준 vs 채택역(t/z/f 통계량)
# 90% -1.65 ~ +1.65
# 95% -1.96 ~ +1.96[o]
# 99% -2.58 ~ +2.58
#############################################
# 추론통계분석 - 2-1. 두집단 비율차이 검정
#############################################
# 1. 실습데이터 가져오기
data <- read.csv("two_sample.csv", header=TRUE)
data
head(data) # 변수명 확인
# 2. 두 집단 subset 작성
data$method # 1, 2 -> 노이즈 없음
data$survey # 1(만족), 0(불만족)
# - 데이터 정체/전처리
x<- data$method # 교육방법(1, 2) -> 노이즈 없음
y<- data$survey # 만족도(1: 만족, 0:불만족)
x;y
# 1) 데이터 확인
# 교육방법 1과 2 모두 150명 참여
table(x) # 1 : 150, 2 : 150
# 교육방법 만족/불만족
table(y) # 0 : 55, 1 : 245
# 2) data 전처리 & 두 변수에 대한 교차분석
table(x, y, useNA="ifany")
# 3. 두집단 비율차이검증 - prop.test()
# 양측가설 검정
prop.test(c(110,135), c(150, 150)) # 14와 20% 불만족율 기준 차이 검정
prop.test(c(110,135), c(150, 150), alternative="two.sided", conf.level=0.95)
# p-value = 0.0003422 < 0.05
# 방향성이 있는 대립가설 검정 : 방법1 > 방법2
prop.test(c(110,135), c(150, 150), alternative="greater", conf.level=0.95)
# 방향성이 있는 대립가설 검정 : 방법1 < 방법2 : p-value = 0.0001711(채택)
prop.test(c(110,135), c(150, 150), alternative="less", conf.level=0.95)
#############################################
# 추론통계분석 - 2-2. 두집단 평균차이 검정
#############################################
# 1. 실습파일 가져오기
data <- read.csv("two_sample.csv")
data
head(data) #4개 변수 확인
summary(data) # score - NA's : 73개
# 2. 두 집단 subset 작성(데이터 정제,전처리)
#result <- subset(data, !is.na(score), c(method, score))
dataset <- data[c('method', 'score')]
table(dataset$method)
head(dataset)
# 3. 데이터 분리
# 1) 교육방법 별로 분리
method1 <- subset(dataset, method==1)
method2 <- subset(dataset, method==2)
# 2) 교육방법에서 점수 추출
method1_score <- method1$score
method2_score <- method2$score
# 3) 기술통계량
length(method1_score); # 150
length(method2_score); # 150
# 4. 분포모양 검정 : 두 집단의 분포모양 일치 여부 검정
var.test(method1_score, method2_score) # p-value = 0.3002
# 동질성 분포 : t.test()
# 비동질성 분포 : wilcox.test()
# 5. 가설검정 - 두집단 평균 차이검정
t.test(method1_score, method2_score)
t.test(method1_score, method2_score, alter="two.sided", conf.int=TRUE, conf.level=0.95)
# p-value = 0.0411 - 두 집단간 평균에 차이가 있다.
# 방향성이 있는 연구가설 검정 : 방법1 > 방법2
t.test(method1_score, method2_score, alter="greater", conf.int=TRUE, conf.level=0.95)
# 방향성이 있는 연구가설 검정 : 방법1 < 방법2 : p-value = 0.02055(채택)
t.test(method1_score, method2_score, alter="less", conf.int=TRUE, conf.level=0.95)
################################################
# 추론통계분석 - 2-3. 대응 두 집단 평균차이 검정
################################################
# 조건 : A집단 독립적 B집단 -> 비교대상 독립성 유지
# 대응 : 표본이 짝을 이룬다. -> 한 사람에게 2가지 질문
# 사례) 다이어트식품 효능 테스트 : 복용전 몸무게 -> 복용후 몸무게
# 1. 실습파일 가져오기
getwd()
setwd("c:/2_Rwork/Part-III")
data <- read.csv("paired_sample.csv", header=TRUE)
# 2. 두 집단 subset 작성
# 1) 데이터 정제
#result <- subset(data, !is.na(after), c(before,after))
dataset <- data[ c('before', 'after')]
dataset
# 2) 적용전과 적용후 분리
before <- dataset$before# 교수법 적용전 점수
after <- dataset$after # 교수법 적용후 점수
before; after
# 3) 기술통계량
length(before) # 100
length(after) # 100
mean(before) # 5.145
mean(after, na.rm = T) # 6.220833 -> 1.052 정도 증가
# 3. 분포모양 검정
var.test(before, after, paired=TRUE)
# 동질성 분포 : t.test()
# 비동질성 분포 : wilcox.test()
# p-value = 0.4738 >= 0.05 : 가설 채택
# 4. 가설검정
t.test(before, after, paired=TRUE) # p-value < 2.2e-16
# p-value < 2.2e-16 < 0.05 : 양측검정 가설 기각
# 방향성이 있는 연구가설 검정 : before > after
t.test(before, after, paired=TRUE,alter="greater",conf.int=TRUE, conf.level=0.95)
#p-value = 1 -> x을 기준으로 비교 : x가 y보다 크지 않다.
# 방향성이 있는 연구가설 검정 : before < after
t.test(before, after, paired=TRUE,alter="less",conf.int=TRUE, conf.level=0.95)
# p-value < 2.2e-16 -> x을 기준으로 비교 : x가 y보다 적다.
############################################
# 추론통계분석 - 3-1. 두 집단 이상 비율차이 검정
############################################
# - 두 집단 이상 비율차이 검정
# 1. 파일가져오기
data <- read.csv("three_sample.csv", header=TRUE)
data
head(data)
# 2. 두 집단 이상 subset 작성(데이터 정제,전처리)
method <- data$method
survey<- data$survey
method # 집단
unique(method)
survey
# 3.기술통계량(빈도분석)
table(method, useNA="ifany") # 50 50 50 -> 3그룹 모두 관찰치 50개
table(method, survey, useNA="ifany") # 그룹별 클릭수 : 1-43, 2-34, 3-37
# 4. 두 집단 이상 비율차이 검정
# prop.test(그룹별 빈도, 그룹수) -> 집단이 늘어나도 동일한 함수 사용-땡큐
prop.test(c(34,37,39), c(50,50,50)) # p-value = 0.1165 -> 귀무가설 채택
# p-value = 0.5232 > 0.05
############################################
# 추론통계분석 - 3-2. 두 집단 이상 평균차이 검정
############################################
# 두 집단 이상 평균차이 검정 = 분산분석
# 분산분석 예
# 쇼핑몰 고객의 연령대(10, 20, 30, 40, 50)별 또는 시간대(오전/오후)별
# 구매현황 분석
# 범주형변수(x) : 연령대, 시간대
# 연속형변수(y) : 구매현황
# aov(y ~ x, data = dataset)
# 1. 파일 가져오기
data <- read.csv("three_sample.csv")
head(data)
# 2. 데이터 정제/전처리 - NA, outline 제거
data <- subset(data, !is.na(score), c(method, score))
data # method, score
# (1) 차트이용 - ontlier 보기(데이터 분포 현황 분석)
plot(data$score) # 차트로 outlier 확인 : 50이상과 음수값
barplot(data$score) # 바 차트
mean(data$score) # 14.45
# (2) outlier 제거 - 평균(14) 이상 제거
length(data$score)#91
data2 <- subset(data, score <= 14) # 14이상 제거
length(data2$score) #88(3개 제거)
# (3) 정제된 데이터 보기
x <- data2$score
boxplot(x)
plot(x)
# 3. 집단별 subset 작성
# method: 1:방법1, 2:방법2, 3:방법3
data2$method2[data2$method==1] <- "방법1"
data2$method2[data2$method==2] <- "방법2"
data2$method2[data2$method==3] <- "방법3"
table(data2$method2) # 교육방법 별 빈도수
# 4. 동질성 검정 - 정규성 검정
# bartlett.test(연속형변수 ~ 범주형변수) # 독립변수(세 집단)
bartlett.test(score ~ method2, data=data2)
# p-value = 0.1905 >= 0.05
# 귀무가설 : 집단 간 분포의 모양이 동질적이다.(채택)
# 해설 : 유의수준 0.05보다 크기 때문에 귀무가설을 기각할 수 없다.
# 동질한 경우 : aov() - Analysis of Variance(분산분석)
# 동질하지 않은 경우 - kruskal.test()
# 5. 분산검정(집단이 2개 이상인 경우 분산분석이라고 함)
# aov(종속변수 ~ 독립변수, data=data set)
# 귀무가설 : 집단 간 평균에 차이가 없다.
result <- aov(score ~ method2, data=data2)
result
# aov()의 결과값은 summary()함수를 사용해야 p-value 확인
summary(result)
# 9.39e-14 ***
# 6. 사후검정 : 세부 차이 검정
TukeyHSD(result)
# 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
plot(TukeyHSD(result))
# example
dim(iris) # 150 5
str(iris)
table(iris$Species)
#setosa versicolor virginica
# 50 50 50
# 범주형(집단)변수 : Species
# 연속형변수 : Sepal.Width
# 4. 동질성 검정 - 정규성 검정
bartlett.test(Sepal.Width ~ Species, data=iris)
# p-value = 0.3515 >= 0.05 : 귀무가설 채택
# 5. 분산검정
result <- aov(Sepal.Width ~ Species, data=iris)
summary(result)
# <2e-16 *** : 각 집단별 평균에 차이를 보인다.
# 6. 사후검정 : 세부 차이 검정
TukeyHSD(result)
# diff lwr upr
#versicolor-setosa -0.658 -0.81885528 -0.4971447
#virginica-setosa -0.454 -0.61485528 -0.2931447
#virginica-versicolor 0.204 0.04314472 0.3648553
plot(TukeyHSD(result))
install.packages("dplyr")
library(dplyr)
iris %>% group_by(Species) %>% summarise(avg = mean(Sepal.Width))
#1 setosa 3.43
#2 versicolor 2.77
#3 virginica 2.97
2.77-3.43 # -0.66
2.97-3.43 # -0.46
'R 과 데이터분석 > 기초 문법 ~ 머신러닝' 카테고리의 다른 글
[R 데이터분석] 15장. 회귀분석 (0) | 2019.09.13 |
---|---|
[R 데이터분석] 14장. 상관분석 (0) | 2019.09.13 |
[R 데이터분석] 12장. 교차분석과 카이제곱검정 (0) | 2019.09.13 |
[R 데이터분석] 11장. 기술통계분석 (0) | 2019.09.13 |
[R 데이터분석] 10장. 통계분석절차와 통계지식 (0) | 2019.09.13 |
댓글