Estou tentando ajustar um modelo de tempo discreto no R, mas não sei como fazê-lo.
Eu li que você pode organizar a variável dependente em linhas diferentes, uma para cada observação no tempo, e usar a glm
função com um link logit ou cloglog. Neste sentido, tem três colunas: ID
, Event
(1 ou 0, em cada tempo-OBS) e Time Elapsed
(desde o início da observação), mais as outras variáveis.
Como escrevo o código para ajustar-se ao modelo? Qual é a variável dependente? Eu acho que eu poderia usar Event
como variável dependente e incluir o Time Elapsed
nas covariáveis. Mas o que acontece com o ID
? Eu preciso disso?
Obrigado.
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
fonte
fonte
self-study
tag.)Respostas:
Você está basicamente certo sobre a organização de dados. Se você tem casos organizados assim:
Você provavelmente desejará reorganizar os dados para que fiquem assim:
Eu chamo isso de conversão de um formato amplo para um formato longo. Isso é feito facilmente em R usando a
reshape()
função ou ainda mais facilmente com oreshape2
pacote.Pessoalmente, eu manteria o
ID
campo por seu uso potencial na identificação de uma fonte de variação em um modelo de efeitos mistos. Mas isso não é necessário (como apontado por @BerndWeiss). O seguinte pressupõe que você deseja fazer isso. Caso contrário, ajuste um modelo semelhanteglm(...,family=binomial)
sem os termos do efeito aleatório.O
lme4
pacote em R ajustará um modelo de regressão logística de efeitos mistos semelhante ao que você está falando, exceto com um efeito aleatório ou dois para explicar a variabilidade dos coeficientes entre os sujeitos (ID
). O exemplo a seguir seria um código de exemplo para ajustar um modelo de exemplo se seus dados forem armazenados em um quadro de dados chamadodf
.Esse modelo em particular permite que os coeficientes
TIME
e osintercept
coeficientes variem aleatoriamente através do ID. Em outras palavras, esse é um modelo linear hierárquico de medidas aninhadas em indivíduos.Uma forma alternativa de um modelo de histórico de eventos de tempo discreto divide
TIME
em manequins discretos e se encaixa em cada um como parâmetro. Este é essencialmente o caso discreto do modelo Cox PH, porque a curva de risco não se restringe a ser linear (ou quadrática, ou, no entanto, você pode imaginar o tempo de transformação). No entanto, você pode agruparTIME
em um conjunto gerenciável (por exemplo, pequeno) de períodos discretos, se houver muitos deles.Alternativas adicionais envolvem a transformação do tempo para acertar sua curva de risco. O método anterior basicamente o impede de fazer isso, mas o método anterior é menos parcimonioso do que isso (e o caso linear original que eu coloquei) porque você pode ter muitos pontos no tempo e, portanto, muitos parâmetros incômodos.
Uma excelente referência sobre esse tópico é a Análise Longitudinal de Dados Aplicada de Judith Singer e John Willet : Modelando Mudanças e Ocorrência de Eventos .
fonte
Singer e Willett foram publicados bastante sobre esse assunto. Eu recomendo que você leia alguns de seus artigos . Você também pode querer obter o livro "Análise de dados longitudinal aplicada: modelagem de alterações e ocorrência de eventos" . Claramente, um dos melhores livros didáticos nesse campo.
Para a maioria dos capítulos de livros, há um código de amostra R (consulte os capítulos 11 e seguintes) que demonstra como seus dados devem ser estruturados ("formato de período de pessoa") e como analisar esse tipo de dados. Para um modelo de tempo discreto padrão, você não precisa da variável ID e também não precisa estimar um modelo de efeitos mistos, conforme sugerido por @ndoogan. Um simples
glm(event ~ time + ..., family = "binomial")
funciona muito bem. Singer e Willett também discutem muitas questões sobre como modelar a variável de tempo (linear, quadrática, ...)Para citar mais duas referências que eu recomendo:
fonte
Você pode dividir o tempo em intervalos e executar um modelo de logit multiperiodo como em Shumway (2001) . Por exemplo, os intervalos de tempo são . Eu implementei isso em R, que é diretamente aplicável se você tiver dados iniciais em uma configuração típica de evento de parada usada na análise de sobrevivência. observe que as estatísticas t do modelo resultante não possuem a correção mencionada em Shumway (2001).(0,1],(1,2],…
dynamichazard::static_glm
Esse método difere do @ndoogan com manequins de tempo, pois você só recebe uma interceptação comum em todos os períodos de tempo
dynamichazard::static_glm
. Você pode, contudo, obter um manequim para cada período chamandodynamichazard::get_survival_case_weights_and_data
com o argumentouse_weights = FALSE
, adicione o indicador manequim tempo a si mesmo para o retornoudata.frame
e depois chamar por exemploglm
.fonte
dynamichazard
.Isso é chamado de dados do "processo de contagem". O pacote de sobrevivência tem uma função tmerge () muito boa. É muito útil inserir covariáveis dependentes do tempo ou cumulativas e dividir o tempo de acompanhamento de acordo. O processo está muito bem explicado nesta vinheta
fonte