I thought I was missing something because it was hard to invert due to the splines, but maybe not since you are using exponential_rng
in your example code. To draw an exponential random number with an upper bound ub
without rejection sampling, you could use the following (untested) code:
real exponential_ub_rng(real beta, real ub) {
real p = exponential_cdf(ub, beta); // cdf for bounds
real u = uniform_rng(0, p);
return (-log1m(u) / beta); // inverse cdf for value
}
The beta
here matches the Stan manual parameterization and would be exp(intercept+X_uncensored[i,]*betas)
in your notation.
This is somewhat tangential, though. You are presupposing that the same individuals will be censored (or not censored) in any replicated data, and I don’t see why that would be the case. Is it possible that when people are suggesting you take the minimum, they mean to suggest you apply artificial censoring at T^*? That is what I do. However, it requires knowing a potential censoring time for each individual. For example, if the study ends on Dec 31 and I know they entered the study on June 3, I know exactly when they would have been censored, even if I observe the event to occur in August (and thus do not directly observe the censoring “event” time). Alternately, you may know that everyone will be followed up for a maximum of 90 days. For some censoring mechanisms, this knowledge is not possible, unfortunately.