(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)"