Cómo simular datos censurados

11

Me pregunto cómo puedo simular una muestra de n vidas de distribución de Weibull que incluya observaciones censuradas a la derecha de Tipo I. Por ejemplo, tengamos n = 3, forma = 3, escala = 1 y la tasa de censura = .15, y el tiempo de censura = .88. Sé cómo generar una muestra de Weibull pero no sé cómo generar datos censurados que tengan el tipo I censurado a la derecha en R.

T = rweibull(3, shape=.5, scale=1)
Emeli
fuente

Respuestas:

11

(Como cuestión de R estilo de codificación, es mejor no usar T como nombre de variable, porque es un alias para TRUE, y esa práctica inevitablemente conducirá a problemas).


Tu pregunta es algo ambigua; Hay varias formas de interpretarlo. Pasemos por ellos:

  1. Usted estipula que desea simular la censura tipo 1 . Por lo general, se considera que el experimento se realiza durante un período de tiempo y que cualquier unidad de estudio que no haya tenido el evento para entonces está censurada. Si eso es lo que quiso decir, entonces no es (necesariamente) posible estipular los parámetros de forma y escala, y el tiempo y la tasa de censura simultáneamente. Habiendo estipulado tres, el último está necesariamente arreglado.

    (Intentando) resolver el parámetro de forma:
    esto falla; parece que es imposible tener una tasa de censura del 15% en un tiempo de censura de .88 con una distribución de Weibull donde el parámetro de escala se mantiene en 1, sin importar cuál sea el parámetro de forma.

    optim(.5, fn=function(shp){(pweibull(.88, shape=shp, scale=1, lower.tail=F)-.15)^2})
    # $par
    # [1] 4.768372e-08
    # ...
    # There were 46 warnings (use warnings() to see them)
    pweibull(.88, shape=4.768372e-08, scale=1, lower.tail=F)
    # [1] 0.3678794
    
    optim(.5, fn=function(shp){(pweibull(.88, shape=shp, scale=1, lower.tail=F)-.15)^2},
          control=list(reltol=1e-16))
    # $par
    # [1] 9.769963e-16
    # ...
    # There were 50 or more warnings (use warnings() to see the first 50)
    pweibull(.88, shape=9.769963e-16, scale=1, lower.tail=F)
    # [1] 0.3678794
    

    Resolviendo el parámetro de escala:

    optim(1, fn=function(scl){(pweibull(.88, shape=.5, scale=scl, lower.tail=F)-.15)^2})
    # $par
    # [1] 0.2445312
    # ...
    pweibull(.88, shape=.5, scale=0.2445312, lower.tail=F)
    # [1] 0.1500135
    

    Resolviendo el tiempo de censura:

    qweibull(.15, shape=.5, scale=1, lower.tail=F)
    # [1] 3.599064
    

    Resolviendo la tasa de censura:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
    
  2. Por otro lado, podemos pensar en la censura como algo aleatorio (y típicamente independiente) que ocurre a lo largo del estudio debido, por ejemplo, al abandono. En ese caso, el procedimiento es simular dos conjuntos de variantes de Weibull. Luego, simplemente observa qué fue primero: usa el valor menor como punto final y llama a esa unidad censurada si el valor menor fue el tiempo de censura. Por ejemplo:

    set.seed(0775)  
    t    = rweibull(3, shape=.5, scale=1)
    t      # [1] 0.7433678 1.1325749 0.2784812
    c    = rweibull(3, shape=.5, scale=1.5)
    c      # [1] 3.3242417 2.8866217 0.9779436
    time = pmin(t, c)
    time   # [1] 0.7433678 1.1325749 0.2784812
    cens = ifelse(c<t, 1, 0)
    cens   # [1] 0 0 0
    
gung - Restablece a Monica
fuente
respuesta muy interesante (la optimfunción es increíble), pero ¿cómo calibrarías tu segunda respuesta para lograr un cierto porcentaje de censura?
Dan Chaltiel
@DanChaltiel, el segundo no está realmente calibrado, es simplemente al azar. Es posible que tampoco sea posible lograr la proporción deseada, dados otros aspectos que desee (análogos al n. ° 1). Dicho esto, puede ser posible identificar una proporción de la población (la proporción observada rebotará de iteración en iteración) optimizando la distribución censurada en relación con la distribución de eventos.
gung - Restablece a Monica
2

Solo para asegurarnos de que estamos hablando de lo mismo, la censura de tipo I es cuando

... un experimento tiene un número determinado de sujetos o elementos y lo detiene en un momento predeterminado, momento en el cual los sujetos restantes están censurados a la derecha.

Para generar datos censurados correctos utilizando el tiempo de censura = 0,88 , solo usaría la minfunción:

T <- rweibull(3, shape=.5, scale=1)
censoring_time <- 0.88
T_censored <- min(censoring_time, T)

Sin embargo, no estoy completamente seguro de lo que quieres decir cuando dices, " tasa de censura = 0.15 " ... ¿Quieres decir que el 15% de tus sujetos están correctamente censurados? Estas notas sobre censura parecen indicar que el único parámetro que uno necesita para la censura Tipo I es censurar el tiempo , por lo que no estoy seguro de cómo influye esta tasa.

StevieP
fuente
1
Tenga en cuenta que su cita no es una definición de censura: es solo un ejemplo. La censura correcta ocurre cuando cada valor se compara con un umbral predeterminado y se reemplaza por un indicador de censura no numérico cuando el valor excede ese umbral. Independientemente, la aplicación min(o, más generalmente pmin) , es la forma de simularlo R. (Un ejemplo de censura correcta en un estudio de no supervivencia es el análisis de colonias bacterianas en aguas residuales. Se realiza contando manualmente las visibles en un portaobjetos de microscopio. Con una fuerte contaminación, el resultado se da como "demasiado numeroso para contar". )
whuber