(1) 조사(은/는) 선택 function
josa <- function(word) {
k <- substr(word,nchar(word),nchar(word))
if (((k >="가") & (k <= "힝")) & (((utf8ToInt(k) - utf8ToInt("가")) %% 28) > 0)) {
return (paste0(word,"은 "))
} else {
return (paste0(word,"는 "))
}
}
data = read.csv("anova.csv")
vname=colnames(data)
hypo = paste0(josa(vname[2]),vname[1],'에 따라 차이가 있을 것이다.')
print(hypo)
## [1] "근무만족도는 상사의유형에 따라 차이가 있을 것이다."
(2) ANOVA 과제에 필요한 if-elseif 문
#************************
f = 4.0625
df1 = 2
df2 = 15
p = 0.0389
#************************
hypo = paste0("가설: ",josa(vname[2]),vname[1],"에 따라 통계적으로 차이가 있을 것이다.")
if (p >= 0.01 & p < 0.05) level = 'p < 0.05'
if (p >= 0.001 & p < 0.01) level = 'p < 0.01'
if (p < 0.001) level = 'p < 0.001'
if (p >= 0.05) {res=paste0(josa(vname[2]), vname[1],"에 따라 차이가 없을 것이다.")
} else {
res=paste0(josa(vname[2]),vname[1],"에 따라 통계적으로 ",level," 수준에서 의미있는 차이가 있다. (p = ",f,", df1 = ",df1,", df2 = ",df2,", p = ",round(p,4),')')
}
#************************
print(hypo)
## [1] "가설: 근무만족도는 상사의유형에 따라 통계적으로 차이가 있을 것이다."
print(res)
## [1] "근무만족도는 상사의유형에 따라 통계적으로 p < 0.05 수준에서 의미있는 차이가 있다. (p = 4.0625, df1 = 2, df2 = 15, p = 0.0389)"
(3) ANOVA Program
#**************************************************
josa <- function(word) {
k <- substr(word,nchar(word),nchar(word))
if (((k >="가") & (k <= "힝")) & (((utf8ToInt(k) - utf8ToInt("가")) %% 28) > 0)) {
return (paste0(word,"은 "))
} else {
return (paste0(word,"는 "))
}
}
#**************************************************
ANOVA = function(data) {
vname=colnames(data)
x = as.matrix(data[,1])
y = as.matrix(data[,2])
m = aggregate(y ~ x, 'FUN'= mean)
s = aggregate(y ~ x, 'FUN'= sd)
n = aggregate(y ~ x, 'FUN'= length)
tmean= mean(y)
ssb = sum((m[,2] - tmean)^2 * n[,2])
sst = sum((y - tmean)^2)
ssw = sst - ssb
df1 = nrow(m) - 1
df2 = nrow(y) - nrow(m)
dft = nrow(y) - 1
f = (ssb/df1) / (ssw/df2)
p = pf(f,df1,df2,lower.tail = FALSE)
table = matrix(NaN, 3, 5)
table[1,1] = ssb
table[2,1] = ssw
table[3,1] = sst
table[1,2] = df1
table[2,2] = df2
table[3,2] = dft
table[1,3] = ssb/df1
table[2,3] = ssw/df2
table[1,4] = f
table[1,5] = p
colnames(table) = c("제곱합", "자유도", "평균제곱","F","p")
rownames(table) = c("집단간", "집단내","합계계")
#*******************************<익힘1: 평균테이블작성>***********************
stat = matrix(NaN, nrow(m)+1, 5)
temp = cbind(m[,2],s[,2],n[,2])
stat[1:3,1:3] = temp
stat[4,1] = tmean
stat[4,2] = sd(y)
stat[4,3] = nrow(y)
stat[1,4] = f
stat[1,5] = p
colnames(stat) = c("평균","표준편차","사례수","F","p")
rownames(stat) = c(m[,1],"합계")
hypo = paste0("가설: ",josa(vname[2]),vname[1],"에 따라 통계적으로 차이가 있을 것이다.")
if (p >= 0.01 & p < 0.05) level = 'p < 0.05'
if (p >= 0.001 & p < 0.01) level='p < 0.01'
if (p < 0.001) level= 'p < 0.001'
if (p >= 0.05) {res=paste0(josa(vname[2]), vname[1],"에 따라 차이가 없을 것이다.")
}else {res=paste0(josa(vname[2]),vname[1],"에 따라 통계적으로 ",level,"수준에서 의미있는 차이가 있다. (p = ",f,", df1 = ",df1,", df2 = ",df2,", p = ",round(p,4),')')
result = list(hypo=hypo,table=table,stat=stat,res=res)
}
return(result)
}
data = read.csv("anova.csv")
ANOVA(data)
## $hypo
## [1] "가설: 근무만족도는 상사의유형에 따라 통계적으로 차이가 있을 것이다."
##
## $table
## 제곱합 자유도 평균제곱 F p
## 집단간 40.44444 2 20.222222 4.0625 0.03891091
## 집단내 74.66667 15 4.977778 NaN NaN
## 합계계 115.11111 17 NaN NaN NaN
##
## $stat
## 평균 표준편차 사례수 F p
## 민주형 11.333333 3.559026 6 4.0625 0.03891091
## 자유방임형 8.333333 1.032796 6 NaN NaN
## 전제형 8.000000 1.095445 6 NaN NaN
## 합계 9.222222 2.602161 18 NaN NaN
##
## $res
## [1] "근무만족도는 상사의유형에 따라 통계적으로 p < 0.05수준에서 의미있는 차이가 있다. (p = 4.0625, df1 = 2, df2 = 15, p = 0.0389)"