R-Studio 카이제곱(chisq) 검정 Part.2

R-Studio의 카이제곱 검정을 통한 데이터 간 관련성 여부 분석하기.

Featured image

파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
S20191030.zip

사용 예시 소스코드 1

# 교육 수준(education)과 흡연율(smoking) 간의 관련성을 분석하기 위한 연구 가설을 수립하고, 각 단계별로 가설을 검정하시오. [독립성 검정]
# 귀무 가설(H0) : 교육 수준과 흡연율 간의 관련성은 없다.
# 연구 가설(H1) : 교육 수준과 흡연율 간의 관련성은 있다.
# 
# 단계1: 파일 가져오기
df <- read.csv('smoke.csv')
str(df)
unique(df)

# 단계2: 코딩 변경(변수 리코딩)
df$education2[df$education == 1] <- "대졸"
df$education2[df$education == 2] <- "고졸"
df$education2[df$education == 3] <- "중졸"

# 1(과대 흡연) 2(보통 흡연) 3(비흡연)
df$smoke2[df$smoke == 1] <- "과대흡연"
df$smoke2[df$smoke == 2] <- "보통흡연"
df$smoke2[df$smoke == 3] <- "비흡연"

unique(df)

# 단계3: 교차 분할표 작성
ta <- table(df$education2, df$smoke2)
ta

myFrame <- data.frame(ta)
colnames(myFrame) <- c("학력", "흡연여부", "빈도수")
myFrame

ggplot(myFrame, aes(x = 학력, y = 빈도수, fill = 흡연여부, color = 흡연여부)) + geom_col(position = "dodge")

# 귀무 가설(H0) : 교육 수준과 흡연율 간의 관련성은 없다.
# 연구 가설(H1) : 교육 수준과 흡연율 간의 관련성은 있다.
# 단계4: 독립성 검정
# # CrossTable() 함수 사용
library(gmodels)
cro <- CrossTable(df$education2, df$smoke2, chisq = T)
cro
# d.f. : 자유도
# p : 유의 확률
# Chi^2 =  18.91092     d.f. =  4     p =  0.0008182573 

# 단계5: 검정 결과 해석
# 검정 결과 유의 확률이 p=0.0008182573이므로 유의 수준 0.05보다 작다
# 그러므로 귀무 가설을 기각한다.
# 교육 수준과 흡연율 간의 관련성은 있다.

사용 예시 소스코드 2

# 귀무 가설 : 성별에 따라서 선호하는 커피에는 차이가 없다
myChisq <- read.csv("카이제곱검정02.csv")
str(myChisq)
unique(myChisq)

# 테이블 만들기
table(myChisq$gender)
table(myChisq$brand)

myTable <- table(gender = myChisq$gender, brand=myChisq$brand)
myTable

ch <- chisq.test(myTable)
ch
if(ch$p.value > 0.05) {
  cat("채택")
} else {
  cat("기각")
}

# 검정표를 가지고 비교 해보기(자유도 이용)
x_Squared <- ch$statistic
chi_Table <- 5.991 # (자유도 카이제곱 표 참조)
if(chi_Table > x_Squared) {
  cat("채택")
} else {
  cat("기각")
}

# CrossTable() 함수 이용
# dnn : 행, 컬럼 이름
# chisq : 카이제곱 검정 자동검정 기능
CrossTable(x=myChisq$gender, y=myChisq$brand, chisq = T, dnn=c("성별", "브랜드"))

사용 예시 소스코드 3

# 나이(age3)와 직위(position) 간의 관련성을 단계별로 분석하시오. [독립성 검정]
# 
# 파일 이름 : cleanData.csv
# 
# 단계1: 파일 가져오기
df <- read.csv('cleanData.csv')
str(df)
# 단계2: 코딩 변경(변수 리코딩)
unique(df$age2)
unique(df$position)

df$position <- factor(x=df$position, levels = c(1, 2, 3, 4, 5), labels = c("부장", "차장", "과장", "대리", "사원"))
unique(df$position)
# 단계3: plot(x,y) 함수를 이용한 산점도를 이용한 변수간의 관련성 보기
x <- table(df$age2, df$position)
plot(df$age2, df$position)

# 단계4: 독립성 검정 : CrossTable(x,y, chisq = TRUE)
CrossTable(df$age2, df$position, chisq = T)

a <- data.frame(x)

# install.packages("ggsci")
library(RColorBrewer)
library(ggsci)
display.brewer.all(colorblindFriendly = TRUE)

# c <- c("#F0E442", "#0072B2", "#D55E00", "#CC79A7")
# ggplot(data = a, aes(x = Var1, y = Var2)) + geom_point(aes(color = Freq)) + scale_color_gradientn(colours = "red")

ggplot(data = a, aes(x = Var1, y = Var2)) + geom_point(aes(color = Freq)) + scale_color_gradient(low = "transparent", high = "red")
# 단계5: 검정 결과 해석