Zeitdiskretes Ereignisverlaufsmodell (Überlebensmodell) in R.

10

Ich versuche, ein zeitdiskretes Modell in R einzubauen, bin mir aber nicht sicher, wie ich das machen soll.

Ich habe gelesen, dass Sie die abhängige Variable in verschiedenen Zeilen organisieren können, eine für jede glmZeitbeobachtung , und die Funktion mit einem Logit- oder Cloglog-Link verwenden können. In diesem Sinne, ich habe drei Spalten: ID, Event(1 oder 0, in jeder Zeit obs) und Time Elapsed(seit Beginn der Beobachtung), sowie die anderen Kovariaten.

Wie schreibe ich den Code passend zum Modell? Welches ist die abhängige Variable? Ich denke, ich könnte Eventals abhängige Variable verwenden und die Time Elapsedin die Kovariaten aufnehmen. Aber was passiert mit dem ID? Brauche ich es

Vielen Dank.

Fran Villamil
quelle
Wenn Sie sagen "Ich versuche, ein diskretes Zeitmodell anzupassen" ... welches Modell möchten Sie anpassen? (Wenn dies für ein Thema ist, fügen Sie bitte das self-studyTag hinzu.)
Glen_b -Reinstate Monica
Ich möchte ein zeitdiskretes Logit-Überlebensmodell anpassen.
Fran Villamil
1
Es ist unwahrscheinlich, dass die ID relevant ist, aber es hängt davon ab, was, genau sie darstellt und ob Sie dies modellieren möchten.
Glen_b -Rate State Monica

Antworten:

8

Sie haben im Grunde Recht mit der Datenorganisation. Wenn Sie Fälle wie folgt organisiert haben:

ID M1 M2 M3 EVENT

Möglicherweise möchten Sie die Daten so neu organisieren, dass sie folgendermaßen aussehen:

ID TIME EVENT
1  1    0
1  2    1
1  3    1
2  1    0
2  2    0
.  .    .
.  .    .

Ich nenne das eine Konvertierung von einem Breitformat in ein Langformat. Dies geschieht einfach in R mit der reshape()Funktion oder noch einfacher mit dem reshape2Paket.

Ich persönlich würde das IDFeld für seine mögliche Verwendung bei der Identifizierung einer Variationsquelle in einem Modell mit gemischten Effekten behalten . Dies ist jedoch nicht erforderlich (wie von @BerndWeiss hervorgehoben). Im Folgenden wird davon ausgegangen, dass Sie dies möchten. Wenn nicht, passen Sie ein ähnliches Modell mit glm(...,family=binomial)ohne die zufälligen Effektterme an.

Das lme4Paket in R passt zu einem logistischen Regressionsmodell mit gemischten Effekten, das dem Modell ähnelt, von dem Sie sprechen, außer mit ein oder zwei zufälligen Effekten, um die Variabilität der Koeffizienten zwischen den Subjekten zu berücksichtigen ( ID). Das Folgende wäre ein Beispielcode zum Anpassen eines Beispielmodells, wenn Ihre Daten in einem aufgerufenen Datenrahmen gespeichert sind df.

require(lme4)
ans <- glmer(EVENT ~ TIME + (1+TIME|ID), data=df, family=binomial)

Dieses spezielle Modell ermöglicht es, dass die TIMEund die interceptKoeffizienten über die ID zufällig variieren. Mit anderen Worten, dies ist ein hierarchisches lineares gemischtes Modell von Messungen, die in Individuen verschachtelt sind.

Eine alternative Form eines diskreten Zeitereignisverlaufsmodells zerfällt TIMEin diskrete Dummies und passt jeweils als Parameter an. Dies ist im Wesentlichen der diskrete Fall des Cox-PH-Modells, da die Gefahrenkurve nicht darauf beschränkt ist, linear (oder quadratisch, oder wie auch immer Sie sich eine Transformationszeit vorstellen können) zu sein. Möglicherweise möchten Sie jedoch TIMEeine überschaubare Gruppe (dh kleine) diskreter Zeiträume gruppieren , wenn viele vorhanden sind.

