반응형

/*******************************************************************************************************************
-- 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로 추정
 
= 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)
= 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)
= 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) 정제된 데이터 보기 
= 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

one_sample.csv

two_sample.csv

paired_sample.csv

three_sample.csv



반응형

+ Recent posts