無敵(不死)タイムのある指数分布っぽい確率分布からのサンプリング

こいつ

の応用で、

  • 時点1〜5までは無敵(不死)

になるような確率分布からのサンプリングをやってみた。
具体的には

lambda <- function(t){ifelse(t > 1 & t < 5, 0, 0.75)}

というように、デフォルト強度(ポアソン分布の平均値に相当する量) \lambdaを一時的に0と設定する。こうすると単位時間当たりの死亡率が0になるので、この間は無敵となるのだ。んで、この形からサンプリングすると、以下のように絶対死なない”無敵タイム付”の指数分布からのサンプリングになる。ちゃんと1〜5の間は確率密度が0になるので、この間は死なないよと。

コードは以下、コピペすれば同じ結果を再現できるぞい。

#int_0^t \lambda(u)du - \xi
#な関数。無理やり根を探す形で書くのでこうした
objective <- function(t, lambda, xi){
  integrate(lambda, 0, t)$value - xi
}
#適当な強度の関数形
lambda <- function(t){ifelse(t > 1 & t < 5, 0, 0.75)}
#描画範囲
range_plot <- c(0, 15)
#サンプリング
set.seed(100)
x <- sapply(
  1:10^3, 
  function(i){
    uniroot(objective, range_plot, tol=10^(-3), lambda=lambda, xi=rexp(1))$root
  }
)

library(ggplot2)
qplot(x, geom="blank") + 
  geom_histogram(aes(y=..density..), fill="lightpink2") + 
  scale_x_continuous(limits=range_plot)