自分で実装してみた
得られた気づき:
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) }