Tek değişkenli lojistik regresyon için örnek büyüklüğü hesaplaması


11

Bir denek kohortunun ameliyat sırasında ölçülen tek bir sürekli değişkene sahip olacağı ve daha sonra iki yıl sonra fonksiyonel sonuç veya bozulmuş sonuç olarak sınıflandırılacak bir çalışma için gereken örneklem büyüklüğü nasıl hesaplanır.

Bu ölçümün kötü sonucu tahmin edip edemeyeceğini görmek istiyoruz. Bir noktada, sürekli değişkente, bozulmuş sonucun olasılığını azaltmak için müdahale etmeye çalışacağımız bir kesme noktası elde etmek isteyebiliriz.

Herhangi bir fikir? Herhangi bir R uygulaması.


Takip sırasında bazı düşüşler bekliyor musunuz? Modelinize dahil edilecek başka değişkenler var mı?
chl

Başparmağımdan çıkarma oranını emmeme izin verin -% 20. Gerçekten yaş, travma skoru gibi birçok değişkeni toplayacağız ama güç hesaplaması için işleri olabildiğince basit tutmak istedim. Birincil modeli ve daha sonra daha incelik ve nüans yüklü ikincil modelleri tartışmayı yararlı buluyorum.
Farrel

Tamam, ancak genellikle beklenen% düşüş, ortak değişkenlerin sayısı ve ortak değişkenlerin hatalarla ölçülüp ölçülmediği (bkz. Örneğin, j.mp/9fJkhb ) formüle girer (her durumda, örnek boyutunu artıracaktır).
chl

Yanıtlar:


7

Lojistik regresyon için örnek büyüklüğü hesaplamaları karmaşıktır. Burada özetlemeye çalışmaz. Bu soruna makul ölçüde erişilebilir çözümler bulunur:

Hsieh FY. Lojistik regresyon için örneklem büyüklüğü tabloları. Tıpta İstatistik. 1989 Temmuz; 8 (7): 795-802.

Hsieh FY ve ark. Doğrusal ve lojistik regresyon için basit bir örneklem büyüklüğü hesaplama yöntemi. Tıpta İstatistik. 30 Temmuz 1998; 17 (14): 1623-34.

Örnek hesaplamalarla ilgili sorunların erişilebilir bir tartışması Hosmer ve Lemeshow'un Uygulamalı Lojistik Regresyonunun son bölümünde (Bölüm 8.5 s. 339-347) bulunabilir .


7

Genellikle simülasyon yapmayı daha kolay ve hızlı buluyorum. Makalelerin okunması, anlaşılması ve nihayetinde ilgilendikleri özel durum için geçerli olmadıkları sonucuna varılması uzun zaman almaktadır.

Bu nedenle, sadece bir dizi konu seçerim, ilgilendiğiniz ortak değişkenin simülasyonunu yaparsınız (olacağına inandığınız gibi dağıtılır), poz verdiğin fonksiyonel forma (eş değişken? Doğrusalsızlığın eşik etkileri?) Göre iyi / kötü sonuçları simüle ederdim. tespit etmek istediğiniz minimum (klinik) anlamlı etki büyüklüğü ile sonucu analiziniz aracılığıyla yürütün ve etkinin alfanızda bulunup bulunmadığını görün. Bunu 10.000 kez tekrar çalıştırın ve simülasyonların% 80'inde (veya ihtiyacınız olan diğer güçlerde) efekti bulup bulmadığınıza bakın. Nesne sayısını ayarlayın, memnun olduğunuz bir güce sahip olana kadar tekrarlayın.

Bunun çok genel olma avantajı vardır, bu nedenle belirli bir fonksiyonel form veya belirli bir sayı veya ortak değişkenlerin dağılımı ile sınırlı değilsiniz. Bırakmaları dahil edebilirsiniz, yukarıdaki chl'nin rastgele veya eş değişkenli veya sonuçtan etkilenen yorumuna bakın. Temel olarak son örnek üzerinde yapacağınız analizi önceden kodlarsınız, bu da bazen düşüncemi çalışma tasarımına odaklamaya yardımcı olur. Ve R'de kolayca yapılır (vektörleştir!).


