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

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

Featured image

파일 소스

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

사용 예시 소스코드 1

# 카이 제곱 검정
# 교차 분석은 두 개 이상의 범주형 변수를 대상으로 교차 분할표를 작성하고, 변수 상호 간의 관련성 여부를 분석하는 방법이다.

# 교차 분석은 특히 빈도 분석결과에 대한 보충 자료를 제시하는데 효과적으로 이용할 수 있다.
df <- read.csv("mycf.csv", header = T)
str(df)
unique(df$group) # 광고 유형
unique(df$interest) # 광고 관심도

# 팩터 변환
df$group2 <- factor(df$group, levels=c(1, 2), labels = c("연예인CF", "일반인CF"))
str(df)

# 팩터 변환2
df$interest2 <- factor(df$interest, levels=c(0, 1), labels = c("관심없음", "관심있음"))
str(df)

# 교차 분할표
# 엑셀의 부분합 기능.
crossTable <- table(df$group2, df$interest2)
crossTable

addmargins(crossTable)

# 테이블화 시키기(교차 분할표 만들기)
prop.table(crossTable, 1) # 행 방향 비율 교차 분할표
prop.table(crossTable, 2) # 열 방향 비율 교차 분할표

# 데이터 프레임 만들기 가져오기(From crossTable)
myFrame <- data.frame(crossTable)
myFrame

# 위 데이터 프레임으로 plot 만들기
library(ggplot2)
# dodge옵션은 2중 세로막대 그래프를 따로따로 분리시켜 준다.
ggplot(data=myFrame, aes(x = Var2, y = Freq, fill = Var1, col = Var1)) + geom_col(position = "dodge")

# 2번 문항
myCoupon <- read.csv("mycoupon.csv", header = T)
str(myCoupon)

# 코딩변경
unique(myCoupon$category)
myCoupon$category2 <- factor(myCoupon$category, levels = c(1, 2, 3, 4), labels = c("food", "beauty", "travel", "park")) 

# barplot 그리기
# x값 을 넣기위해 테이블 화
myCateTable <- table(myCoupon$category2)
myCateTable
# color 표 뽑기
myLimit <- c(0, 25)
myColor <- rainbow(length(myCateTable))

barplot(myCateTable, main="쿠폰 사용 분야별 인원수", xlab="쿠폰 사용 분야", ylab="인원수", beside=T, col=myColor, ylim=myLimit)

# 쿠폰 종류에 따른 사용 분야 : 교차 분할표
unique(myCoupon$coupon)
myCoupon$coupon2 <- factor(myCoupon$coupon, levels = c(1, 2), labels = c("할인쿠폰", "적립쿠폰"))
unique(myCoupon$coupon2)

# 교차 분할표 만듦.
twoGroupTable <- table(myCoupon$coupon2, myCoupon$category2)
twoGroupTable

# 퍼센트 분할표 만들기
pctGroup <- prop.table(twoGroupTable, 1)
pctGroup
# 소수점 2자리에서 반올림 함.
round_PctGroup <- round(pctGroup, 2)
round_PctGroup

df <- data.frame(round_PctGroup)
df
# 두가지 방법 의 ggplot
# ggplot(df, aes(x = Var2, y = Freq, fill = Var1, col = Var1)) + geom_col(position = "dodge")
ggplot(df, aes(x = Var1, y = Freq, fill = Var2, col = Var2)) + geom_bar(stat = "identity", position = position_dodge2())

# 부모의 학력 수준과 자녀으 시험 합격 여부
# 코딩변경 하기.
df02 <- read.csv("cross_table.csv")
df02

unique(df02$level)
df02$level2[df02$level == 1] <- "고졸"
df02$level2[df02$level == 2] <- "대졸"
df02$level2[df02$level == 3] <- "대학원졸"

# 자녀 시험 : 
unique(df02$pass)
df02$pass2[df02$pass == 1] <- "pass"
df02$pass2[df02$pass == 2] <- "fail"
head(df02)

# 
level2 <- df02$level2
pass2 <- df02$pass2
table(level2, pass2)

install.packages("gmodels")
library(gmodels)

CrossTable(x = level2, y = pass2, dnn=c("부모 학력", "자녀의 대학 진학 여부"))

# ggplot 그리기
library(ggplot2)
myFrame02 <- data.frame(학력=c("고졸", "대졸", "대학원졸"), 합격율=c(0.551, 0.671, 0.574))
myFrame02
ggplot(myFrame02, aes(x = 학력, y = 합격율, fill=학력, color=학력)) + geom_col()

# 현재 데이터의 귀무 가설 : 눈금이 나올 확률은 차이가 없다.
# 카이제곱 검정을 해보자.
data <- c(4, 6, 17, 16, 8, 9)
chisqResult <- chisq.test(data)
# p-value : 유의 확률
# 카이 제곱 검정은 교차 분석으로 얻어진 교차 분할표를 대상으로 유의 확률(p-value)을 적용하여 변수들 간의 독립성 및 관련성 여부 등을 검정하는 분석 방법이다. 
names(chisqResult)
chisqResult

# 두 집단간 분포의 모양이 동질적이다. 
# p-value 을 유의 확률이라고 하고, alpha 를 유의 수준이라고 한다. 
# p-value > alpha 이면 귀무 가설을 채택한다
# P(유의 확률이) 유의 수준보다 작으므로 이 가설은 맞지 않다.
# 즉, 눈금이 나올 확률은 차이가 없지 않다.
0.01439 > 0.05

if(chisqResult$p.value > 0.05) {
  cat("귀무 가설 채택")
} else {
  cat("귀무 가설 기각") 
}
# 다라서, 귀무 가설을 기각한다.
# 이 주사위는 게임에 부적합 합니다.(운의 작용이 크다.)

# 따라서, 귀무 가설을 기각한다.
x_Squared <- chisqResult$statistic
x_Squared

chi_Table <- 11.071
if(x_Squared < chi_Table) {
  cat("귀무 가설 채택")
} else {
  cat("귀무 가설 기각") 
}

data
answer <- c(10, 10, 10, 10, 10, 10)
chi_square <- sum((answer-data)**2 / answer)
chi_square

#############################################################
# 귀무 가설을 카이제곱으로 증명
data <- data.frame(Beverage=c("사이다", "콜라", "오렌지", "환타", "망고 주스"), qty=c(30, 35, 50, 57, 78))
data

# 귀무 가설을 증명 한다.
sum(data$qty)
chisqResult03 <- chisq.test(data$qty)
names(chisqResult03)
chisqResult03$p.value > 0.05