본문 바로가기
R 과 데이터분석/기초 문법 ~ 머신러닝

[R 데이터분석] 12장. 교차분석과 카이제곱검정

by JoyfulS 2019. 9. 13.

# chap12_CrossTableChiSquare

# 교차분석과 카이제곱검정

# 1. 교차분석

# 2. 카이제곱 검정

 

 

 

# 데이터프레임 생성
# - 교차표 생성을 위한 데이터셋 만들기

 

### 사용된 파일은 https://joyfuls.tistory.com/4 에서 다운 받으실 수 있습니다.

 

#  1)  실습파일 가져오기
setwd("C:/2_Rwork/Part-III")
data <- read.csv("cleanDescriptive.csv", header=TRUE)
data # 확인
head(data) # 변수 확인
dim(data) # 248  14
# 2) 변수 추출
x <- data$level2 # 리코딩 변수 이용
y <- data$pass2 # 리코딩 변수 이용
# 3) 데이터프레임 생성 
df <- data.frame(Level=x, Pass=y) # 데이터 프레임 생성 
table(df$Level) # 3 -> row 
table(df$Pass) # 2 -> column

#######################
## 1. 교차분석
#######################
# - 교차분할표를 통해서 범주형 변수의 관계를 분석하는 방법

# 1) 교차분할표 생성  
table(df) # 빈도보기

# 2) package를 이용한 교차분할표 생성
install.packages("gmodels") # gmodels 패키지 설치
library(gmodels) # CrossTable() 함수 사용

CrossTable(x=df$Level, y=df$Pass)

# 3) diamond의 cut과 color에 대한 교차분할표 생성
library(ggplot2) # diamonds 데이터 셋 사용

CrossTable(x=diamonds$color, y=diamonds$cut) 

#----------------------------------------------------------------------------
# <실습> 부모의 학력수준이 자녀의 대학진학에 영향이 있는가를   
#        알아보기 위해서 다음과 같이 교차분석을 수행하시오.
#----------------------------------------------------------------------------
#<조건1> CrossTable()함수 이용
#<조건2> 변수모델링 : 부모학력수준(x) -> 자녀대학진학여부(y)

# sample : 고졸(합격) : 49 
# 기대값 식 = (셀의 행합 * 셀의 열합) / 전체합
p_value = (89 * 135) / 225
p_value # 53.4
# 기대비율 식 = (관측값 - 기대값)^2/ 기대값 
p_rate = ((49 - p_value)^2) / p_value
p_rate # 0.3625468

# 교차분할표 & 카이검정 
CrossTable(x=df$Level, y=df$Pass, chisq = TRUE)
#Pearson's Chi-squared test 
#------------------------------------------------------------
#Chi^2 =  2.766951     d.f. =  2     p =  0.2507057 
# 검정통계량 : Chi^2 : 기대비율총합, d.f.(자유도) : n-1
Chi_2 = 0.544 + 0.363 + 1.026 + 0.684 + 0.091 + 0.060
Chi_2

# 귀무가설 : 학년수준과 자녀의 대학진학여부와 관련이 없다.(O)
# 대립가설 : 학년수준과 자녀의 대학진학여부와 관련이 있다.(x)
# p =  0.2507057 >= 0.05(알파)


###################################
##  2. 카이제곱 검정 : CrossTable() 이용
###################################

# 1) 일원카이제곱 

# 적합도/선호도 검정 
# - chisq.test() 함수를 이용하여 관찰치와 기대빈도 일치여부 검정

# (1) 적합성 검정 예
#-----------------------------------------------
# 귀무가설 : 기대치와 관찰치는 차이가 없다.(x) 
# 대립가설 : 기대치와 관찰치는 차이가 있다.(o) 
#-----------------------------------------------
# 가설 설정 방법
# 귀무가설 : 같다 = 다르지않다 = 차이가 없다 = 효과가 없다(부정적)
# 대립가설 : 같지않다 = 다르다 = 차이가 있다 = 효과가 있다(긍정적)

# 60회 주사위를 던져서 나온 관측도수/기대도수
# 관측도수 : 4(1), 6(2), 17(3), 16(4), 8(5), 9(6)
# 기대도수 : 10,10,10,10,10,10

chisq.test(c(4,6,17,16,8,9))
#X-squared = 14.2, df = 5, : 검정통계량 
#p-value = 0.01439 : 유의확률 

