Jak symulować dane cenzurowane

11

Zastanawiam się, jak mogę zasymulować próbkę n okresów życia rozkładu Weibulla, które obejmują obserwacje z cenzurą po prawej stronie typu I. Na przykład niech n = 3, kształt = 3, skala = 1, a szybkość cenzury = 0,15, a czas cenzury = 0,88. Wiem, jak wygenerować próbkę Weibulla, ale nie wiem, jak wygenerować cenzurowane dane, które mają prawą cenzurę typu I w R.

T = rweibull(3, shape=.5, scale=1)
Emeli
źródło

Odpowiedzi:

11

(Ze względu na R styl kodowania najlepiej nie używać T jako nazwy zmiennej, ponieważ jest to alias TRUE, a taka praktyka nieuchronnie doprowadzi do problemów).


Twoje pytanie jest nieco dwuznaczne; istnieje kilka sposobów interpretacji. Przejdźmy przez nich:

  1. Zastrzegasz, że chcesz symulować cenzurę typu 1 . Zazwyczaj oznacza to, że eksperyment jest prowadzony przez pewien czas i że dowolne jednostki badawcze, które do tej pory nie miały zdarzenia, są cenzurowane. Jeśli o to ci chodziło, to nie jest (koniecznie) możliwe jednoczesne określenie kształtu i parametrów skali oraz czasu i szybkości cenzury. Po ustaleniu dowolnych trzech ostatnich jest koniecznie ustalonych.

    (Próba) rozwiązania parametru kształtu:
    To się nie udaje; wydaje się, że nie ma 15% stawki cenzury przy czasie cenzury 0,88 z rozkładem Weibulla, w którym parametr skali jest utrzymywany na 1, bez względu na parametr kształtu.

    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

    Rozwiązywanie parametru skali:

    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

    Rozwiązywanie problemu cenzury:

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

    Rozwiązanie problemu cenzury:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
  2. Z drugiej strony możemy myśleć o cenzurowaniu jako przypadkowej (i zazwyczaj niezależnie) występującej w trakcie badania z powodu, powiedzmy, porzucenia. W takim przypadku procedura polega na symulacji dwóch zestawów zmiennych Weibulla. Następnie zauważasz, co było pierwsze: używasz mniejszej wartości jako punktu końcowego i nazywasz tę jednostkę cenzurowaną, jeśli mniejsza wartość była czasem cenzury. Na przykład:

    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 - Przywróć Monikę
źródło
bardzo interesująca odpowiedź ( optimfunkcja jest niesamowita), ale jak skalibrowałbyś swoją drugą odpowiedź, aby osiągnąć pewien procent cenzury?
Dan Chaltiel
@ DanChaltiel, drugi nie jest tak naprawdę skalibrowany - jest po prostu losowy. Osiągnięcie pożądanej proporcji może być również niemożliwe, biorąc pod uwagę inne pożądane aspekty (analogicznie do # 1). To powiedziawszy, możliwe jest zidentyfikowanie proporcji populacji (obserwowana proporcja odbije się od iteracji do iteracji) poprzez optymalizację rozkładu ocenzurowanego względem rozkładu zdarzeń.
Gung - Przywróć Monikę
2

Aby mieć pewność, że mówimy o tym samym, cenzura typu I ma miejsce wtedy

... eksperyment ma określoną liczbę podmiotów lub przedmiotów i zatrzymuje eksperyment w określonym czasie, w którym to momencie pozostali uczestnicy są odpowiednio ocenzurowani.

Aby wygenerować prawidłowe dane ocenzurowane przy użyciu czasu cenzury = 0,88 , wystarczy użyć minfunkcji:

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

Nie jestem jednak do końca pewien, co masz na myśli, mówiąc „ wskaźnik cenzury = 0,15 ” ... Czy chcesz powiedzieć, że 15% badanych jest dobrze ocenzurowanych? Te uwagi na temat cenzury wydają się wskazywać, że jedynym parametrem potrzebnym do cenzury typu I jest czas cenzury , więc nie jestem pewien, w jaki sposób wpływa to tempo.

StevieP
źródło
1
Pamiętaj, że twój cytat nie jest definicją cenzury: to tylko przykład. Właściwa cenzura występuje, gdy każda wartość jest porównywana z określonym z góry progiem i zastępowana nieliczbowym wskaźnikiem cenzury, gdy wartość przekracza ten próg. Niezależnie od tego zastosowanie min(lub bardziej ogólnie pmin) jest sposobem na symulację R. (Przykładem właściwej cenzury w badaniu dotyczącym braku przeżycia jest analiza kolonii bakteryjnych w ściekach. Odbywa się to poprzez ręczne zliczanie tych widocznych na szkiełku mikroskopowym. Przy dużym zanieczyszczeniu wynik podaje się jako „zbyt liczne, aby policzyć”. )
whuber