Usted estipula que quiere simular censura de tipo 1 . Esto suele significar que el experimento se lleva a cabo durante un periodo de tiempo, y que se censuran las unidades de estudio que no hayan tenido el evento para entonces. Si eso es lo que quiere decir, entonces no es posible (necesariamente) estipular los parámetros de forma y escala, y el tiempo y la tasa de censura simultáneamente. Una vez estipulados los tres, el último es necesariamente fijo.
(Intentar) resolver el parámetro de forma:
Esto falla; parece que es imposible tener una tasa de censura del 15% a un tiempo de censura de 0,88 con una distribución Weibull en la que el parámetro de escala se mantiene en 1, sin importar cuál sea el parámetro de forma.
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
Resolver el parámetro de la escala:
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
Resolver el tiempo de censura:
qweibull(.15, shape=.5, scale=1, lower.tail=F)
# [1] 3.599064
Resolviendo la tasa de censura:
pweibull(.88, shape=.5, scale=1, lower.tail=F)
# [1] 0.3913773
Por otro lado, podemos pensar que la censura se produce aleatoriamente (y normalmente de forma independiente) a lo largo del estudio debido, por ejemplo, al abandono. En ese caso, el procedimiento consiste en simular dos conjuntos de variantes de Weibull. Entonces simplemente se anota cuál fue primero: se utiliza el valor menor como punto final y se llama a esa unidad censurada si el valor menor fue el tiempo de censura. Por ejemplo:
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