Você estipula que deseja simular a censura do tipo 1 . Normalmente, isso significa que o experimento é realizado por um período de tempo e que as unidades de estudo que ainda não tiveram o evento são censuradas. Se foi isso que você quis dizer, não é (necessariamente) possível estipular os parâmetros de forma e escala, e o tempo e a taxa de censura simultaneamente. Depois de estipular três, o último é necessariamente fixo.
(Tentando) resolver o parâmetro shape:
Isso falha; parece que é impossível ter uma taxa de censura de 15% em um tempo de censura de 0,88 com uma distribuição Weibull em que o parâmetro de escala é mantido em 1, independentemente do 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
Resolução para o 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
Resolução para o tempo de censura:
qweibull(.15, shape=.5, scale=1, lower.tail=F)
# [1] 3.599064
Resolução para a taxa de censura:
pweibull(.88, shape=.5, scale=1, lower.tail=F)
# [1] 0.3913773
Por outro lado, podemos pensar na censura como aleatória (e tipicamente independente) ocorrendo ao longo do estudo devido a, por exemplo, abandono. Nesse caso, o procedimento é simular dois conjuntos de variáveis Weibull. Depois, basta observar o que veio primeiro: você usa o menor valor como ponto final e chama a unidade censurada se o menor valor foi o tempo de censura. Por exemplo:
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
função é incrível), mas como você calibraria sua segunda resposta para atingir uma certa porcentagem de censura?