He tratado de utilizar el msm
en R para modelar un modelo de 6 estados, multi-estado de una enfermedad. Mi conjunto de datos, en total, contiene unos 22.000 sujetos, con algo más de 81k observaciones.
Tuve un lote de problemas para preparar mis datos porque mis datos eran bastante desordenados. Sin embargo, ahora que mis datos están listos, cuando ejecuto el modelo obtengo un error de desbordamiento:
MD.msm <- msm( PatientState_num ~ Years, subject=IDNumber, data = MD_Death2, qmatrix = Q2.crude, deathexact = 6)
Error in Ccall.msm(params, do.what = "lik", ...) :
numerical overflow in calculating likelihood
No puedo encontrar ningún recurso que me ayude a diagnosticar lo que está causando el desbordamiento ni cómo podría corregirlo.
El consejo más cercano que puedo encontrar es el de la página 8 de Multi-State Models for Panel Data: The msm Package for R ( https://www.jstatsoft.org/article/view/v038i08 ) afirma:
Para facilitar la convergencia, se utiliza el algoritmo de optimización cuasi-Newton "BFGS (véase la documentación de la función de R optim()), y se aumenta el número máximo de iteraciones a 10000. La -2 log-likelihood también se divide por 4000, ya que toma valores alrededor de 4000 para rangos plausibles de los parámetros. Esto garantiza que optimización tiene lugar en una escala unitaria aproximada, para evitar desbordamiento o subdesbordamiento numérico
Sin embargo, si sólo utilizo esas opciones sigo obteniendo el error de desbordamiento.
¿Alguna sugerencia?
En caso de que necesites mirar los valores iniciales crudos para las intensidades de transición son:
Q2.crude <- crudeinits.msm(PatientState_num ~ Years, IDNumber, data=MD_Death2, qmatrix=transitions_allowed)
> Q2.crude
1 2 3 4 5 6
1 -5.1078374 2.8763872 1.35671107 0.130212308 0.5666499 0.17787694
2 0.7587895 -2.4108875 0.05652063 0.583858120 0.9748396 0.03687971
3 1.0173350 1.2362397 -3.07569242 0.255661062 0.3328495 0.23360723
4 0.3807051 0.7235918 0.16135846 -1.265655417 0.0000000 0.00000000
5 0.7331575 0.4638941 0.21511807 0.004390165 -1.4941194 0.07755958
6 0.0000000 0.0000000 0.00000000 0.000000000 0.0000000 0.00000000
También si necesitas ver la tabla de estados:
statetable.msm(PatientState_num, IDNumber, data=MD_Death2)
to
from 1 2 3 4 5 6
1 73 10802 5095 489 2128 668
2 5370 12681 400 4132 6899 261
3 2491 3027 1331 626 815 572
4 151 287 64 1 0 8
5 1002 634 294 6 101 106