Vous précisez que vous souhaitez simuler la censure de type 1 . Cela est généralement considéré comme signifiant que l'expérience est menée pendant une période de temps et que les unités d'étude n'ayant pas eu l'événement à ce moment-là sont censurées. Si c'est ce que vous vouliez dire, il n'est pas (nécessairement) possible de stipuler les paramètres de forme et d'échelle, ainsi que le temps et le taux de censure simultanément. Après en avoir stipulé trois, le dernier est nécessairement fixe.
(Tentative de) résoudre le paramètre de forme:
cela échoue; il semble qu'il soit impossible d'avoir un taux de censure de 15% à un temps de censure de 0,88 avec une distribution de Weibull où le paramètre d'échelle est maintenu à 1, quel que soit le paramètre de forme.
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
Résolution du paramètre d'échelle:
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
Résolution pour le temps de censure:
qweibull(.15, shape=.5, scale=1, lower.tail=F)
# [1] 3.599064
Résolution du taux de censure:
pweibull(.88, shape=.5, scale=1, lower.tail=F)
# [1] 0.3913773
D'un autre côté, nous pouvons penser que la censure se produit de manière aléatoire (et généralement indépendante) tout au long de l'étude en raison, par exemple, du décrochage. Dans ce cas, la procédure consiste à simuler deux ensembles de variables de Weibull. Ensuite, vous notez simplement ce qui est arrivé en premier: vous utilisez la valeur inférieure comme point de terminaison et appelez cette unité censurée si la valeur inférieure était le temps de censure. Par exemple:
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
fonction est géniale), mais comment calibreriez-vous votre deuxième réponse pour atteindre un certain pourcentage de censure?