読者です 読者をやめる 読者になる 読者になる

廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

MASS::fitdistr で打ち切りデータからの最尤推定

R 生存時間分析

R には fitdistr という最尤推定をしてくれる関数がありまして、自分で密度を定義してやれば打ち切りデータからでもパラメータを推定できる。

mydens <-function(x,shape,scale){
  ifelse(d==1,
         pweibull(x,shape, scale,lower.tail = FALSE),
         dweibull(x,shape, scale)
         )
}
x <-rweibull(100,shape=2,scale=3)
d <- as.integer(x>=3) #打ち切りの有無を表すインジケータ
y <- ifelse(d==1,3,x) #定時打ち切り
MASS::fitdistr(y,mydens,start = list(shape=1,scale=1),lower=c(0,0))

出力は以下の通り。

> MASS::fitdistr(y,mydens,start = list(shape=1,scale=1),lower=c(0,0))
     shape       scale  
  1.9861882   3.1135004 
 (0.2327778) (0.2111631)

fitdistr は optim のラッパーなので、optim の引数がそのまま使える。