Berechnung der Stichprobengröße für univariate logistische Regression

11

Wie berechnet man die Stichprobengröße, die für eine Studie benötigt wird, in der eine Kohorte von Probanden zum Zeitpunkt einer Operation eine einzige kontinuierliche Variable misst und diese zwei Jahre später als funktionelles Ergebnis oder beeinträchtigtes Ergebnis klassifiziert wird?

Wir würden gerne sehen, ob diese Messung das schlechte Ergebnis hätte vorhersagen können. Irgendwann möchten wir vielleicht einen Schnittpunkt in der kontinuierlichen Variablen ableiten, über dem wir versuchen würden, einzugreifen, um die Wahrscheinlichkeit des beeinträchtigten Ergebnisses zu verringern.

Irgendwelche Ideen? Beliebige R-Implementierung.

Farrel
quelle
Erwarten Sie während der Nachsorge einige Aussetzer? Gibt es andere Kovariaten, die in Ihr Modell aufgenommen werden sollen?
Chl
Lassen Sie mich eine Abbrecherquote aus meinem Daumen saugen - 20%. Wir werden in der Tat viele Variablen sammeln, zum Beispiel Alter, Trauma-Score, aber ich wollte die Dinge für die Leistungsberechnung so einfach wie möglich halten. Ich habe es oft nützlich gefunden, ein primäres Modell und dann sekundäre Modelle zu diskutieren, die mit mehr Finesse und Nuance geladen sind.
Farrel
Ok, aber normalerweise geben Sie den erwarteten prozentualen Ausfall, die Anzahl der Kovariaten und die Frage, ob Kovariaten mit Fehlern gemessen werden (siehe z. B. j.mp/9fJkhb ), in die Formel ein (in jedem Fall wird die Stichprobengröße erhöht).
Chl

Antworten:

7

Stichprobengrößenberechnungen für die logistische Regression sind komplex. Ich werde nicht versuchen, es hier zusammenzufassen. Angemessen zugängliche Lösungen für dieses Problem finden Sie in:

Hsieh FY. Stichprobengrößentabellen für die logistische Regression. Statistik in der Medizin. 1989 Jul; 8 (7): 795 & ndash; 802.

Hsieh FY et al. Eine einfache Methode zur Berechnung der Stichprobengröße für die lineare und logistische Regression. Statistik in der Medizin. 1998, 30. Juli; 17 (14): 1623–34.

Eine leicht zugängliche Diskussion der Probleme mit Beispielberechnungen finden Sie im letzten Kapitel (Abschnitt 8.5, S. 339-347) von Hosmer & Lemeshows Applied Logistic Regression .

Thylacoleo
quelle
7

Normalerweise finde ich es einfacher und schneller, eine Simulation durchzuführen. Es dauert lange, bis Papiere gelesen, verstanden und schließlich zu dem Schluss kommen, dass sie in dem speziellen Fall, an dem sie interessiert sind, nicht zutreffen.

Daher würde ich einfach eine Reihe von Themen auswählen, die Kovariate simulieren, an der Sie interessiert sind (verteilt, wie Sie glauben), gute / schlechte Ergebnisse basierend auf der von Ihnen postulierten funktionalen Form simulieren (Schwelleneffekte der Kovariate? Nichtlinearität?). Führen Sie mit der minimalen (klinisch) signifikanten Effektgröße, die Sie erkennen möchten, das Ergebnis durch Ihre Analyse und prüfen Sie, ob der Effekt bei Ihrem Alpha gefunden wird. Führen Sie dies 10.000 Mal durch und prüfen Sie, ob Sie den Effekt in 80% der Simulationen gefunden haben (oder welche andere Leistung Sie auch benötigen). Passen Sie die Anzahl der Motive an und wiederholen Sie den Vorgang, bis Sie eine Kraft haben, mit der Sie zufrieden sind.

Dies hat den Vorteil, dass es sehr allgemein gehalten ist, sodass Sie nicht auf eine bestimmte funktionale Form oder eine bestimmte Anzahl oder Verteilung von Kovariaten beschränkt sind. Sie können Aussetzer einschließen, siehe den obigen Kommentar von chl, entweder zufällig oder beeinflusst durch Kovariate oder Ergebnis. Grundsätzlich codieren Sie die Analyse, die Sie für die endgültige Stichprobe durchführen möchten, im Voraus, was mir manchmal hilft, mich auf das Studiendesign zu konzentrieren. Und es ist einfach in R (Vektorisieren!).