R'de çalışılmış bir vakanız var mı?
Farrel

1
@Farrel - Burada, [0,1] -düzgün dağılmış ortak değişkenler, ortak değişkenin birinci ve üçüncü dörtte biri ile standart normal gürültü arasında 2 veya OR = n = 100 için güce neden olan çok kısa bir senaryo. Varsayımlarıma her şeyin ne kadar duyarlı olduğunu görmek için bununla oynarım: 1000'den fazla çalışır; nn <- 100; (2010) set.seed; <- runif (nn) <1 / (1 + exp (-2 * log (2) * ortak değişken + rnorm (nn)) sonuçları <<replicate (n = run, expr = {covariate <- runif (nn); ); özet (glm (sonuç ~ ortak değişken, aile = "binom")) $ katsayılar ["ortak değişken", "Pr (> | z |)"] <.05}) kedi ("Güç:", toplam (tespitler) / çalışır, "\ n")
Stephan Kolassa

1
Daha uygun olduğunu düşünüyorsanız kodunuzu pastie ( pastebin.com ) veya Gist ( gist.github.com ) olarak ekleyebilir ve yorumunuza tekrar bağlayabilirsiniz.
chl

@chl: +1, çok teşekkürler! İşte öz
Stephan Kolassa

Büyük kod ama bir sorun var. Ben senin kadar zeki değilim. Adım adım parçalanmasına ihtiyacım var. Ben simülasyon sayısı çalışır alır mıyım? Nn nedir? Çalışmadaki denek sayısı mı? Sonra bir eş değişkenler dağılımı oluşturduğunuzu görüyorum ve bir eşik değerine bağlı olarak bir evet veya hayır belirlemelerini sağladınız.
Farrel

4

Stephan Kolassa'nın gönderisini takip ederek (bunu yorum olarak ekleyemiyorum), bir simülasyon için bazı alternatif kodlarım var. Bu aynı temel yapıyı kullanır, ancak biraz daha patlar, bu yüzden okumak biraz daha kolaydır. Ayrıca Kleinman ve Horton'un kodlarına dayanmaktadır. lojistik regresyonu simüle etmek için .

nn, örnekteki sayıdır. Değişken sürekli olarak normal şekilde dağıtılmalı ve 0 ve sd 1 olarak standartlaştırılmalıdır. Bunu oluşturmak için rnorm (nn) kullanıyoruz. Bir oran oranı seçiyoruz ve odds.ratio'da saklıyoruz. Ayrıca kesme için bir numara seçiyoruz. Bu sayının seçimi, numunenin hangi oranının "olay" yaşadığını yönetir (örn. 0.1, 0.4, 0.5). Doğru oranı elde edene kadar bu numarayla oynamalısınız. Aşağıdaki kod, 950 örnek boyutu ve 1,5 OR değeri ile 0,1 oranını verir:

nn <- 950
runs <- 10000
intercept <- log(9)
odds.ratio <- 1.5
beta <- log(odds.ratio)
proportion  <-  replicate(
              n = runs,
              expr = {
                  xtest <- rnorm(nn)
                  linpred <- intercept + (xtest * beta)
                  prob <- exp(linpred)/(1 + exp(linpred))
                  runis <- runif(length(xtest),0,1)
                  ytest <- ifelse(runis < prob,1,0)
                  prop <- length(which(ytest <= 0.5))/length(ytest)
                  }
            )
summary(proportion)

özet (oran) oranın ~ 0.1 olduğunu doğrular

Daha sonra aynı değişkenleri kullanarak, güç 10000 çalıştırmada hesaplanır:

result <-  replicate(
              n = runs,
              expr = {
                  xtest <- rnorm(nn)
                  linpred <- intercept + (xtest * beta)
                  prob <- exp(linpred)/(1 + exp(linpred))
                  runis <- runif(length(xtest),0,1)
                  ytest <- ifelse(runis < prob,1,0)
                  summary(model <- glm(ytest ~ xtest,  family = "binomial"))$coefficients[2,4] < .05
                  }
            )
print(sum(result)/runs)