Weitere Alternativen sind die Transformation der Zeit, um Ihre Gefahrenkurve richtig zu machen. Die vorherige Methode erspart Ihnen dies grundsätzlich, aber die vorherige Methode ist weniger sparsam als diese (und der ursprüngliche lineare Fall, den ich gestellt habe), da Sie möglicherweise viele Zeitpunkte und damit viele Störparameter haben.

Eine hervorragende Referenz zu diesem Thema ist die angewandte Längsschnittdatenanalyse von Judith Singer und John Willet : Modellierung von Veränderungen und Ereignisereignissen .

ndoogan
quelle
4
Sie benötigen kein "logistisches Regressionsmodell mit gemischten Effekten", um ein einfaches zeitdiskretes Modell abzuschätzen (Fiona Steel hat einige Artikel zum Thema " Mehrstufige zeitdiskrete Ereignisverlaufsanalyse " veröffentlicht). Haben Sie eine Referenz? In Bezug auf den Datenvorbereitungsschritt empfehle ich auch einen Blick auf die SurvSplit- Funktion.
Bernd Weiss
6

Singer und Willett wurden viel zu diesem Thema veröffentlicht. Ich empfehle Ihnen dringend, einige ihrer Artikel zu lesen . Vielleicht möchten Sie auch das Buch "Angewandte Längsschnittdatenanalyse: Modellierung von Änderungen und Ereignisereignissen" erhalten . Offensichtlich eines der besten Lehrbücher auf diesem Gebiet.

Für die meisten Buchkapitel steht R-Beispielcode (siehe Kapitel 11ff) zur Verfügung, der zeigt, wie Ihre Daten strukturiert werden müssen ("Personenperiodenformat") und wie diese Art von Daten analysiert werden. Für ein zeitdiskretes Standardmodell benötigen Sie die ID-Variable nicht und Sie müssen auch kein Modell mit gemischten Effekten schätzen, wie von @ndoogan vorgeschlagen. Ein einfaches glm(event ~ time + ..., family = "binomial")funktioniert gut. Singer und Willett diskutieren auch viele Fragen zur Modellierung der Zeitvariablen (linear, quadratisch, ...)

Um zwei weitere Referenzen zu zitieren, die ich sehr empfehlen kann:

Bernd Weiss
quelle
1

Sie können die Zeit in Intervalle unterteilen und ein Multiperioden-Logit-Modell wie in Shumway (2001) durchführen . Zum Beispiel sind Ihre Zeitintervalle . Ich habe dies in R implementiert, was direkt anwendbar ist, wenn Sie Anfangsdaten in einem typischen Stopp-Ereignis-Setup haben, das in der Überlebensanalyse verwendet wird Beachten Sie, dass die t-Statistiken des resultierenden Modells nicht die in Shumway (2001) erwähnte Korrektur aufweisen.(0,1],(1,2],dynamichazard::static_glm

Diese Methode unterscheidet sich von der Methode @ndoogan mit Zeitattrappen, da Sie in allen Zeiträumen mit nur einen gemeinsamen Abschnitt erhalten dynamichazard::static_glm. Sie können jedoch für jeden Zeitraum einen Dummy erhalten, indem Sie dynamichazard::get_survival_case_weights_and_datamit Argument aufrufen use_weights = FALSE, den Zeit-Dummy-Indikator selbst zum zurückgegebenen hinzufügen data.frameund dann z glm.

Benjamin Christoffersen
quelle
Außerdem könnte Sie diese Vignette in meinem Paket interessieren dynamichazard.
Benjamin Christoffersen
0

Dies wird als "Zählprozess" -Daten bezeichnet. Das Überlebenspaket hat eine sehr schöne tmerge () Funktion. Es ist sehr nützlich, zeitabhängige oder kumulative Kovariaten einzufügen und die Partitionsverfolgungszeit entsprechend zu bestimmen. Der Vorgang wird in dieser Vignette sehr gut erklärt

Koray
quelle