Model historii zdarzeń dyskretnych (przeżycie) w R.

10

Próbuję dopasować model czasu dyskretnego do R, ale nie jestem pewien, jak to zrobić.

Czytałem, że możesz zorganizować zmienną zależną w różnych wierszach, po jednym dla każdej obserwacji czasu, i użyć glmfunkcji z łączem logit lub cloglog. W tym sensie, mam trzy kolumny: ID, Event(1 lub 0, w każdym okresie czasu OB) oraz Time Elapsed(od początku obserwacji), a także innych zmiennych towarzyszących.

Jak napisać kod pasujący do modelu? Jaka jest zmienna zależna? Chyba mógłbym użyć Eventjako zmiennej zależnej i uwzględnić Time Elapsedzmienne towarzyszące. Ale co się dzieje z ID? Czy potrzebuję tego?

Dzięki.

Fran Villamil
źródło
Kiedy mówisz „Próbuję dopasować dyskretny model czasowy” ... jaki model chcesz dopasować? (Jeśli dotyczy to jakiegoś tematu, proszę dodać self-studytag.)
Glen_b
Chcę dopasować logitowy model przetrwania w dyskretnym czasie.
Fran Villamil,
1
Wydaje się mało prawdopodobne, aby identyfikator był istotny, ale zależy to od tego, co dokładnie reprezentuje i czy to jest coś, co chcesz wymodelować.
Glen_b

Odpowiedzi:

8

Masz rację w kwestii organizacji danych. Jeśli masz takie sprawy zorganizowane:

ID M1 M2 M3 EVENT

Prawdopodobnie będziesz chciał zreorganizować dane, aby wyglądały następująco:

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

Nazywam to konwersją z dużego formatu na długi. Można to łatwo zrobić w R, używając reshape()funkcji lub jeszcze łatwiej z reshape2pakietem.

Osobiście zatrzymałbym IDpole do jego potencjalnego zastosowania w identyfikacji źródła zmienności w modelu efektów mieszanych. Ale nie jest to konieczne (jak wskazał @BerndWeiss). Poniżej założono, że chcesz to zrobić. Jeśli nie, dopasuj podobny model glm(...,family=binomial)bez warunków losowego efektu.

lme4Pakiet w R zmieści się efektów mieszanych model regresji logistycznej podobny do tego mówisz, z wyjątkiem efektu losowego lub dwa, aby uwagę zmienności współczynników całej przedmiotów ( ID). Oto przykładowy kod do dopasowania przykładowego modelu, jeśli dane są przechowywane w ramce danych o nazwie df.

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

Ten konkretny model pozwala na losowe zmienianie współczynników TIMEi w interceptzależności od ID. Innymi słowy, jest to hierarchiczny liniowy mieszany model pomiarów zagnieżdżonych w osobnikach.

Alternatywna forma dyskretnego modelu historii zdarzeń czasowych dzieli się TIMEna dyskretne manekiny i pasuje do każdego z nich jako parametr. Jest to w zasadzie dyskretny przypadek modelu PH Coxa, ponieważ krzywa ryzyka nie jest ograniczona do liniowości (lub kwadratu, lub jakkolwiek można sobie wyobrazić czas transformacji). Chociaż możesz zgrupować TIMEw zarządzalny zbiór (tj. Mały) dyskretnych przedziałów czasowych, jeśli jest ich dużo.

Kolejne alternatywy obejmują przekształcanie czasu w celu uzyskania właściwej krzywej zagrożenia. Poprzednia metoda zasadniczo zwalnia cię z konieczności robienia tego, ale poprzednia metoda jest mniej oszczędna niż ta (i oryginalny liniowy przypadek, który przedstawiłem), ponieważ możesz mieć wiele punktów czasowych, a tym samym wiele uciążliwych parametrów.

Doskonałym odniesieniem na ten temat jest Judith Singer's and John Willet's Applied Longitudinal Data Analysis: Modeling Change and Event Event .

ndoogan
źródło
4
Nie potrzebujesz „modelu regresji logistycznej z efektami mieszanymi”, aby oszacować prosty model czasu dyskretnego (Fiona Steel opublikowała kilka artykułów na temat „ Wielopoziomowej analizy historii zdarzeń dyskretnych ”). Czy masz referencje? Jeśli chodzi o etap przygotowania danych, proponuję również przyjrzeć się funkcji survSplit .
Bernd Weiss,
6

Singer i Willett opublikowali wiele na ten temat. Gorąco polecam przeczytanie niektórych ich artykułów . Możesz także chcieć zdobyć ich książkę „Applied Longitudinal Data Analysis: Modeling Change and Event Event” . Oczywiście jeden z najlepszych podręczników w tej dziedzinie.

W przypadku większości rozdziałów książek dostępny jest przykładowy kod R (patrz rozdziały 11 i następne), który pokazuje, w jaki sposób należy uporządkować dane („format osobowy”) i jak analizować tego rodzaju dane. W przypadku standardowego modelu czasu dyskretnego nie potrzebujesz zmiennej ID, a także nie musisz szacować modelu efektów mieszanych, jak sugeruje @ndoogan. Prosty glm(event ~ time + ..., family = "binomial")działa dobrze. Singer i Willett omawiają również wiele zagadnień dotyczących modelowania zmiennej czasowej (liniowa, kwadratowa, ...)

Cytując dwa kolejne referencje, które bardzo polecam:

Bernd Weiss
źródło
1

Możesz podzielić czas na przedziały i wykonać model logowania wielopunktowego, jak w Shumway (2001) . Na przykład, przedziały czasowe są(0,1],(1,2],. Zaimplementowałem to w dynamichazard::static_glmR, co ma bezpośrednie zastosowanie, jeśli masz dane początkowe w typowej konfiguracji zatrzymania zdarzenia stosowanej w analizie przeżycia. Zauważ, że statystyki t z powstałego modelu nie mają korekty wspomnianej w Shumway (2001).

Ta metoda różni się od metody @ndoogan z manekinami czasowymi, ponieważ otrzymujesz tylko jeden wspólny punkt przechwytywania we wszystkich okresach czasu dynamichazard::static_glm. Możesz jednak zdobyć manekina na każdy okres, dzwoniąc dynamichazard::get_survival_case_weights_and_dataz argumentem use_weights = FALSE, dodaj wskaźnik manekina czasu do zwracanego, data.framea następnie wywołaj np glm.

Benjamin Christoffersen
źródło
Ponadto może zainteresować Cię ta winieta w moim opakowaniu dynamichazard.
Benjamin Christoffersen
0

Nazywa się to danymi z procesu liczenia. Pakiet Survival ma bardzo fajną funkcję tmerge (). Bardzo przydatne jest odpowiednie wstawianie współzmiennych zależnych od czasu lub kumulatywnych i odpowiednio czas śledzenia partycji. Proces ten jest bardzo dobrze wyjaśniony w tej winiecie

Koray
źródło