順序ロジスティック回帰の電力分析を行うプログラム(RまたはSASまたはスタンドアロン、無料または低コストの場合)を探しています。
順序ロジスティック回帰の電力分析を行うプログラム(RまたはSASまたはスタンドアロン、無料または低コストの場合)を探しています。
回答:
私は、シミュレーションによって基本を超えるパワー解析を行うことを好みます。あらかじめ用意されているパッケージでは、どのような仮定が行われているのかよくわかりません。
Rを使用すると、電力のシミュレーションは非常に簡単(手頃な価格)になります。
replicate
関数を使用して、何度もコードを実行します(通常は約100回で開始し、所要時間を把握し、適切な一般領域を取得します。その後、最大1,000、場合によっては10,000または100,000最終的な値を使用します)。帰無仮説を棄却した回数の割合がべき乗です。順序回帰を使用した簡単な例を次に示します。
library(rms)
tmpfun <- function(n, beta0, beta1, beta2) {
x <- runif(n, 0, 10)
eta1 <- beta0 + beta1*x
eta2 <- eta1 + beta2
p1 <- exp(eta1)/(1+exp(eta1))
p2 <- exp(eta2)/(1+exp(eta2))
tmp <- runif(n)
y <- (tmp < p1) + (tmp < p2)
fit <- lrm(y~x)
fit$stats[5]
}
out <- replicate(1000, tmpfun(100, -1/2, 1/4, 1/4))
mean( out < 0.05 )
eta1 <- beta0 + beta1*x1 + beta2*x2 + beta3*x3
。
Snowの答えにもう1つ追加します(これはシミュレーションによる電力解析にも当てはまります)。1つまたは2つのテールのテストを探しているかどうかに注意してください。G * Powerのような一般的なプログラムは、デフォルトで片側検定になります。シミュレーションがそれらと一致するかどうかを確認しようとする場合(これを行う方法を学習するときは常に良い考えです)、まずそれを確認する必要があります。
Snowの片側検定を実行するには、関数の入力に「tail」というパラメーターを追加し、関数自体に次のようなものを追加します。
#two-tail test
if (tail==2) fit$stats[5]
#one-tail test
if (tail==1){
if (fit$coefficients[5]>0) {
fit$stats[5]/2
} else 1
片側バージョンは、基本的に係数が正であることを確認してから、p値を半分にカットします。
Snowの優れた例に加えて、効果のある既存のデータセットからリサンプリングすることで電力シミュレーションを行うこともできると思います。ブートストラップではありません。同じnを交換してサンプリングするわけではないので、同じ考えです。
例は次のとおりです。正のポイント推定値になった小さな自己実験を実行しましたが、それは小さいため、順序ロジスティック回帰では統計的に有意ではありませんでした。そのポイント推定では、どれくらいのnが必要ですか?さまざまな可能性のあるnについて、データセットを何度も生成し、順序ロジスティック回帰を実行して、p値がどれほど小さいかを確認しました。
library(boot)
library(rms)
npt <- read.csv("http://www.gwern.net/docs/nootropics/2013-gwern-noopept.csv")
newNoopeptPower <- function(dt, indices) {
d <- dt[sample(nrow(dt), n, replace=TRUE), ] # new dataset, possibly larger than the original
lmodel <- lrm(MP ~ Noopept + Magtein, data = d)
return(anova(lmodel)[7])
}
alpha <- 0.05
for (n in seq(from = 300, to = 600, by = 30)) {
bs <- boot(data=npt, statistic=newNoopeptPower, R=10000, parallel="multicore", ncpus=4)
print(c(n, sum(bs$t<=alpha)/length(bs$t)))
}
出力(私にとって)で:
[1] 300.0000 0.1823
[1] 330.0000 0.1925
[1] 360.0000 0.2083
[1] 390.0000 0.2143
[1] 420.0000 0.2318
[1] 450.0000 0.2462
[1] 480.000 0.258
[1] 510.0000 0.2825
[1] 540.0000 0.2855
[1] 570.0000 0.3184
[1] 600.0000 0.3175
この場合、n = 600で電力は32%でした。あまり励みになりません。
(シミュレーションのアプローチが間違っている場合は、誰かに教えてください。臨床試験を計画するための電力シミュレーションについて議論しているいくつかの医学論文を読みますが、正確な実装についてはまったく確信がありません。)
最初のシミュレーションを参照する(Snowが推奨、https://stats.stackexchange.com/a/22410/231675):
さらに多くの(具体的には、3つの)独立変数を使用してシミュレーションがどのように見えるかはまだわかりません。「すべてをeta1ピースに含める必要があることを理解しています。たとえば、eta1 <-beta0 + beta1 * x1 + beta2 * x2 + beta3 * x3 ''(上記のとおり)。しかし、関数の残りのパラメーターを調整する方法はわかりません。誰かがこれを手伝ってくれますか?