Stephan Kolassa
quelle
Haben Sie einen Fall in R bearbeitet?
Farrel
1
@Farrel - hier ist ein sehr kurzes Skript, das [0,1] -gleichmäßig verteilte Kovariaten annimmt, einen OR von 2 zwischen dem ersten und dritten Quartil der Kovariate und normales Standardrauschen, was zu einer Leistung von 0,34 für n = 100 führt. Ich würde damit herumspielen, um zu sehen, wie empfindlich alles für meine Annahmen ist: Läufe <- 1000; nn <- 100; set.seed (2010); Erkennungen <- replizieren (n = Läufe, Ausdruck = {Kovariate <- Runif (nn); Ergebnis <- Runif (nn) <1 / (1 + exp (-2 * log (2) * Kovariate + rnorm (nn)) ); Zusammenfassung (glm (Ergebnis ~ Kovariate, Familie = "Binomial")) $ Koeffizienten ["Kovariate", "Pr (> | z |)"] <.05}) Katze ("Potenz:", Summe (Detektionen) / läuft, "\ n")
Stephan Kolassa
1
Sie können den Code als pastie (Anfügen pastebin.com ) oder ein Gist ( gist.github.com ) , wenn Sie das Gefühl , es ist bequemer, und Link zurück , um es in Ihrem Kommentar.
Chl
@chl: +1, vielen Dank! Hier ist das Wesentliche: gist.github.com/607968
Stephan Kolassa
Toller Code, aber es gibt ein Problem. Ich bin nicht so schlau wie du. Ich muss es schrittweise abbauen. Ich nehme an, es läuft die Anzahl der Simulationen? Was ist nn? Ist es die Anzahl der Probanden in der Studie? Dann haben Sie eine Verteilung von Kovariaten erstellt und sie je nach Schwellenwert ein Ja oder Nein bestimmen lassen.
Farrel
4

Nach dem Beitrag von Stephan Kolassa (ich kann dies nicht als Kommentar hinzufügen) habe ich einen alternativen Code für eine Simulation. Dies verwendet dieselbe Grundstruktur, ist jedoch etwas mehr explodiert, sodass es möglicherweise etwas einfacher zu lesen ist. Es basiert auch auf dem Code von Kleinman und Horton , um die logistische Regression zu simulieren.

nn ist die Nummer in der Stichprobe. Die Kovariate sollte kontinuierlich normalverteilt und standardisiert sein, um 0 und sd 1 zu bedeuten. Wir verwenden rnorm (nn), um dies zu erzeugen. Wir wählen ein Quotenverhältnis aus und speichern es im Verhältnis ungerade. Wir wählen auch eine Nummer für den Achsenabschnitt. Die Wahl dieser Zahl bestimmt, welcher Anteil der Stichprobe das "Ereignis" erfährt (z. B. 0,1, 0,4, 0,5). Sie müssen mit dieser Zahl herumspielen, bis Sie das richtige Verhältnis erhalten. Der folgende Code gibt Ihnen einen Anteil von 0,1 mit einer Stichprobengröße von 950 und einem OR von 1,5:

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)

Zusammenfassung (Anteil) bestätigt, dass der Anteil ~ 0,1 beträgt

Dann wird unter Verwendung der gleichen Variablen die Leistung über 10000 Läufe berechnet:

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)

Ich denke, dass dieser Code korrekt ist - ich habe ihn mit den Beispielen in Hsieh, 1998 (Tabelle 2) verglichen, und er scheint mit den drei dort angegebenen Beispielen übereinzustimmen. Ich habe es auch anhand des Beispiels auf S. 342 - 343 von Hosmer und Lemeshow getestet, wo es eine Potenz von 0,75 fand (im Vergleich zu 0,8 in Hosmer und Lemeshow). Es kann also sein, dass dieser Ansatz unter bestimmten Umständen die Macht unterschätzt. Wenn ich jedoch dasselbe Beispiel in diesem Online-Rechner ausgeführt habe , habe ich festgestellt, dass es mit mir übereinstimmt und nicht das Ergebnis in Hosmer und Lemeshow.

