반응형
/*******************************************************************************************************************
-- Title : [R3.3] 추론통계분석 - Ttest, Anova를 통한 집단 간 차이 분석
-- Reference : hrd-net
-- Key word : R 추정 검정 통계량 t.test freq binom.test shapiro.test prop.test bartlett.test kruskal.test aov
tukeyhsd 귀무가설 분산검정 동질성 정규성 기술 통계량 추론 통계 분석 가설검정
*******************************************************************************************************************/
-- Chart
-- R Scripts
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 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 | # ************************************************ # -- 점 추정과 구간 추정 # ************************************************ # 추정(estimation) : 표본을 통해서 모집단을 확률적으로 추측 # 검정통계량 : 표본에 의해서 계산된 통계량(표본평균, 표본표준편차) # 모수 : 모집단에 의해서 나온 통계량(모평균, 모표준편차) # 1) 점 추정 : 제시된 한 개의 값과 검정통계량을 직접 비교하여 # 가설 기각유무를 결정 # ex) 우리나라 중학교 2학년 남학생 평균키는 165.2cm로 추정 # 2) 구간 추정 : 신뢰구간과 검정통계량을 비교하여 가설 기각유무 결정 # 신뢰 구간 : 오차범위에 의해서 결정된 하한값과 상한값의 범위 # ex) 우리나라 중학교 2학년 남학생 평균키는 164.5 ~ 165.5cm로 추정 x = rnorm(1000, mean=100, sd=10) x # ------------------------------ # -- 평균 차이 검정 # ------------------------------ t.test(x, mu=95) # 귀무가설 : 평균 95와 차이가 없다. : > # 대립가설 : 평균 95와 차이가 있다. : < # t = 15.349, df = 999, p-value < 2.2e-16 < 0.05 # 95 percent confidence interval: # 99.33154 ~ 100.60143 = 95% 신뢰수준에서 신뢰구간[채택역] t.test(x, mu=99.54, conf.level = 0.95) # 사회과학 0.05 # t = 1.3181, df = 999, p-value = 0.1878 > 0.05 : 구무가설 채택 ?t.test # 도움말 보기 t.test(x, mu=99.54, conf.level = 0.99) #의학 0.01 # t = 1.3181, df = 999, p-value = 0.1878 > 0.05 # 99 percent confidence interval: # 99.13144 ~ 100.80153 : 신뢰구간 넓어짐 : 채택역 확장 # ************************************************ # -- 추론통계분석(단일집단 비율차이 검정) # 단일 집단의 비율이 어떤 특정한 값과 같은지를 검증 # ************************************************ # ------------------------------ # -- 1. 실습데이터 가져오기 # ------------------------------ df_data = read.csv("C:\\RProject\\Rwork\\Part-III\\one_sample.csv", header=TRUE) head(df_data) x = df_data$survey x # ------------------------------ # -- 2. 빈도수와 비율 계산 # ------------------------------ summary(x) # 결측치 확인 length(x) # 150개 table(x) # 0:불만족(14), 1: 만족(136) install.packages("prettyR") library(prettyR) # freq() 함수 사용 freq(x) # ------------------------------ # -- 3. 가설검정 # 형식) binom.test(불만족수, 만족수, p = 확률) # ------------------------------ # -- 1) 불만족율 기준 검정 # 양측검정 binom.test(c(14,136), p=0.2) # 기존 20% 불만족율 기준 검증 실시 binom.test(c(14,136), p=0.2, alternative="two.sided", conf.level=0.95) # p-value = 0.0006735 < 0.05 -> 기각 # -- 단측검정1 : 14 > 20% binom.test(c(14,136), p=0.2, alternative="greater", conf.level=0.95) # p-value = 0.9999 > 0.05 # -- 단측검정2 : 14 < 20% -> binom.test(c(14,136), p=0.2, alternative="less", conf.level=0.95) # p-value = 0.0003179 < 0.05 # ************************************************ # -- 추론통계분석(단일집단 평균차이 검정) # 단일 집단의 평균이 어떤 특정한 값과 차이가 있는지를 검증 # ************************************************ # ------------------------------ # -- 1. 실습파일 가져오기 # ------------------------------ setwd("c:/Rwrok/Part-III") df_data2 = read.csv("C:\\RProject\\Rwork\\Part-III\\one_sample.csv", header=TRUE) str(df_data2) # 150 head(df_data2) x = df_data2$time head(x) # ------------------------------ # -- 2. 기술통계량 평균 계산 # ------------------------------ summary(x) # NA-41개 mean(x) # NA mean(x, na.rm=T) # NA 제외 평균(방법1) x1 = na.omit(x) # NA 제외 평균(방법2) mean(x1) # 5.556881 > 5.2 # ------------------------------ # -- 3. 정규분포 검정 # ------------------------------ # 정규분포(바른 분포) : 평균에 대한 검정 # 정규분포 검정 귀무가설 : 정규분포와 차이가 없다. # shapiro.test() : 정규분포 검정 함수 shapiro.test(x1) # 정규분포 검정 함수(p-value = 0.7242) # ------------------------------ # 4. 가설검정 - 모수/비모수 # ------------------------------ # 정규분포(모수검정) -> t.test() # 비정규분포(비모수검정) -> wilcox.test() # -- 1) 양측검정 - 정제 데이터와 5.2시간 비교 t.test(x1, mu=5.2) t.test(x1, mu=5.2, alter="two.side", conf.level=0.95) # p-value = 0.0001417 # 해설 : 평균 사용시간 5.2시간과 차이가 있다. # -- 2) 단측검정 : A > 5.2 -> 0.05미만 t.test(x1, mu=5.2, alter="greater", conf.level=0.95) # p-value = 7.083e-05 = 0.00007083 # 해설 : A회사 노트북의 평균 사용시간은 5.2시간 보다 더 길다. # -- 3) 단측검정 : A < 5.2 : p-value = 0.9999 t.test(x1, mu=5.2, alter="less", conf.level=0.95) # ************************************************ # -- 추론통계분석(두집단 비율차이 검정) # ************************************************ # ------------------------------ # -- 1. 실습데이터 가져오기 # ------------------------------ df_data3 = read.csv("C:\\RProject\\Rwork\\Part-III\\two_sample.csv", header=TRUE) df_data3 head(df_data3) # 변수명 확인 # ------------------------------ # -- 2. 두 집단 subset 작성 # ------------------------------ df_data3$method # 1, 2 -> 노이즈 없음 df_data3$survey # 1(만족), 0(불만족) # 데이터 정체/전처리 x= df_data3$method # 교육방법(1, 2) -> 노이즈 없음 y= df_data3$survey # 만족도(1: 만족, 0:불만족) x;y # -- 1) 데이터 확인 # 교육방법 1과 2 모두 150명 참여 table(x) # 1 : 150, 2 : 150 # 교육방법 만족/불만족 table(y) # 0 : 55, 1 : 245 # -- 2) df_data 전처리 & 두 변수에 대한 교차분석 table(x, y, useNA="ifany") # y #x 0 1 -> 불만족/만족 #1 40 110 -> 교육방법1 = 150 #2 15 135 -> 교육방법2 = 150 # ------------------------------ # -- 3. 두집단 비율차이검증 - prop.test() # 형식) prop.test(c(110, 135), c(150, 150)) # ------------------------------ # -- 양측가설 검정 prop.test(c(110,135),c(150,150)) prop.test(c(110,135),c(150,150), alternative="two.sided", conf.level=0.95) # p-value = 0.0003422 < 0.05 # -- 단측가설 검정 : 방법1 > 방법2(x) prop.test(c(110,135),c(150,150), alter="greater", conf.level=0.95) # p-value = 0.9998 > 0.05 # -- 단측가설 검정 : 방법1 < 방법2(o) prop.test(c(110,135),c(150,150), alter="less", conf.level=0.95) # p-value = 0.0001711 < 0.05 # ************************************************ # -- 추론통계분석(두집단 평균차이 검정) # ************************************************ # ------------------------------ # -- 1. 실습파일 가져오기 # ------------------------------ df_data4 = read.csv("C:\\RProject\\Rwork\\Part-III\\two_sample.csv", header=TRUE) df_data4 head(df_data4) # 4개 변수 확인 summary(df_data4) # score - NA's : 73개 # ------------------------------ # -- 2. 두 집단 subset 작성(데이터 정제,전처리) # ------------------------------ # result = subset(df_data4, !is.na(score), c(method, score)) df_dataset = df_data4[c('method', 'score')] table(df_dataset$method) # ------------------------------ # -- 3. 데이터 분리 # ------------------------------ # -- 1) 교육방법 별로 분리 method1 = subset(df_dataset, method==1) method2 = subset(df_dataset, method==2) # -- 2) 교육방법에서 점수 추출 method1_score = method1$score method2_score = method2$score length(method1_score) # 150 - A length(method2_score) # 150 - B # -- 3) 기술통계량 length(method1_score); # 150 length(method2_score); # 150 # ------------------------------ # -- 4. 분포모양 검정 : 두 집단의 분포모양 일치 여부 검정 # 귀무가설 : 두 집단의 분포모양에 차이가 없다. # ------------------------------ var.test(method1_score, method2_score) # p-value = 0.3002 -> 차이가 없다. # 동질성 분포 : t.test() # 비동질성 분포 : wilcox.test() # ------------------------------ # -- 5. 가설검정 : 두집단 평균 차이검정 # ------------------------------ t.test(method1_score, method2_score) t.test(method1_score, method2_score, alter="two.sided", conf.int=TRUE, conf.level=0.95) # p-value = 0.0411 - 두 집단간 평균에 차이가 있다. # -- 단측검정 1 : A > B(X) t.test(method1_score, method2_score, alter="greater", conf.int=TRUE, conf.level=0.95) # p-value = 0.9794 : a1을 기준으로 비교 -> a1이 b1보다 크지 않다. # -- 단측검정2 : A < B(O) t.test(method1_score, method2_score, alter="less", conf.int=TRUE, conf.level=0.95) # p-value = 0.02055 : a1이 b1보다 작다. # ************************************************ # -- 추론통계분석(대응 두 집단 평균차이 검정) # ************************************************ # 조건 : A집단 독립적 B집단 -> 비교대상 독립성 유지 # 대응 : 표본이 짝을 이룬다. -> 한 사람에게 2가지 질문 # 사례) 다이어트식품 효능 테스트 : 복용전 몸무게 -> 복용후 몸무게 # ------------------------------ # -- 1. 실습파일 가져오기 # ------------------------------ df_data5 = read.csv("C:\\RProject\\Rwork\\Part-III\\paired_sample.csv", header=TRUE) df_data5 # ------------------------------ # -- 2. 두 집단 subset 작성 # ------------------------------ # -- 1) 데이터 정제 # result = subset(df_data, !is.na(after), c(before,after)) df_dataset = df_data5[ c('before', 'after')] df_dataset # -- 2) 적용전과 적용후 분리 before = df_dataset$before # 교수법 적용전 점수 after = df_dataset$after # 교수법 적용후 점수 before; after # -- 3) 기술통계량 length(before) # 100 length(after) # 100 mean(before) # 5.145 mean(after, na.rm = T) # 6.220833 -> 1.052 정도 증가 # ------------------------------ # -- 3. 분포모양 검정 # ------------------------------ var.test(before, after, paired=TRUE) # 동질성 분포 : t.test() # 비동질성 분포 : wilcox.test() # ------------------------------ # -- 4. 가설검정 # ------------------------------ t.test(before, after, paired=TRUE) # p-value < 2.2e-16 # -- 단측검정1 t.test(before, after, paired=TRUE,alter="greater",conf.int=TRUE, conf.level=0.95) # p-value = 1 -> x을 기준으로 비교 : x가 y보다 크지 않다. # -- 단측검정2 t.test(before, after, paired=TRUE,alter="less",conf.int=TRUE, conf.level=0.95) # p-value < 2.2e-16 -> x을 기준으로 비교 : x가 y보다 적다. # ************************************************ # -- 추론통계분석(세집단 비율차이 검정) # 세집단 간 비율차이 검정 # ************************************************ # ------------------------------ # -- 1. 파일가져오기 # ------------------------------ df_data6 = read.csv("C:\\RProject\\Rwork\\Part-III\\three_sample.csv", header=TRUE) df_data6 # ------------------------------ # -- 2. 세집단 subset 작성(데이터 정제,전처리) # ------------------------------ method = df_data6$method survey= df_data6$survey method survey # ------------------------------ # -- 3.기술통계량(빈도분석) # ------------------------------ table(method, useNA="ifany") # 50 50 50 -> 3그룹 모두 관찰치 50개 table(method, survey, useNA="ifany") # 그룹별 클릭수 : 1-43, 2-34, 3-37 # ------------------------------ # -- 4. 세집단 비율차이 검정 # sprop.test(그룹별 빈도, 그룹수) -> 집단이 늘어나도 동일한 함수 사용-땡큐 # ------------------------------ prop.test(c(34,37,39), c(50,50,50)) # p-value = 0.1165 -> 귀무가설 채택 # ************************************************ # -- 추론통계분석(세집단 평균차이 검정) # 세 집단 간 평균차분 분석 # ************************************************ # ------------------------------ # -- 1. 파일 가져오기 # ------------------------------ df_data7 = read.csv("C:\\RProject\\Rwork\\Part-III\\three_sample.csv", header=TRUE) head(df_data7) # ------------------------------ # -- 2. 데이터 정제/전처리 - NA, outline 제거 # ------------------------------ df_data7 = subset(df_data7, !is.na(score), c(method, score)) df_data7 # method, score # -- (1) 차트이용 - ontlier 보기(데이터 분포 현황 분석) plot(df_data7$score) # 차트로 outlier 확인 : 50이상과 음수값 barplot(df_data7$score) # 바 차트 mean(df_data7$score) # 14.45 # -- (2) outlier 제거 - 평균(14) 이상 제거 length(df_data7$score) # 91 df_data72 = subset(df_data7, score <= 14) # 14이상 제거 length(df_data72$score) # 88(3개 제거) # -- (3) 정제된 데이터 보기 x = df_data72$score boxplot(x) plot(x) # ------------------------------ # -- 3. 세집단 subset 작성 # ------------------------------ # -- method: 1:방법1, 2:방법2, 3:방법3 df_data72$method2[df_data72$method==1] = "방법1" df_data72$method2[df_data72$method==2] = "방법2" df_data72$method2[df_data72$method==3] = "방법3" table(df_data72$method2) # 교육방법 별 빈도수 # ------------------------------ # -- 4. 동질성 검정 - 정규성 검정 # bartlett.test(종속변수 ~ 독립변수) # 독립변수(세 집단) # ------------------------------ bartlett.test(score ~ method2, data=df_data72) # 독립변수 = 집단변수 # p = 0.1905 > 0.05 # 귀무가설 : 세 집단 간 분포의 모양이 동질적이다. # 해설 : 유의수준 0.05보다 크기 때문에 귀무가설을 기각할 수 없다. # 동질한 경우 : aov() - Analysis of Variance(분산분석) # 동질하지 않은 경우 - kruskal.test() # ------------------------------ # -- 5. 분산검정(집단이 3개인 경우 분산분석이라고 함) # aov(종속변수 ~ 독립변수, df_data=df_data set) # ------------------------------ # -- 귀무가설 : 세집단의 평균에 차이가 없다. result = aov(score ~ method2, data=df_data72) names(result) # -- aov()의 결과값은 summary()함수를 사용해야 p-value 확인 summary(result) # -- 사후검정 TukeyHSD(result) plot(TukeyHSD(result)) | cs |
-- Files
반응형