14 votos

Cómo simular datos censurados

Me pregunto cómo puedo simular una muestra de n vidas de la distribución Weibull que incluya observaciones con censura derecha de tipo I. Por ejemplo, tengamos el n = 3, la forma = 3, la 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 un dato censurado que tenga censura derecha de tipo I en R.

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

14voto

Sean Hanley Puntos 2428

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


Su pregunta es algo ambigua; hay varias formas de interpretarla. Vamos a repasarlas:

  1. Usted estipula que quiere simular censura de tipo 1 . Esto suele significar que el experimento se lleva a cabo durante un periodo de tiempo, y que se censuran las unidades de estudio que no hayan tenido el evento para entonces. Si eso es lo que quiere decir, entonces no es posible (necesariamente) estipular los parámetros de forma y escala, y el tiempo y la tasa de censura simultáneamente. Una vez estipulados los tres, el último es necesariamente fijo.

    (Intentar) resolver el parámetro de forma:
    Esto falla; parece que es imposible tener una tasa de censura del 15% a un tiempo de censura de 0,88 con una distribución Weibull en la que 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

    Resolver el parámetro de la 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

    Resolver 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 que la censura se produce aleatoriamente (y normalmente de forma independiente) a lo largo del estudio debido, por ejemplo, al abandono. En ese caso, el procedimiento consiste en simular dos conjuntos de variantes de Weibull. Entonces simplemente se anota cuál fue primero: se utiliza el valor menor como punto final y se 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

0 votos

Respuesta muy interesante (el optim es impresionante), pero ¿cómo calibrarías tu segunda respuesta para conseguir un determinado porcentaje de censura?

0 votos

@DanChaltiel, la 2ª no está realmente calibrada es aleatoria. También es posible que no se consiga la proporción deseada, teniendo en cuenta otros aspectos que quieres (análogo al #1). Dicho esto, puede ser posible identificar un población (la proporción observada rebotará de una iteración a otra) optimizando la distribución censurada en relación con la distribución del evento.

3voto

John Clark Puntos 6

Sólo para estar seguros de que estamos hablando de lo mismo, censura de tipo I es cuando

... un experimento tiene un número determinado de sujetos o elementos y detiene el experimento en un momento predeterminado, momento en el que los sujetos que quedan son censurados por la derecha.

Para generar datos censurados a la derecha utilizando tiempo de censura = 0,88 , simplemente se utilizaría el min función:

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

Sin embargo, no estoy del todo seguro de lo que quiere decir cuando afirma: " tasa de censura = 0,15 "... ¿Quiere decir que el 15% de sus temas son censurados por la derecha? Estas notas sobre la censura parecen indicar que el único parámetro que se necesita para Tipo I la censura es tiempo de censura Así que no estoy seguro de cómo influye esta tasa.

3 votos

Tenga en cuenta que su cita no es una definición de censura: es sólo un ejemplo. La censura derecha se produce cuando cada valor se compara con un umbral predeterminado y se sustituye por un indicador de censura no numérico cuando el valor supera ese umbral. En cualquier caso, la aplicación de min (o, más generalmente, pmin ) es la forma de simularlo en R . (Un ejemplo de censura correcta en un estudio de no supervivencia es el análisis de las colonias bacterianas en las aguas residuales. Se hace contando manualmente las que son visibles en un portaobjetos de microscopio. En caso de fuerte contaminación, el resultado se da como "demasiado numeroso para contarlo").

1 votos

Utilizando pmin() indeeds tiene mucho más sentido que usar min() aquí.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X