2

非中心パラメーターを使用して anova パワーとサンプル サイズを計算する関数をいくつか作成しようとしました。

Rには非常に優れた機能がいくつかありますが、私の機能は生物統計学の本から考え方を学習して再現することでした...

数学が関係しているにもかかわらず、私の「nc」と「fpower」関数はうまく機能し、期待どおりです。

nc <- function(diff,n,sd) {
  nonc <- (diff^2/2)*(n/sd^2)
  return(nonc)
}

fpower <- function(k,n,diff,sd,alpha=0.05) {
  nonc <- nc(diff,n,sd)
  dfn <- k - 1
  dfd <- k*(n-1)
  f1 <- qf(1-alpha,dfn,dfd)
  f2 <- pf(f1,dfn,dfd,nonc)
  return(1-f2)
}

ただし、私の「fsample」は期待どおりに機能しません。seq の最初の n である 2 を返します。

fsample <- function(k,diff,sd,alpha=0.05,power=0.9){
  for(n in 2:5000){
    if ( fpower(k,n,sd,alpha) >= power) break
  }
  return(n)
}

しかし、コンソールでこのコードを「手で」実行すると、期待どおりに動作します!! そして、正しい n 値を返します。

どうしたの?

4

1 に答える 1

3

diffに引数を渡さなかったfpowerため、引数は思った順序ではありません。 fsampleする必要があります:

fsample <- function(k,diff,sd,alpha=0.05,power=0.9){
  for(n in 2:5000){
    if ( fpower(k,n,diff,sd,alpha) >= power) break
  }
  return(n)
}

呼び出し時に引数に名前を付けていれば、これは問題にならなかったことに注意してください。これは、欠落していてデフォルト値がないfpowerというエラーが発生するためです。diff

# this will error
fsample <- function(k,diff,sd,alpha=0.05,power=0.9){
  for(n in 2:5000){
    if ( fpower(k=k,n=n,sd=sd,alpha=alpha) >= power) break
  }
  return(n)
}

また、データオブジェクトに関数と同じ名前を付けないようにすることもできます(たとえば、、、diffおよびsd関数powerでもあります)。そうしないと、混乱する可能性があります。

于 2012-09-18T19:05:26.627 に答える