¿Cuál es la probabilidad de este proceso?

10

Un paciente ingresa en el hospital. Su duración de estadía depende de 2 cosas: la gravedad de su lesión y cuánto está dispuesto a pagar su seguro para mantenerlos en el hospital. Algunos pacientes se irán prematuramente si su seguro decide dejar de pagar su estadía.

Suponga lo siguiente:

1) La duración de la estadía se distribuye poisson (solo suponga esto por ahora, puede o no ser una suposición realista) con el parámetro .λ

2) Varios planes de seguro cubren estadías de 7, 14 y 21 días. Muchos pacientes se irán después de 7,14, o estancias de 21 días (porque su seguro se agota y deben irse).

Si obtuviera datos de este proceso, podría tener el siguiente aspecto:

ingrese la descripción de la imagen aquí

Como puede ver, hay picos en los días 7, 14 y 21. Estos son pacientes que se van cuando termina su seguro.

Claramente, los datos se pueden modelar como una mezcla. Me está costando escribir la probabilidad de esta distribución. Es como un poisson inflado a cero, pero la inflación es de 7, 14 y 21.

¿Cuál es la probabilidad de estos datos? ¿Cuál es el proceso de pensamiento detrás de la probabilidad?

Demetri Pananos
fuente
Para comenzar, necesitaría saber las probabilidades de 7, 14 y 21 días de salida forzada.
BruceET
1
Para mí, esto suena como una mezcla de un Poisson y tres distribuciones de Poisson truncadas a la derecha (a las 7, 14 y 21). Escribirlos es otro paso completamente diferente.
Carsten
@BruceET Voy a hacer inferencia bayesiana en este modelo, así que me gustaría escribirlo en el caso más general.
Demetri Pananos

Respuestas:

9

En este caso, creo que existe un camino hacia una solución si nos ponemos nuestro sombrero de análisis de supervivencia. Tenga en cuenta que aunque este modelo no tiene sujetos censurados (en el sentido tradicional), todavía podemos usar el análisis de supervivencia y hablar sobre los peligros de los sujetos.

Necesitamos modelar tres cosas en este orden: i) el peligro acumulado, ii) el peligro, iii) la probabilidad logarítmica.

i) Haremos la parte i) en pasos. ¿Cuál es el riesgo acumulado, , de una variable aleatoria de Poisson? Para una distribución discreta, hay dos formas de definirla¹, pero usaremos la definición . Entonces, el peligro acumulativo para esH(t)H(t)=logS(t)TPoi(λ)

HT(t)=log(1Q(t,λ))=logP(t,λ)

donde es la función gamma regularizada superior e inferior respectivamente.Q,P

Ahora queremos agregar los "peligros" del seguro que se acaba. Lo bueno de los riesgos acumulativos es que son aditivos, por lo que simplemente necesitamos agregar "riesgos" en los momentos 7, 14, 21:

HT(t)=logP(t,λ)+a1(t>7)+b1(t>14)+c1(t>21)

Heurísticamente, un paciente está sujeto a un riesgo de "Poisson" de fondo, y luego a los riesgos puntuales a los 7, 14 y 21. (Debido a que este es un riesgo acumulativo , acumulamos esos riesgos puntuales, de ahí el .) no saben lo que , y son, pero vamos a ellos más adelante conectarse a nuestras probabilidades de seguro está acabando.>a,bc

En realidad, como sabemos que 21 es el límite superior y todos los pacientes son eliminados después de eso, podemos establecer que sea ​​infinito.c

HT(t)=logP(t,λ)+a1(t>7)+b1(t>14)+1(t>21)

ii) A continuación, usamos el peligro acumulado para obtener el peligro, . La fórmula para esto es:h(t)

h(t)=1exp(H(t)H(t+1))

Conectando nuestro peligro acumulativo y simplificando:

hT(t)=1P(t+1,λ)P(t,λ)exp(a1(t=7)b1(t=14)1(t=21))

iii) Finalmente, escribir el registro de probabilidad de modelos de supervivencia (sin censura) es superfácil una vez que tenemos el peligro y el peligro acumulativo:

ll(λ,a,b|t)=i=1N(logh(ti)H(ti))

¡Y ahí está!

Existen las relaciones que conectan nuestros coeficientes de riesgo puntuales y las probabilidades de la duración del seguro: .a=log(1pa),b=log(1papb)log(1pa),pc=1(pa+pb)


La prueba está en el pudín. Hagamos algunas simulaciones e inferencias utilizando la semántica del modelo personalizado de líneas de vida .

from lifelines.fitters import ParametericUnivariateFitter
from autograd_gamma import gammaincln, gammainc
from autograd import numpy as np

MAX = 1e10

class InsuranceDischargeModel(ParametericUnivariateFitter):
    """
    parameters are related by
    a = -log(1 - p_a)
    b = -log(1 - p_a - p_b) - log(1 - p_a)
    p_c = 1 - (p_a + p_b)
    """
    _fitted_parameter_names = ["lbd", "a", "b"]
    _bounds = [(0, None), (0, None), (0, None)]

    def _hazard(self, params, t):
        # from (1.64c) in http://geb.uni-giessen.de/geb/volltexte/2014/10793/pdf/RinneHorst_hazardrate_2014.pdf
        return 1 - np.exp(self._cumulative_hazard(params, t) - self._cumulative_hazard(params, t+1))

    def _cumulative_hazard(self, params, t):
        lbd, a, b = params
        return -gammaincln(t, lbd) + a * (t > 7) + b * (t > 14) + MAX * (t > 21)


def gen_data():
    p_a, p_b = 0.4, 0.2
    p = [p_a, p_b, 1 - p_a - p_b]
    lambda_ = 18
    death_without_insurance = np.random.poisson(lambda_)
    insurance_covers_until = np.random.choice([7, 14, 21], p=p)
    if death_without_insurance < insurance_covers_until:
        return death_without_insurance
    else:
        return insurance_covers_until


durations = np.array([gen_data() for _ in range(40000)])
model = InsuranceDischargeModel()
model.fit(durations)
model.print_summary(5)
"""
<lifelines.InsuranceDischargeModel: fitted with 40000 observations, 0 censored>
number of subjects = 40000
  number of events = 40000
    log-likelihood = -78845.10392
        hypothesis = lbd != 1, a != 1, b != 1

---
        coef  se(coef)  lower 0.95  upper 0.95      p  -log2(p)
lbd 18.05026   0.03353    17.98455    18.11598 <5e-06       inf
a    0.50993   0.00409     0.50191     0.51794 <5e-06       inf
b    0.40777   0.00557     0.39686     0.41868 <5e-06       inf
"""


¹ ver Sección 1.2 aquí

Cam.Davidson.Pilon
fuente