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
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
optim
funzione è fantastica), ma come calibreresti la tua seconda risposta per ottenere una certa percentuale di censura?