대충 정리한 것.

두 변수(2 그룹, matrix의 row들)들이 독립(귀무가설 참)이면 나와야하는 예상값을 가지고, 실제값과 차이를 제곱한 것을   다시 예상값으로 나눈 뒤  -> 각 요소 다 더해주기 -> 그 카이검정 결과값을 가지고 p-value 구해서 귀무가설 거짓 = 변수들 독립을 유의미하다고 확정하기  = 대립가설 채택하기

#### chi-square 카이제곱 검정 ####
# 변수(남/녀- matrix의 행들)들이 독립이냐? 아니면 각 변수들이 결과에 영향을 미치느냐
# ex> 남/녀 그룹이 영향을 줘서 yes/no가 나타났느냐 아니면 우연히 나타났느냐
#     2번째 여자그룹은 no가 훨씬 많으므로, 먼가 영향(유의미한 관계성, 그룹만의 관계성)이 있다?

#### 1. 데이터 준비 - 2by2 matrix ####
# 카이제곱 검정은 각 그룹의 합과 각 대답(yes / no)의 합이 필요하므로 matrix형태의 데이터를 준비한다.
# 1번째 남자 그룹의 yes 42 / no 30,    2번째 여자 그룹의 yes 50, no 87이라고 가정
data <- matrix( c(42, 30,
                             50, 87), nrow = 2, byrow = FALSE)
data


#### 2. 사용자 정의 함수를 일부만 완성시켜 chisq 검정함수의 귀무가설 참인지 알아보기.*** ####
# H0 귀무가설 : 남/녀는 차이가 없다. = 변수들 독립
# chisq 검정 중간 결과의 예상값 matrix : 귀무가설이 참이라면 <나와야 하는 예상된 값 matrix>

# Obs : Observer : 눈에 보이는 값, 여기서는 2by2 matrix
# 예상되는 값 : c(남자그룹 yes/no의 합 , 여자그룹 yes/no의 합) 외적%*% (남+여의 yes의 합, 남+여의 no의합)   /  matrix 전체의 합
# outer(a, b) : 외적, (a %*% b)와  동일
image
# rowSums(), colSums() : matrix의 (각 행, 각 열)별  합  벡터로 반환해주는 함수

rowSums(data) # 72 137
colSums(data) # 92 117
outer(rowSums(data), colSums(data)) # [1,] 6624 12604, [2,]8824 16029
outer(rowSums(Obs), colSums(Obs)) / sum(Obs) #[1,] 6624 12604 [2,] 8424 16029

#*** chisq 검정 사용자 정의 함수 일부만 보기(귀무가설 참인지)***
# 함수에서 나오는 예상 값이   실제값과 유사하면   귀무가설참=남녀독립
chisq <- function(Obs){
   Expected <- outer(rowSums(Obs), colSums(Obs)) / sum(Obs)
   return (Expected)
}

chisq(data) # [1,] 31.69378 60.30622 [2,] 40.30622 76.69378

#### 3. 카이검정 귀무가설에 대한 해석 ####
# 1) 만약 두 그룹(남/녀)가 대답(y/n)에 차이가 없다(=귀무가설 참= 남녀 독립 = 변수들 독립)면 나와야하는 예상 값
# chisq(data)
#       [,1]     [,2]
#[1,] 31.69378 60.30622
#[2,] 40.30622 76.69378

# 2) 실제 값 -> 카이검정 예상값과는 전혀 다른 값을 나타내므로 귀무가설 거짓 -> 남/녀라는 변수(그룹)은 y/n에 영향을 준다!!!!***

# data
#    [,1]   [,2]
# [1,]   42   50
# [2,]   30   87

#### 4. 사용자 정의 함수 완성 : 카이제곱 검정 : 두 변수(그룹)이 독립(귀무가설 참)이면 나와야하는 예상값을 가지고, 실제값과 차이를 제곱한 것을  /  다시 예상값으로 나눠준 뒤,각 요소들을 다 더해주기.####
# sum(  (실제값 - 예상값)^2 / 예상값  )
chisq <- function(Obs){
   Expected <- outer(rowSums(Obs), colSums(Obs)) / sum(Obs)
   return( sum( (Obs - Expected)^2 / Expected ))
}

chisq(data) # [1] 9.132947


#### 5. 카이제곱 검정 결과가 유의미한지 알기 위해 p-value값 구하기 ####
# p-value : 전체 값 - pchisq( 카이제곱 검정 결과, 자유도 )
# 자유도 : n by m matrix에서는 (n-1)*(m-1)로 구한다.
# pchisq( chisq , 자유도 )는 R에서 기본제공되는 함수, 카이제곱 검정결과, 자유도를 대입하면 넓이(%)가 나온다.

1 - pchisq(9.132947, (2-1)*(2-1)) # 0.00251047

#*** p-value 값이 0.0025 로 0.05보다 작으므로 --> 귀무가설 거짓(=예상값과 실제값차이 많이 남 = 변수들 독립)이 유의미하다 라는 결론을 내릴 수 있다.
# > 귀무가설H0를 파기하고 독립x 차이가 있다. -> 대립(대체) 가설을 채택 함.


#### 6. 간단하게 존재하는 함수 ####

# Pearson's Chi-squared test with Yates' continuity correction
chisq.test(data) # X-squared = 8.2683, df = 1, p-value = 0.004034
# correction 이 들어가기 때문에, 원조 카이제곱 검정과 값이 차이난다.

#Pearson's Chi-squared test
chisq.test(data, correct = FALSE) # X-squared = 9.1329, df = 1, p-value = 0.00251

+ Recent posts