반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


카이제곱검정의 이론과 카이제곱의 코딩 실습을 진행했다.


1. 카이제곱검정

> 변수 간 독립성에 대한 귀무가설이 타당한지를 평가하는 검정

> 종속변수가 범주형자료인 경우에 사용하는 분석기법

> 범주형 자료 분석은 적합도 검정(goodness of fit test), 독립성 검정(test of independence), 동질성 검정(test of homogeneity)3가지로 분류할 수 있다.

 

1) 적합도 검정(goodness of fit test)

> 관측값들이 어떤 이론적 분포를 따르고 있는지를 검정

> 한 개의 요인을 대상으로 함

 

2) 독립성 검정(test of independence)

> 서로 다른 요인들에 의해 분할되어 있는 경우 그 요인들이 관찰값에 영향을 주고 있는지 아닌지, 요인들이 서로 연관이 있는지 없는지를 검정

> 두 개의 요인을 대상으로 함

 

3) 동질성 검정(test of homogeneity)

> 관측값들이 정해진 범주 내에서 서로 비슷하게 나타나고 있는지를 검정

> 분할표에서 부모집단의 비율이 동일한가를 검정

> 두 개의 요인을 대상으로 함

 

 

#유전학자 멘델은 콩 교배에 대한 유전의 이론적 모형으로서 잡종비율을 A : B : C = 2 : 3 : 5 라고 주장하였다.

#이 이론의 진위를 가리기 위해 두 콩 종자의 교배로 나타난 100개의 콩을 조사하였더니

#A20, B40, C40개이다.

#이러한 관찰값을 얻었을 때 멘델 유전학자의 이론이 맞다고 할 수 있는지를 유의수준 α = 0.05 에서 검정하기.

 

 

# 카이제곱검정 - 적합도 검정 
obs <- c(20, 40, 40) 
obs.probs <- c(2/10, 3/10, 5/10)
(g.fit <- chisq.test(obs, p=obs.probs))

# 가설설정
# 귀무가설 H0 : 관측값의 도수와 가정한 이론 도수(기대 관측도수)가 동일하다.
# 대립가설 H1 : 적어도 하나의 범주 (혹은 계급)의 도수가 가정한 이론 도수(기대 관측도수)와 다르다.


# 분석결과 
# p-value가 0.06948, 유의수준 𝜶 0.05 보다 크므로 귀무가설 H0를채택
# "멘델이 주장한 콩의 잡종비율 이론적 분포는 적합하다"고 판단할 수 있다.

 

setwd("C:/Users/User/Desktop/data")
click_rate <- read.csv("click_rates.csv")
clicks<-matrix(click_rate$Rate, nrow=3, ncol=2, byrow=TRUE) #clicks라는 3X2행렬을 만든다. byrow = TRUE는 행기준으로 정렬하고, byrow = FALSE는 열기준으로 정렬한다.
clicks
head(clicks)

# 카이제곱검정은 chisq.test() 함수로 수행 -> chisq(chi-squared의 줄임말)
chisq.test(clicks, simulate.p.value = TRUE)

#카이제곱검정은 2X2 뿐만 아니라 3X2, 3X3에서도 검정 가능하다.
#p-value가 유의수준인 0.05보다 크므로 귀무가설 채택한다.

 

setwd("C:/Users/User/Desktop/data")

raw_data <- c(7, 13, 9, 12, 13, 21, 10, 19, 11, 18, 12, 13)
data_mtx <- matrix(raw_data, byrow=TRUE, nrow=3)
data_mtx

dimnames(data_mtx) <- list("Class" = c("Class1", "Class2", "Class3"), 
                           "Score" = c("ScoreA", "ScoreB", "ScoreC", "ScoreF"))
data_mtx

#  addmargins는 행과 열의 합계를 의미한다. 행과 열의 맨 밑과 끝에 Sum이 나와 열과 행들의 합을 보여준다.
addmargins(data_mtx)                       

# 비례분포를 보여주는 함수 prop.table() / 즉, 빈도비율을 나타내는데 addmargins(data_mtx)를 한 상태에서
# 1행 1열에 있는 값인 7을 158로 나눴을 때 비율이 나온다.
addmargins(prop.table(data_mtx)) 

# bar plot
# beside=TRUE는 각각의 값마다 막대를 그림(각 스코어마다 막대그래프를 보임)
# legend=TRUE는 오른쪽 상단에 범례를 나타내줌
# ylim은 y축의 범위
barplot(t(data_mtx), beside=TRUE, legend=TRUE, 
        ylim=c(0, 30), 
        ylab="Observed frequencies in sample", 
        main="Frequency of math score by class")


(i.fit <- chisq.test(data_mtx))

# 가설
# 귀무가설 H0 : 두 변수 X와 Y는 서로 독립이다 (관련성이 없다)
# 대립가설 H1 : 두 변수 X와 Y는 서로 독립이 아니다 (관련성이 있다)
# 

# 분석결과
# p-value가 0.9667, 유의수준 𝜶 0.05 보다 크므로 귀무가설 H0를 채택
# "학급과 빅데이터 분석 성적 간에는 서로 관련성이 없다. 
# 즉 독립적이다."고 판단할 수 있다.

 

setwd("C:/Users/User/Desktop/data")

row_data = c(50,30,20,50,80,70)

ta <- matrix(row_data, nrow = 2, byrow = T)


dimnames(ta) <- list("성별" = c("남학생", "여학생"),
                       "DS교과목" = c("통계", "머신러닝", "딥러닝"))
addmargins(ta)

addmargins(prop.table(ta))

barplot(t(ta), beside = TRUE, legend = TRUE,
        ylim = c(0,120), ylab="Observed frequencies in sample",
        main = "데이터 사이언스 교과목 선호 조사 결과")

 

20200828 (1).hwp
0.23MB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'자기개발 > TIL' 카테고리의 다른 글

TIL(Today I Learned) 20200904  (0) 2020.09.04
TIL(Today I Learned) 20200903  (0) 2020.09.03
TIL(Today I Learned) 20200902  (0) 2020.09.02
TIL(Today I Learned) 20200901  (0) 2020.09.01
TIL(Today I Learned) 20200831  (0) 2020.08.31
TIL(Today I Learned) 20200830  (0) 2020.08.30
TIL(Today I Learned) 20200829  (0) 2020.08.30
TIL(Today I Learned) 20200827  (0) 2020.08.28
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기