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ć glm
funkcji 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ć Event
jako zmiennej zależnej i uwzględnić Time Elapsed
zmienne towarzyszące. Ale co się dzieje z ID
? Czy potrzebuję tego?
Dzięki.
r
survival
pca
sas
matlab
neural-networks
r
logistic
spatial
spatial-interaction-model
r
time-series
econometrics
var
statistical-significance
t-test
cross-validation
sample-size
r
regression
optimization
least-squares
constrained-regression
nonparametric
ordinal-data
wilcoxon-signed-rank
references
neural-networks
jags
bugs
hierarchical-bayesian
gaussian-mixture
r
regression
svm
predictive-models
libsvm
scikit-learn
probability
self-study
stata
sample-size
spss
wilcoxon-mann-whitney
survey
ordinal-data
likert
group-differences
r
regression
anova
mathematical-statistics
normal-distribution
random-generation
truncation
repeated-measures
variance
variability
distributions
random-generation
uniform
regression
r
generalized-linear-model
goodness-of-fit
data-visualization
r
time-series
arima
autoregressive
confidence-interval
r
time-series
arima
autocorrelation
seasonality
hypothesis-testing
bayesian
frequentist
uninformative-prior
correlation
matlab
cross-correlation
Fran Villamil
źródło
źródło
self-study
tag.)Odpowiedzi:
Masz rację w kwestii organizacji danych. Jeśli masz takie sprawy zorganizowane:
Prawdopodobnie będziesz chciał zreorganizować dane, aby wyglądały następująco:
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 zreshape2
pakietem.Osobiście zatrzymałbym
ID
pole 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 modelglm(...,family=binomial)
bez warunków losowego efektu.lme4
Pakiet 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 nazwiedf
.Ten konkretny model pozwala na losowe zmienianie współczynników
TIME
i wintercept
zależ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ę
TIME
na 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ćTIME
w 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 .
źródło
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:
źródło
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_glm
R, 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ącdynamichazard::get_survival_case_weights_and_data
z argumentemuse_weights = FALSE
, dodaj wskaźnik manekina czasu do zwracanego,data.frame
a następnie wywołaj npglm
.źródło
dynamichazard
.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
źródło