Usted estipula que desea simular la censura tipo 1 . Por lo general, se considera que el experimento se realiza durante un período de tiempo y que cualquier unidad de estudio que no haya tenido el evento para entonces está censurada. Si eso es lo que quiso decir, entonces no es (necesariamente) posible estipular los parámetros de forma y escala, y el tiempo y la tasa de censura simultáneamente. Habiendo estipulado tres, el último está necesariamente arreglado.
(Intentando) resolver el parámetro de forma:
esto falla; parece que es imposible tener una tasa de censura del 15% en un tiempo de censura de .88 con una distribución de Weibull donde 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
Resolviendo el parámetro de 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
Resolviendo 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 en la censura como algo aleatorio (y típicamente independiente) que ocurre a lo largo del estudio debido, por ejemplo, al abandono. En ese caso, el procedimiento es simular dos conjuntos de variantes de Weibull. Luego, simplemente observa qué fue primero: usa el valor menor como punto final y 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
optim
función es increíble), pero ¿cómo calibrarías tu segunda respuesta para lograr un cierto porcentaje de censura?