반응형
/*******************************************************************************************************************
-- Title : [R3.3] 추론통계분석 - 교차분석(CrossTable) 및 카이제곱(Chi-Squared) 분석
-- Reference : hrd-net
-- Key word : R 크로스테이블 crosstable chi-squared 패키지 package 교차분석 빈도 gmodels ggplot2
diamonds chisq.test 귀무가설 대립가설 유의확률 검정통계량 카이제곱 이원카이제곱
동질성 독립성 관련성 추론 통계 분석
*******************************************************************************************************************/
-- R
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | # ************************************************ # -- 데이터프레임 생성 # 교차표 생성을 위한 데이터셋 만들기 # ************************************************ # -- 1) 실습파일 가져오기 df_data = read.csv("C:\\RProject\\Rwork\\Part-III\\cleanDescriptive.csv", header=TRUE) df_data # 확인 head(df_data) # 변수 확인 # -- 2) 변수 추출 x = df_data$level2 # 리코딩 변수 이용 y = df_data$pass2 # 리코딩 변수 이용 x; y # 부모학력수준(x) -> 자녀대학진학여부(y) # -- 3) 데이터프레임 생성 # 변수 모델링 : 부모학력수준(독립변수:x) -> 자녀진학여부(종속변수:y) # 형식 : data.frame(명목척도=x, 명목척도=y) df_result = data.frame(Level=x, Pass=y) # 데이터 프레임 생성 - 데이터 묶음 dim(df_result) # 차원보기- 248 2 # ************************************************ # -- 1. 교차분석 # 교차분할표를 통해서 범주형 변수의 관계를 분석하는 방법 # ************************************************ # -- 1) 교차분할표 생성 table(df_result) # 빈도보기 # -- 2) package를 이용한 교차분할표 생성 install.packages("gmodels") # gmodels 패키지 설치 library(gmodels) # CrossTable() 함수 사용 # -- 3) diamond의 cut과 color에 대한 교차분할표 생성 install.packages("ggplot2") # diamonds 데이터 셋 사용을 위한 패키지 설치 library(ggplot2) # diamonds head(diamonds) # -- 4) 크로스테이블 구성 CrossTable(x=diamonds$color, y=diamonds$cut) # -- 5) 크로스테이블 구성2 # <조건1> CrossTable()함수 이용 # <조건2> 변수모델링 : 부모학력수준(x) -> 자녀대학진학여부(y) x = df_data$level2 y = df_data$pass2 df = data.frame(x, y) CrossTable(x= df$x, y = df$y) # ************************************************ # -- 2. 카이제곱 검정 : CrossTable() 이용 # 교차분석 + 가설검정 # ************************************************ # ------------------------------ # -- 1) 일원카이제곱 # ------------------------------ # -- 적합도/선호도 검정 # chisq.test() 함수를 이용하여 관찰치와 기대빈도 일치여부 검정 # (1) 적합성 검정 예 # # 귀무가설 : 기대치와 관찰치는 차이가 없다. : p > 알파 # 예) 도박사의 주사위는 게임에 적합하다. # 대립가설 : 기대치와 관찰치는 차이가 있다. : p < 알파 # 예) 도박사의 주사위는 게임에 적합하지 않다. # # 가설 설정 방법 # 귀무가설 : 같다 = 다르지않다 = 차이가 없다 = 효과가 없다 # 대립가설 : 같지않다 = 다르다 = 차이가 있다 = 효과가 있다 # 60회 주사위를 던져서 나온 관측도수/기대도수 # 관측도수 : 4, 6, 17,16 ,8,9 # 기대도수 : 10,10,10,10,10,10 chisq.test(c(4,6,17,16,8,9)) # 2) X-squared = 14.2 > 11.071, df = 5(n-1) -> 귀무가설 기각 # 1) p-value = 0.01439 < 0.05 -> 귀무가설 기각 # <유의확률 해석> # 유의확률(p-value : 0.01439)이 0.05미만이기 때문에 유의미한 수준(α=0.05)에서 귀무가설을 기각할 수 있다. # <검정통계량 해석> # 검정통계량이 자유도(df)가 5이고, 유의수준이 0.05인 경우 chi-square 분포표에 의하면 임계값이 11.071에 해당된다. # 그러므로 X-squared 기각값(역)은 χ2 >= 11.071이 된다. # (2) 선호도 분석 # # 귀무가설 : 기대치와 관찰치는 차이가 없다. # 예) 스포츠음료의 선호도에 차이가 없다. # 대립가설 : 기대치와 관찰치는 차이가 있다. # 예) 스포츠음료의 선호도에 차이가 있다. # df_data22 = textConnection( "스포츠음료종류 관측도수 1 41 2 30 3 51 4 71 5 61 ") x = read.table(df_data22, header=T) x # 스포츠음료종류 관측도수 chisq.test(x$관측도수) # X-squared = 20.4882, df = 4, p-value = 0.0003999 # <유의확률 해석> # 유의확률(p-value : 0.0003999)이 0.05미만이기 때문에 유의미한 수준(α=0.05)에서 귀무가설을 기각할 수 있다. # ------------------------------ # -- 2) 이원카이제곱 - 교차분할표 이용 # ------------------------------ # -- # -- (1) 독립성/관련성 검정 # -- # p값이 통상 0.05 보다 작으면 관련성이 있다. # 동일 집단의 두 변인(학력수준과 대학진과 여부)을 대상으로 관련성이 있는가 없는가? # 귀무가설 : 부모의 학력수준과 자녀의 대학진학 여부와 관련성이 없다. p >= 0.05 # 두 변인은 독립적이다. # 대립가설 : 부모의 학력수준과 자녀의 대학진학 여부와 관련성이 있다. p < 0.05 # 두 변인은 독립적이지 않다. # 독립변수(x)와 종속변수(y) 생성 x = df_data$level2 # 부모의 학력수준 y = df_data$pass2 # 자녀의 대학진학여부 CrossTable(x, y, chisq = TRUE) # p = 0.2507057 # Pearson's Chi-squared test # 2) Chi^2 = 2.766951 < 5.991 d.f. = 2 -> 귀무가설 채택 # 1) p = 0.2507057 > 0.05 -> 관련성 없음(귀무가설 채택) chisq.test(x, y) # X-squared = 2.767, df = 2, p-value = 0.2507 # -- # -- (2) 동질성 검정 # -- # 두 집단의 분포가 동일한가? 다른 분포인가? # 예) 교육방법에 따른 만족도 : 집단 간 차이가 없다.(동질성 검정) # -- 1. 파일 가져오기 df_data3 = read.csv("C:\\RProject\\Rwork\\Part-III\\homogenity.csv", header=TRUE) head(df_data3) # method와 survery 변수만 서브셋 생성 df_data3 = subset(df_data3, !is.na(survey), c(method, survey)) head(df_data3) # -- 2. 변수리코딩 - 코딩 변경 # method: 1:방법1, 2:방법2, 3:방법3 # survey: 1:매우만족, 2:만족, 3:보통, 4: 불만족, 5: 매우불만족 # 교육방법2 필드 추가 df_data3$method2[df_data3$method==1] = "방법1" df_data3$method2[df_data3$method==2] = "방법2" df_data3$method2[df_data3$method==3] = "방법3" # 만족도2 필드 추가 df_data3$survey2[df_data3$survey==1] = "1.매우만족" df_data3$survey2[df_data3$survey==2] = "2.만족" df_data3$survey2[df_data3$survey==3] = "3.보통" df_data3$survey2[df_data3$survey==4] = "4.불만족" df_data3$survey2[df_data3$survey==5] = "5.매우불만족" # -- 3. 교차분할표 작성 table(df_data3$method2, df_data3$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(df_data3$method2, df_data3$survey2) # Pearson's Chi-squared test # df_data: df_data$method2 and df_data$survey2 # X-squared = 6.5447, df = 8, p-value = 0.5865 > 0.05 # -- 5. 동질성 검정 해석 # 교육방법별로 만족도에 차이가 없다고 볼 수 있다. | cs |
-- Files
반응형