Come simulare i dati censurati


11

Mi chiedo come posso simulare un campione di n vite di distribuzione Weibull che includano osservazioni censurate a destra di tipo I. Ad esempio, consente di avere n = 3, forma = 3, scala = 1 e il tasso di censura = .15 e il tempo di censura = .88. So come generare un campione di Weibull ma non so come generare un dato censurato con tipo I censurato a destra in R.

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

Risposte:


11

(Per quanto riguarda lo R stile di codifica, è meglio non usarlo T come nome di una variabile, perché è un alias per TRUEe quella pratica porterà inevitabilmente a problemi.)


La tua domanda è alquanto ambigua; ci sono molti modi per interpretarlo. Camminiamo attraverso di loro:

  1. Stabilisci di voler simulare la censura di tipo 1 . In genere, ciò significa che l'esperimento viene eseguito per un certo periodo di tempo e che qualsiasi unità di studio che non ha avuto l'evento a quel punto viene censurata. Se questo è ciò che intendevi, allora non è (necessariamente) possibile stabilire i parametri di forma e scala, nonché il tempo e il tasso di censura contemporaneamente. Avendo stipulato qualsiasi tre, l'ultimo è necessariamente risolto.

    (Tentativo di) risolvere il parametro shape:
    questo non riesce; sembra che sia impossibile avere un tasso di censura del 15% in un tempo di censura di .88 con una distribuzione di Weibull in cui il parametro scale è mantenuto su 1, indipendentemente dal parametro shape.

    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

    Risolvendo per il parametro di scala:

    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

    Risolvendo per il tempo di censura:

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

    Risolvendo per il tasso di censura:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
  2. D'altra parte, possiamo pensare di censurare come casualmente (e in genere indipendentemente) che si verificano durante lo studio a causa, ad esempio, di abbandono. In tal caso, la procedura è di simulare due serie di variate di Weibull. Quindi si nota semplicemente quale è venuto per primo: si utilizza il valore minore come endpoint e si chiama quell'unità censurata se il valore minore era il tempo di censura. Per esempio:

    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

risposta molto interessante (la optimfunzione è fantastica), ma come calibreresti la tua seconda risposta per ottenere una certa percentuale di censura?
Dan Chaltiel,

@DanChaltiel, il secondo non è davvero calibrato - è solo casuale. Inoltre, potrebbe non essere possibile ottenere la proporzione desiderata, dati gli altri aspetti desiderati (analogo al n. 1). Detto questo, potrebbe essere possibile identificare una proporzione di popolazione (la proporzione osservata rimbalzerà dall'iterazione all'iterazione) ottimizzando la distribuzione censurata relativa alla distribuzione degli eventi.
gung - Ripristina Monica

2

Per essere sicuri che stiamo parlando della stessa cosa, la censura di tipo I è quando

... un esperimento ha un determinato numero di soggetti o elementi e interrompe l'esperimento in un momento prestabilito, a quel punto tutti i soggetti rimanenti vengono censurati a destra.

Per generare i giusti dati censurati usando il tempo di censura = 0,88 , dovresti semplicemente usare la minfunzione:

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

Tuttavia, non sono del tutto sicuro di cosa intendi quando dici " tasso di censura = 0,15 " ... Intendi dire che il 15% dei tuoi soggetti è censurato correttamente? Queste note sulla censura sembrano indicare che l'unico parametro di cui uno ha bisogno per la censura di tipo I è il tempo di censura , quindi non sono sicuro di come questo tasso influisca.


1
Nota che la tua citazione non è una definizione di censura: è solo un esempio. La censura corretta si verifica quando ciascun valore viene confrontato con una soglia predeterminata e sostituito da un indicatore di censura non numerico quando il valore supera tale soglia. Indipendentemente da ciò, l'applicazione min(o, più in generale, pmin) è il modo per simularlo R. (Un esempio di censura corretta in uno studio di non sopravvivenza è l'analisi delle colonie batteriche nelle acque reflue. Viene eseguita contando manualmente quelle visibili su un vetrino da microscopio. Con una forte contaminazione, il risultato viene dato come "troppo numeroso per essere contato". )
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.