Вы указываете, что хотите имитировать цензуру типа 1 . Как правило, это означает, что эксперимент проводится в течение определенного периода времени и что к тем учебным единицам, которые не имели события, к тому времени проводится цензура. Если это именно то, что вы имели в виду, то (необязательно) невозможно указать параметры формы и масштаба, а также время и скорость цензуры. Обозначив любые три, последнее обязательно фиксируется.
(Попытка) решить для параметра формы:
Это не удается; кажется, что невозможно получить 15% скорости цензуры при времени цензуры 0,88 с распределением Вейбулла, где параметр масштаба удерживается равным 1, независимо от того, какой параметр формы.
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
Решение для параметра масштаба:
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
Решаем за время цензуры:
qweibull(.15, shape=.5, scale=1, lower.tail=F)
# [1] 3.599064
Решение для цензуры:
pweibull(.88, shape=.5, scale=1, lower.tail=F)
# [1] 0.3913773
С другой стороны, мы можем думать о том, что цензура случайным образом (и, как правило, независимо) происходит в течение всего исследования из-за, скажем, отсева. В этом случае процедура состоит в том, чтобы моделировать два набора переменных Вейбулла. Затем вы просто отмечаете, что было первым: вы используете меньшее значение в качестве конечной точки и вызываете цензуру, если меньшее значение было временем цензуры. Например:
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
функция потрясающая), но как бы вы откалибровали свой второй ответ, чтобы достичь определенного процента цензуры?