So simulieren Sie zensierte Daten


11

Ich frage mich, wie ich eine Stichprobe von n Weibull-Verteilungslebensdauern simulieren kann, die rechtszensierte Beobachtungen vom Typ I enthalten. Zum Beispiel haben wir n = 3, Form = 3, Skala = 1 und die Zensurrate = 0,15 und die Zensurzeit = 0,88. Ich weiß, wie man eine Weibull-Stichprobe erzeugt, aber ich weiß nicht, wie man zensierte Daten erzeugt, deren Typ I in R rechtszensiert ist.

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

Antworten:


11

(Aus Gründen des R Codierungsstils ist es am besten, nicht T als Variablenname zu verwenden, da dies ein Alias ​​für TRUEist und diese Vorgehensweise unweigerlich zu Problemen führt.)


Ihre Frage ist etwas mehrdeutig; Es gibt verschiedene Möglichkeiten, dies zu interpretieren. Lassen Sie uns durch sie gehen:

  1. Sie legen fest, dass Sie die Zensur vom Typ 1 simulieren möchten . Dies bedeutet normalerweise, dass das Experiment über einen bestimmten Zeitraum durchgeführt wird und dass alle Lerneinheiten, die das Ereignis bis dahin nicht hatten, zensiert werden. Wenn Sie das gemeint haben, ist es (notwendigerweise) nicht möglich, die Form- und Skalierungsparameter sowie die Zensurzeit und -rate gleichzeitig festzulegen. Nachdem drei festgelegt wurden, ist die letzte unbedingt festgelegt.

    (Versuch) nach dem Formparameter zu lösen:
    Dies schlägt fehl; Es scheint unmöglich zu sein, eine Zensurrate von 15% bei einer Zensurzeit von 0,88 mit einer Weibull-Verteilung zu haben, bei der der Skalierungsparameter bei 1 gehalten wird, unabhängig davon, um welchen Formparameter es sich handelt.

    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
    

    Auflösen nach dem Skalenparameter:

    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
    

    Lösung für die Zensurzeit:

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

    Lösung für die Zensurrate:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
    
  2. Auf der anderen Seite können wir uns die Zensur als zufällig (und typischerweise unabhängig) vorstellen, die während der gesamten Studie auftritt, beispielsweise aufgrund von Studienabbrüchen. In diesem Fall besteht das Verfahren darin, zwei Sätze von Weibull-Variablen zu simulieren. Dann notieren Sie einfach, was zuerst kam: Sie verwenden den niedrigeren Wert als Endpunkt und nennen diese Einheit zensiert, wenn der geringere Wert die Zensurzeit war. Zum Beispiel:

    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
    

Sehr interessante Antwort (die optimFunktion ist fantastisch), aber wie würden Sie Ihre zweite Antwort kalibrieren, um einen bestimmten Prozentsatz der Zensur zu erreichen?
Dan Chaltiel

@DanChaltiel, der 2. ist nicht wirklich kalibriert - er ist nur zufällig. Es ist möglicherweise auch nicht möglich, einen gewünschten Anteil zu erreichen, wenn andere Aspekte gewünscht werden (analog zu # 1). Das heißt, es kann möglich sein, einen Bevölkerungsanteil zu identifizieren (der beobachtete Anteil springt von Iteration zu Iteration), indem die zensierte Verteilung relativ zur Ereignisverteilung optimiert wird.
gung - Monica wieder einsetzen

2

Nur um sicherzugehen, dass es sich um dasselbe handelt, ist Typ-I-Zensur wann

... ein Experiment hat eine festgelegte Anzahl von Probanden oder Gegenständen und stoppt das Experiment zu einem festgelegten Zeitpunkt. Zu diesem Zeitpunkt werden alle verbleibenden Probanden rechtszensiert.

Um mit der Zensurzeit = 0,88 richtig zensierte Daten zu generieren , verwenden Sie einfach die folgende minFunktion:

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

Ich bin mir jedoch nicht ganz sicher, was Sie meinen, wenn Sie " Zensurrate = 0,15 " sagen ... Wollen Sie damit sagen, dass 15% Ihrer Probanden richtig zensiert sind? Diese Hinweise zur Zensur scheinen darauf hinzudeuten, dass der einzige Parameter, den man für die Typ-I- Zensur benötigt, die Zensurzeit ist , daher bin ich mir nicht sicher, wie sich diese Rate auswirkt.


1
Beachten Sie, dass Ihr Angebot keine Definition von Zensur ist, sondern nur ein Beispiel. Die richtige Zensur tritt auf, wenn jeder Wert mit einem vorgegebenen Schwellenwert verglichen und durch einen nicht numerischen Zensurindikator ersetzt wird, wenn der Wert diesen Schwellenwert überschreitet. Unabhängig davon ist das Anwenden min(oder allgemeiner pmin) der Weg, um es zu simulieren R. (Ein Beispiel für die richtige Zensur in einer Nichtüberlebensstudie ist die Analyse von Bakterienkolonien im Abwasser. Dies erfolgt durch manuelles Zählen der auf einem Objektträger sichtbaren Kolonien. Bei starker Kontamination wird das Ergebnis als "zu zahlreich zum Zählen" angegeben. )
whuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.