Wenn uns jemand sagen kann, warum dies der Fall ist, würde mich das interessieren.

Andrew
quelle
Ich habe 2 Fragen, wenn Sie nichts dagegen haben.1) Ist die Proportionsfunktion einfach, um den Achsenabschnitt richtig zu machen? 2) Welche Logik steckt hinter der Verwendung von ytest (Vergleich von prob mit einem zufälligen Uni-Draw)?
B_Miner
@B_Miner 1) Umgekehrt - um das Verhältnis richtig zu machen, müssen Sie den Achsenabschnitt richtig einstellen - passen Sie den Achsenabschnitt an, bis Sie das Verhältnis erhalten, das Sie erwarten. 2) Die Logik von ytest ist, dass wir ein dichotomes 0- oder 1-Ergebnis erhalten müssen. Also vergleichen wir jede Stichprobe von der gleichmäßigen Verteilung mit der Wahrscheinlichkeit (prob), um unser dichotomes Ergebnis zu erhalten. Die 'Runis' müssen nicht aus der zufälligen Gleichverteilung gezogen werden - ein Binomial oder eine andere Verteilung kann für Ihre Daten sinnvoller sein. Hoffe das hilft (sorry für die Verzögerung bei der Antwort).
Andrew
3

Eine einfache Frage zur Stichprobengröße lautet: Wie groß ist eine Stichprobe, um ein 95% -Konfidenzintervall von nicht mehr als 2d für den [unbekannten] Mittelwert der Datenverteilung zu erhalten? Eine andere Variante ist: Wie groß ist eine Probe, um eine Leistung von 0,9 bei wenn H getestet wird . Sie scheinen kein Kriterium für die Auswahl einer Stichprobengröße anzugeben.0 : θ = 0θ=10:θ=0

Eigentlich klingt es so, als würde Ihre Studie sequentiell durchgeführt. In diesem Fall kann es sich lohnen, dies zu einem expliziten Teil des Experiments zu machen. Die sequentielle Probenahme kann häufig effizienter sein als ein Experiment mit fester Probengröße [durchschnittlich weniger Beobachtungen erforderlich].

Farrel: Ich füge dies als Antwort auf Ihren Kommentar hinzu.

Um eine Stichprobengröße zu erhalten, gibt man normalerweise eine Art Präzisionskriterium für eine Schätzung [wie die Länge eines CI] ODER eine Leistung bei einer bestimmten Alternative eines Tests an, der an den Daten durchgeführt werden soll. Sie scheinen beide Kriterien erwähnt zu haben. Daran ist im Prinzip nichts auszusetzen: Sie müssen dann nur zwei Stichprobengrößenberechnungen durchführen - eine, um die gewünschte Schätzgenauigkeit zu erreichen - und eine andere, um die gewünschte Leistung bei der angegebenen Alternative zu erhalten. dann ist die größere der beiden Stichprobengrößen erforderlich. [Übrigens - abgesehen von 80% Leistung - scheinen Sie nicht erwähnt zu haben, welchen Test Sie durchführen möchten - oder welche Alternative Sie für 80% Leistung wünschen.]

Was die Verwendung der sequentiellen Analyse betrifft: Wenn alle Probanden gleichzeitig in die Studie aufgenommen werden, ist eine feste Stichprobengröße sinnvoll. Wenn es jedoch nur wenige Fächer gibt, kann es ein oder zwei Jahre dauern, bis die erforderliche Anzahl eingeschrieben ist. somit könnte der Prozess drei oder vier Jahre [oder länger] dauern. In diesem Fall bietet ein sequentielles Schema die Möglichkeit, früher zu stoppen - wenn die gewünschten Effekte zu Beginn der Studie statistisch signifikant werden.

Ronaf
quelle
Kriterien sind 10% Unterschied in der Wahrscheinlichkeit eines guten oder schlechten Ergebnisses. Oder sagen wir, da es sich um eine logistische Regression handelt, Odds Ratio = 2. Alpha = 0,05, Potenz = 80%, weiß ich noch nicht, wie hoch die gepoolte Varianz der kontinuierlichen Variablen ist, aber nehmen wir an, dass die Standardabweichung 7 mmHg beträgt. Eine sequentielle Analyse wäre gut, aber das Endergebnis ist zwei Jahre nach der Messung.
Farrel