Comment simuler des données censurées

11

Je me demande comment puis-je simuler un échantillon de n durées de vie de distribution Weibull qui incluent des observations de type I censurées à droite. Par exemple, ayons le n = 3, la forme = 3, l'échelle = 1 et le taux de censure = .15, et le temps de censure = .88. Je sais comment générer un échantillon Weibull mais je ne sais pas comment générer des données censurées dont le type I est censuré à droite dans R.

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

Réponses:

11

(En ce qui concerne le R style de codage, il est préférable de ne pas utiliser T comme nom de variable, car il s'agit d'un alias pour TRUE, et cette pratique entraînera inévitablement des problèmes.)


Votre question est quelque peu ambiguë; il y a plusieurs façons de l'interpréter. Parcourons-les:

  1. Vous précisez que vous souhaitez simuler la censure de type 1 . Cela est généralement considéré comme signifiant que l'expérience est menée pendant une période de temps et que les unités d'étude n'ayant pas eu l'événement à ce moment-là sont censurées. Si c'est ce que vous vouliez dire, il n'est pas (nécessairement) possible de stipuler les paramètres de forme et d'échelle, ainsi que le temps et le taux de censure simultanément. Après en avoir stipulé trois, le dernier est nécessairement fixe.

    (Tentative de) résoudre le paramètre de forme:
    cela échoue; il semble qu'il soit impossible d'avoir un taux de censure de 15% à un temps de censure de 0,88 avec une distribution de Weibull où le paramètre d'échelle est maintenu à 1, quel que soit le paramètre de forme.

    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

    Résolution du paramètre d'échelle:

    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

    Résolution pour le temps de censure:

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

    Résolution du taux de censure:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
  2. D'un autre côté, nous pouvons penser que la censure se produit de manière aléatoire (et généralement indépendante) tout au long de l'étude en raison, par exemple, du décrochage. Dans ce cas, la procédure consiste à simuler deux ensembles de variables de Weibull. Ensuite, vous notez simplement ce qui est arrivé en premier: vous utilisez la valeur inférieure comme point de terminaison et appelez cette unité censurée si la valeur inférieure était le temps de censure. Par exemple:

    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 - Réintégrer Monica
la source
réponse très intéressante (la optimfonction est géniale), mais comment calibreriez-vous votre deuxième réponse pour atteindre un certain pourcentage de censure?
Dan Chaltiel
@DanChaltiel, le 2ème n'est pas vraiment calibré - c'est juste aléatoire. Il peut également ne pas être possible d'atteindre la proportion souhaitée, compte tenu des autres aspects que vous souhaitez (analogues à # 1). Cela dit, il peut être possible d'identifier une proportion de la population (la proportion observée rebondira d'une itération à l'autre) en optimisant la distribution censurée par rapport à la distribution des événements.
gung - Rétablir Monica
2

Pour être sûr que nous parlons de la même chose, la censure de type I, c'est quand

... une expérience a un nombre défini de sujets ou d'éléments et arrête l'expérience à un moment prédéterminé, auquel cas tous les sujets restants sont censurés à droite.

Pour générer des données censurées à droite en utilisant un temps de censure = 0,88 , il vous suffit d'utiliser la minfonction:

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

Cependant, je ne suis pas tout à fait sûr de ce que vous voulez dire lorsque vous dites " taux de censure = 0,15 " ... Voulez-vous dire que 15% de vos sujets sont correctement censurés? Ces notes sur la censure semblent indiquer que le seul paramètre dont on a besoin pour la censure de type I est le temps de censure , donc je ne sais pas comment ce taux est pris en compte.

StevieP
la source
1
Notez que votre citation n'est pas une définition de la censure: ce n'est qu'un exemple. La censure droite se produit lorsque chaque valeur est comparée à un seuil prédéterminé et remplacée par un indicateur de censure non numérique lorsque la valeur dépasse ce seuil. Quoi qu'il en soit, l'application min(ou, plus généralement, pmin) est le moyen de le simuler R. (Un exemple de censure à droite dans une étude de non-survie est l'analyse des colonies bactériennes dans les eaux usées. Elle se fait en comptant manuellement celles visibles sur une lame de microscope. Avec une forte contamination, le résultat est donné comme «trop nombreux pour être comptés». )
whuber