Rでタグチメソッド(その2)

自分で実装してみた
得られた気づき:
1. 直交表は人のデータを再現するときは、そのデータに合う直交表を自分で作成する。
2. 自分で実験計画をデザインするときは、直交表のジェネレータを使って自分で適当に設定する。2水準のときはFrF2パッケージのFrF2()を使えば良いし、より汎用的にはDoE.baseパッケージのoa.design()が使える。

L.letter <- oa.design(factor.names=tibble(
  lightness=c('yes','no'),
  weight=c('heavy','light'),
  capacity=c('high','low'),
  shape=c('A','B'),
  print=c('Yes','No'),
  base=c('pink','white')
  ))
L.letter

# e.letter <- oa.design(factor.names=tibble(
#   colide=c('fall','crash'),
#   pour=c('boiled','ice'),
#   carry=c('left','right')
# ))

# d1<-c(6.8,7.8,7.4,7.1)
# d2<-c(4.9,5.2,5.5,5.7)
# d3<-c(6.8,7.1,7.0,6.9)
# d4<-c(5.3,6.1,6.2,6.3)
# d5<-c(6.0,6.3,6.3,6.2)
# d6<-c(5.1,5.3,5.5,5.8)
# d7<-c(5.2,5.5,5.5,5.8)
# d8<-c(6.1,6.7,6.7,6.4)


L<-cbind(L.letter, result1)
L<-cbind(L, result2)
L<-cbind(L, result3)
L<-cbind(L, result4)
L <- tibble(L)

L %>% 
  dplyr::select('result1':'result4') %>% 
  apply(1, function(x) {
    Ve <- var(x)
    Dbar <- mean(x)
    n <- length(x)
    SN <- 10*log10(Dbar^2/Ve-1/n)
    SN
  })  -> SN 
SN_min <- min(SN)
SN_max <- max(SN)
L.SN <- bind_cols(L.letter, tibble(SN=SN))
x <- colnames(L.letter)
nx <- length(x)
par(mfrow=c(1,ncol(L.letter)))
for (i in 1:nx){
  fct <-  x[i]
  res <- tapply(L.SN$SN, L[[fct]], mean)
  print(res)
  plot(c('1','2'), res, 'b', ylim=c(SN_min,SN_max),
       xlab=fct)
}


L %>% 
  dplyr::select('result1':'result4') %>% 
  apply(1, mean) -> mu
mu_min <- min(mu)
mu_max <- max(mu)
L.mu <- bind_cols(L.letter, tibble(mu=round(mu,1)))
x <- colnames(L.letter)
nx <- length(x)
par(mfrow=c(1,ncol(L.letter)))
for (i in 1:nx){
  fct <-  x[i]
  print(fct)
  res <- tapply(L.mu$mu, L[[fct]], mean)
  print(res)
  plot(c('1','2'), res, 'b', ylim=c(mu_min,mu_max),
       xlab=fct)
}