Estoy tratando de ajustar un modelo de tiempo discreto en R, pero no estoy seguro de cómo hacerlo.
He leído que puede organizar la variable dependiente en diferentes filas, una para cada observación de tiempo, y usar la glm
función con un enlace logit o cloglog. En este sentido, tengo tres columnas: ID
, Event
(1 o 0, en cada tiempo-obs) y Time Elapsed
(desde el inicio de la observación), además de las otras covariables.
¿Cómo escribo el código para que se ajuste al modelo? ¿Cuál es la variable dependiente? Supongo que podría usar Event
como variable dependiente e incluir el Time Elapsed
en las covariables. ¿Pero qué pasa con el ID
? ¿Lo necesito?
Gracias.
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
fuente
fuente
self-study
etiqueta.)Respuestas:
Básicamente tienes razón sobre la organización de datos. Si tiene casos organizados así:
Es probable que desee reorganizar los datos para que se vean así:
Llamo a esto una conversión de un formato ancho a un formato largo. Se hace fácilmente en R usando la
reshape()
función o incluso más fácilmente con elreshape2
paquete.Personalmente, mantendría el
ID
campo para su uso potencial en la identificación de una fuente de variación en un modelo de efectos mixtos. Pero esto no es necesario (como lo señaló @BerndWeiss). Lo siguiente asume que te gustaría hacerlo. De lo contrario, ajuste un modelo similarglm(...,family=binomial)
sin los términos de efecto aleatorio.El
lme4
paquete en R se ajustará a un modelo de regresión logística de efectos mixtos similar al que está hablando, excepto con un efecto aleatorio o dos para tener en cuenta la variabilidad en los coeficientes entre los sujetos (ID
). El siguiente sería un código de ejemplo para ajustar un modelo de ejemplo si sus datos se almacenan en un marco de datos llamadodf
.Este modelo en particular permite que las
TIME
y losintercept
coeficientes que varían aleatoriamente a través de ID. En otras palabras, este es un modelo jerárquico lineal mixto de medidas anidadas en individuos.Una forma alternativa de un modelo de historial de eventos de tiempo discreto se divide
TIME
en dummies discretos y se ajusta a cada uno como parámetro. Este es esencialmente el caso discreto del modelo Cox PH porque la curva de riesgo no está restringida a ser lineal (o cuadrática, o como se pueda imaginar transformando el tiempo). SinTIME
embargo , es posible que desee agrupar en un conjunto manejable (es decir, pequeño) de períodos de tiempo discretos si hay muchos de ellos.Otras alternativas implican transformar el tiempo para obtener la curva de riesgo correcta. El método anterior básicamente lo alivia de tener que hacer esto, pero el método anterior es menos parsimonioso que este (y el caso lineal original que planteé) porque puede tener muchos puntos de tiempo y, por lo tanto, muchos parámetros molestos.
Una excelente referencia sobre este tema es el Análisis de datos longitudinales aplicados de Judith Singer y John Willet : Modelado de cambio y ocurrencia de eventos .
fuente
Singer y Willett se han publicado mucho sobre este tema. Le recomiendo que lea algunos de sus documentos . También es posible que desee obtener su libro "Análisis de datos longitudinales aplicados: cambio de modelado y ocurrencia de eventos" . Claramente uno de los mejores libros de texto en este campo.
Para la mayoría de los capítulos de libros hay un código de muestra R (ver capítulos 11ff) disponible que demuestra cómo deben estructurarse sus datos ("formato de período de persona") y cómo analizar ese tipo de datos. Para un modelo estándar de tiempo discreto, no necesita la variable ID y tampoco necesita estimar un modelo de efectos mixtos como lo sugiere @ndoogan. Un simple
glm(event ~ time + ..., family = "binomial")
funciona bien. Singer y Willett también discuten muchos temas sobre cómo modelar la variable de tiempo (lineal, cuadrática, ...)Para citar dos referencias más que recomiendo:
fuente
dynamichazard::static_glm
Este método difiere del un @ndoogan con dummies de tiempo, ya que solo obtienes una intercepción común en todos los períodos de tiempo
dynamichazard::static_glm
. Sin embargo, puede obtener una referencia ficticia para cada período llamandodynamichazard::get_survival_case_weights_and_data
con un argumentouse_weights = FALSE
, agregue el indicador ficticio de tiempo usted mismo al devueltodata.frame
y luego llame, por ejemploglm
.fuente
dynamichazard
.Esto se denomina datos de "proceso de conteo". El paquete de supervivencia tiene una muy buena función tmerge (). Es muy útil insertar covariables dependientes del tiempo o acumulativas y el tiempo de seguimiento de la partición en consecuencia. El proceso está muy bien explicado en esta viñeta.
fuente