Ordinal lojistik regresyon için güç analizi yapacak bir program (R veya SAS veya bağımsız veya ücretsiz veya düşük maliyetli ise) arıyorum.
Ordinal lojistik regresyon için güç analizi yapacak bir program (R veya SAS veya bağımsız veya ücretsiz veya düşük maliyetli ise) arıyorum.
Yanıtlar:
Simülasyon ile temellerin ötesinde güç analizleri yapmayı tercih ederim. Hazır paketlerle, hangi varsayımların yapıldığından asla emin olamıyorum.
Güç simülasyonu, R kullanarak oldukça basittir (ve uygun fiyatlı).
replicate
Bu kodu birkaç kez yukarıdan çalıştırmak için işlevi kullanın (ne kadar sürdüğüne dair bir fikir edinmek ve doğru genel alanı elde etmek için genellikle yaklaşık 100 kez başlıyorum, sonra 1000 ve bazen 10.000 veya 100.000'e kadar kullanacağım son değerler). Sıfır hipotezini reddettiğinizin oranı güçtür.Sıralı regresyon ile basit bir örnek:
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
.
replicate
işlevde değil ve değiştirmiyor. İşlev bir yineleme için p değerini (uygun $ istatistiklerinde [5] olan) döndürür, çoğaltma işlevi 1.000 kez (veya belirttiğiniz herhangi bir sayı) çalıştırır ve 1.000 p değerini döndürür, mean
işlev daha sonra değerinde null değerini reddeden sınamalar .
Snow'un cevabına başka bir şey daha ekleyeceğim (ve bu simülasyon yoluyla herhangi bir güç analizi için geçerlidir) - 1 veya 2 kuyruklu bir test mi arıyorsunuz? G * Power gibi popüler programlar varsayılan olarak 1 kuyruklu testtir ve simülasyonlarınızın bunlarla eşleşip eşleşmediğini görmeye çalışıyorsanız (bunu nasıl yapacağınızı öğrenirken her zaman iyi bir fikir), önce bunu kontrol etmek isteyeceksiniz.
Snow'un 1 kuyruklu bir testi çalıştırmasını sağlamak için, işlev girişlerine "kuyruk" adlı bir parametre ekler ve işlevin kendisine böyle bir şey koyarım:
#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
1 kuyruklu versiyon temel olarak katsayının pozitif olup olmadığını kontrol eder ve sonra p değerini yarıya indirir.
Snow'un mükemmel örneğinin yanı sıra, etkisi olan mevcut bir veri kümesinden yeniden örnekleyerek bir güç simülasyonu yapabileceğinize inanıyorum. Tam olarak bir bootstrap değil, aynı n yerine ancak aynı fikri değiştirerek örneklemiyorsunuz .
İşte bir örnek: Olumlu bir nokta tahminine dönüşen küçük bir kendi kendine deney yaptım, ancak küçük olduğu için sıralı lojistik regresyonda neredeyse istatistiksel olarak anlamlı değildi. Bu nokta tahminiyle, ne kadar büyük bir n'ye ihtiyacım olacak? Çeşitli olası n için , birçok kez bir veri kümesi oluşturdum ve sıralı lojistik regresyonu çalıştırdım ve p- değerinin ne kadar küçük olduğunu gördüm :
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)))
}
Çıktı ile (benim için):
[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
Bu durumda, n = 600'de güç% 32 idi. Çok cesaret verici değil.
(Simülasyon yaklaşımım yanlışsa, lütfen biri bana söyle. Klinik araştırmaları planlamak için güç simülasyonunu tartışan birkaç tıbbi makaleye gidiyorum, ancak kesin uygulamamdan hiç emin değilim.)
İlk simülasyona atıfta bulunarak (Snow tarafından önerilen; /stats//a/22410/231675 ):
Simülasyonun daha fazla (özellikle üç) bağımsız değişkenle nasıl görünmesi gerektiğinden hala emin değilim. Hepsini eta1 parçasına eklemem gerektiğini anlıyorum, örneğin eta1 <- beta0 + beta1 * x1 + beta2 * x2 + beta3 * x3 '' (yukarıda belirtildiği gibi). Fakat fonksiyondaki diğer parametrelerin nasıl ayarlanacağını bilmiyorum. Birisi bana bu konuda yardımcı olabilir mi?