Bu kodun doğru olduğunu düşünüyorum - Hsieh, 1998'de verilen örneklere göre kontrol ettim (tablo 2) ve orada verilen üç örneğe katılıyor gibi görünüyor. Ayrıca Hosmer ve Lemeshow'un p 342 - 343'teki örneğe karşı test ettim, burada 0.75'lik bir güç buldu (Hosmer ve Lemeshow'daki 0.8'e kıyasla). Bu nedenle, bazı durumlarda bu yaklaşım gücü hafife alır. Ancak, bu çevrimiçi hesap makinesinde aynı örneği çalıştırdığımda Hosmer ve Lemeshow'daki sonucu değil, benimle aynı fikirde olduğunu gördüm.

Biri bize bunun neden böyle olduğunu söyleyebilirse bilmek isterim.


Sakıncası yoksa 2 sorum var.1) Oranlama fonksiyonu sadece kesişimin doğru olması için mi? 2) ytest kullanmanın arkasındaki mantık nedir (prob'u rastgele uni draw ile karşılaştırmak)?
B_Miner

@B_Miner 1) Diğer yol - orantıyı doğru bir şekilde elde etmek için, kesmeyi doğru ayarlamanız gerekir - bu yüzden beklediğiniz oranı elde edene kadar kesmeyi ayarlayın. 2) Yestin mantığı, 0 veya 1'lik bir ikili sonuç almamız gerektiğidir. Bu nedenle, her bir numuneyi, dikotomik sonucumuzu elde etmek için homojen dağılımdan olasılık (prob) ile karşılaştırıyoruz. 'Runis' rastgele tekdüze dağılımdan alınmak zorunda değildir - bir binom veya diğer dağıtım verileriniz için daha anlamlı olabilir. Umarım bu yardımcı olur (cevaptaki gecikme için özür dilerim).
Andrew

3

θ=10:θ=0

aslında, çalışmanız sıralı bir şekilde yürütülecek gibi görünüyor. bu durumda, deneyin açık bir parçası haline getirme ödeyebilir. sıralı örnekleme genellikle sabit bir örneklem büyüklüğü denemesinden daha verimli olabilir (ortalama olarak daha az gözlem gerekir).

farrel: Yorumunuza yanıt olarak bunu ekliyorum.

örnek büyüklüğünde elde etmek için, genellikle veriler üzerinde yapılacak bir testin belirli bir alternatifinde bir tahmin [CI'nin uzunluğu gibi] VEYA gücü için bir tür kesinlik kriteri belirtilir. bu kriterlerin her ikisinden de bahsetmişsinizdir. prensipte yanlış bir şey yoktur: ilke olarak, biri istenen tahmin hassasiyetini elde etmek için - diğeri belirtilen alternatifte istenen gücü elde etmek için iki örnek boyutu hesaplaması yapmanız yeterlidir. iki numune boyutundan daha büyük olanı gereklidir. [btw -% 80 güç demekten başka - hangi testi yapmayı planladığınızdan - veya% 80 güç istediğiniz alternatiften bahsetmediniz.]

sıralı analiz kullanımında olduğu gibi: denekler çalışmaya aynı anda kaydedilmişse, sabit bir örneklem büyüklüğü mantıklıdır. ancak denekler az ve çok uzaktaysa, gerekli sayının kaydedilmesi bir veya iki [veya daha fazla] sürebilir. bu nedenle duruşma üç veya dört yıl [veya daha fazla] sürebilir. bu durumda, sıralı bir şema bundan daha erken durma imkanı sunar - eğer aradığınız etki [ler] denemede daha önce istatistiksel olarak anlamlı hale gelirse.


Kriterler, iyi ve kötü sonuç olasılığındaki% 10 fark olacaktır. Ya da lojistik regresyonu olacağından, oran oranı = 2. alfa = 0.05, güç = 80%, sürekli değişken üzerindeki toplanmış varyansın ne olduğunu henüz bilmiyorum ama standart sapmanın 7mmHg olduğunu varsayalım. Sıralı analiz iyi olurdu, ancak nihai sonuç ölçümün alınmasından iki yıl sonradır.
Farrel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.