0

block.random()psychライブラリからは、ブロックランダム化実験計画を作成するための優れたツールですが、記述された関数では、開始する前にいくつかの計算を行う必要があり、実験因子のレベルの数値インデックスのみを含む行列を生成します。

植物成長実験の例。実験計画法を開始するときに通常知っている種類の情報を使用します。

  • 肥料と日光などの2つの実験的要因
  • 3つのレベルの肥料(5mL /日、10mL /日、20mL /日)
  • 2つのレベルの日光(直射日光、日陰)
  • 検出力分析では、グループごとに15個のサンプルが必要であることがわかります

次のようにblock.randomを使用します。

> plan=block.random(n=90,c(fertilizer=3,sunlight=2))
> headtail(plan)
    blocks fertilizer sunlight
S1       1          3        2
S2       1          2        1
S3       1          3        1
S4       1          1        1
...    ...        ...      ...
S87     15          3        2
S88     15          2        1
S89     15          1        1
S90     15          1        2

すばらしいですが、2つの問題があります。

  • 関数を使用するには、合計90のサンプルが必要であることを理解する必要があります(グループあたり15、肥料の3レベル、日光の2レベル)これは解決するのが簡単な問題です
  • 係数の数値レベル(肥料の場合は1:3、日光の場合は1:2)を実際のレベル(5mL /日、10mL /日、20mL)に相関させる必要があるため、必ずしも出力を直接使用できるとは限りません。 /日肥料の場合)および(直射日光、日光の場合は日陰)

レベル名を含めて、参照用に直接印刷したり、レポートに含めるためのテーブルとしてすばやくフォーマットしたりできるものが欲しいです。

どうすればこれを達成できますか?

4

1 に答える 1

1

の単純なラッパー関数を使用するblock.random()と、上記のすべてが可能になります。

create.randomization.plan <- function(n.per.group, factors, seed=NULL){
  factor.lengths <- sapply(factors,length)
  if(!is.null(seed)){
    set.seed(seed)
  }
  plan <- as.data.frame(block.random(n.per.group*prod(factor.lengths),
                                     factor.lengths))
  for(i in 1:length(factors)){
    plan[,colnames(plan)==names(factors)[i]] <-
      factor(plan[,colnames(plan)==names(factors)[i]])
    levels(plan[,colnames(plan)==names(factors)[i]]) <- factors[[i]]
  }
  return(plan)
}

使用法は次のようになります。

> factors <- list(fertilizer=c("5mL/day", "10mL/day", "20mL/day"),
+                 sunlight=c("direct sun", "shade"))
> 
> plan <- create.randomization.plan(15, factors)
> headtail(plan)
    blocks fertilizer   sunlight
S1       1   10mL/day      shade
S2       1   20mL/day direct sun
S3       1   20mL/day      shade
S4       1    5mL/day direct sun
...    ...       <NA>       <NA>
S87     15   10mL/day      shade
S88     15    5mL/day direct sun
S89     15   10mL/day direct sun
S90     15   20mL/day direct sun

再現性のシードを設定することもできます。create.randomization.plan(15, factors, seed=123)

于 2013-01-30T21:19:52.157 に答える