打ち切りデータをシミュレートする方法


11

タイプIの右打ち切り観測を含むn個のワイブル分布の寿命のサンプルをどのようにシミュレートできるのかと思います。たとえば、n = 3、形状= 3、スケール= 1、打ち切り率= .15、打ち切り時間= .88とします。ワイブルサンプルを生成する方法は知っていますが、Rで右打ち切りされたタイプの打ち切りデータを生成する方法がわかりません。

T = rweibull(3, shape=.5, scale=1)

回答:


11

R コーディングスタイルの 問題として、T これはのエイリアスであるため、変数名として 使用ないことTRUEをお勧めします。この方法を使用すると、必然的に問題が発生します。)


あなたの質問はややあいまいです。それを解釈するにはいくつかの方法があります。それらを見ていきましょう:

  1. タイプ1の打ち切りをシミュレートすることを規定します。これは通常、実験が一定期間実行され、その時点までにイベントが発生していないスタディユニットはすべて検閲されることを意味します。それが意図したとおりである場合、形状とスケールのパラメーター、および打ち切り時間と速度を同時に指定することは(必ずしも)不可能です。3つを規定したので、最後は必ず修正されます。

    試行中)形状パラメーターを解決:
    これは失敗します。形状パラメータが何であっても、スケールパラメータが1に保持されているワイブル分布では、0.88の打ち切り時間で15%の打ち切り率を実現することは不可能であるようです。

    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
    
  2. 一方、打ち切りは、たとえばドロップアウトが原因で、研究全体でランダムに(通常は独立して)発生していると考えることができます。その場合、手順はワイブル変量の2つのセットをシミュレートすることです。次に、どちらが先に来るかを単純にメモします。小さい方の値をエンドポイントとして使用し、小さい方の値が打ち切り時間である場合は、そのユニットを打ち切りと呼びます。例えば:

    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関数は素晴らしい)ですが、特定の割合の検閲を達成するために2番目の答えをどのように調整しますか?
Dan Chaltiel

@ DanChaltiel、2つ目は実際には調整されていません-ランダムです。また、(#1と同様に)必要な他の側面を考慮して、希望の比率を達成できない場合もあります。とは言え、イベント分布に対する打ち切り分布を最適化することにより、母集団の比率(観測された比率が反復ごとに跳ね返る)を特定できる可能性があります。
ガン-モニカの回復

2

同じことを話していることを確認するために、タイプIの検閲

...実験には一定数の被験者またはアイテムがあり、所定の時間に実験を停止します。この時点で、残っている被験者はすべて右打ち切りになります。

打ち切り時間= 0.88を使用して正しい打ち切りデータを生成するには、次のmin関数を使用します。

T <- rweibull(3, shape=.5, scale=1)
censoring_time <- 0.88
T_censored <- min(censoring_time, T)

ただし、「検閲率= 0.15」と言ったときの意味は完全にはわかりません...被験者の15%が正しく検閲されていると言いますか?検閲に関するこれらのメモは、タイプI検閲に必要な唯一のパラメーターが時間の検閲であることを示しているようです。そのため、このレートがどのように考慮されるかはわかりません。


1
あなたの引用は検閲の定義ではないことに注意してください:それは単なる例です。右打ち切りは、各値が所定のしきい値と比較されたときに発生し、値がそのしきい値を超えたときに非数値打ち切りインジケーターに置き換えられます。いずれにしても、適用min(または、より一般的にはpmin)は、でそれをシミュレートする方法Rです。(非生存研究における正しい打ち切りの例は、廃水中の細菌コロニーの分析です。これは、顕微鏡のスライドで目に見えるものを手動で数えることによって行われます。汚染が激しい場合、結果は「数が多すぎる」として与えられます。 )
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.