# p-value = 0.01439 < 0.05(유의수준) : 기각 

#<유의확률 해석>
#유의확률(p-value : 0.01439)이 0.05미만이기 때문에 유의미한 수준(α=0.05)에서 귀무가설을 기각할 수 있다.


# (2) 선호도 분석 
#-----------------------------------------
# 귀무가설 : 기대치와 관찰치는 차이가 없다.(X) 
# 대립가설 : 기대치와 관찰치는 차이가 있다.(O) 
#-----------------------------------------
data <- textConnection(
  "스포츠음료종류  관측도수
  1   41
  2   30
  3   51
  4   71
  5   61
  ")
x <- read.table(data, header=T)
x # 스포츠음료종류 관측도수

chisq.test(x$관측도수)
#X-squared = 20.4882, df = 4(N-1), p-value = 0.0003999

#<유의확률 해석>
#유의확률(p-value : 0.0003999)이 0.05미만이기 때문에 유의미한 수준(α=0.05)에서 귀무가설을 기각할 수 있다. 


# 2) 이원카이제곱 - 교차분할표 이용

# (1) 독립성/관련성 검정    
# - 동일 집단의 두 변인(학력수준과 대학진과 여부)을 대상으로 관련성이 있는가 없는가?

# 귀무가설 : 부모의 학력수준과 자녀의 대학진학 여부와 관련성이 없다. p >= 0.05
# - 두 변인은 서로 독립적이다.
# 대립가설 : 부모의 학력수준과 자녀의 대학진학 여부와 관련성이 있다. p < 0.05
# - 두 변인은 서로 독립적이지 않다.

# x : 범주형 변수, y : 범주형 변수 

# 독립변수(x)와 종속변수(y) 생성 
x <- data$level2 # 부모의 학력수준
y <- data$pass2 # 자녀의 대학진학여부 
x
y
CrossTable(x, y, chisq = TRUE) #p =  0.2507057    
#Pearson's Chi-squared test 

# p =  0.2507057 >= 0.05

# <논문에서 교차분석과 카이제곱 검정 결과 제시방법>


# (2) 동질성 검정 
# 두 집단의 분포가 동일한가? 다른 분포인가?
# 예) 교육방법(범주형)에 따른 만족도(등간) : 집단 간 차이가 없다.(동질성 검정)

# x : 범주형 변수(명목/서열), y : 숫자형 변수(등간/비율) 

 

 

# <실습>

 
# 1. 파일 가져오기
setwd("C:/2_Rwork/Part-III")
data <- read.csv("homogenity.csv", header=TRUE)
head(data) 
# method와 survery 변수만 서브셋 생성
data <- subset(data, !is.na(survey), c(method, survey)) 

# 2. 변수리코딩 - 코딩 변경
# method: 1:방법1, 2:방법2, 3:방법3 
# survey: 1:매우만족, 2:만족, 3:보통, 4: 불만족, 5: 매우불만족

# 교육방법2 필드 추가
data$method2[data$method==1] <- "방법1" 
data$method2[data$method==2] <- "방법2"
data$method2[data$method==3] <- "방법3"

# 만족도2 필드 추가
data$survey2[data$survey==1] <- "매우만족"
data$survey2[data$survey==2] <- "만족"
data$survey2[data$survey==3] <- "보통"
data$survey2[data$survey==4] <- "불만족"
data$survey2[data$survey==5] <- "매우불만족"

# 3. 교차분할표 작성 
table(data$method2, data$survey2)  # 교차표 생성 -> table(행,열)
#         만족 매우만족 매우불만족 보통 불만족
# 방법1    8        5          6   15     16 -> 50
# 방법2   14        8          6   11     11 -> 50
# 방법3    7        8          9   11     15 -> 50
# 주의 : 반드시 각 집단별 길이(50)가 같아야 한다.

# 4. 동질성 검정 - 모수 특성치에 대한 추론검정  
chisq.test(data$method2, data$survey2) 
# X-squared = 6.5447, df = 8, p-value = 0.5865
CrossTable(data$method2, data$survey2, chisq = TRUE)
# Chi^2 =  6.544668     d.f. =  8     p =  0.5864574 

# 5. 동질성 검정 해석
# p-value = 0.5865 >= 0.05 : 각 집단간 만족도에 차이가 없다.



댓글