Cara mensimulasikan data yang disensor

11

Saya bertanya-tanya bagaimana saya bisa mensimulasikan sampel dari masa distribusi Weibull yang mencakup pengamatan tipe-kanan I. Misalnya, mari kita memiliki n = 3, bentuk = 3, skala = 1 dan tingkat sensor = .15, dan waktu sensor = .88. Saya tahu cara membuat sampel Weibull tapi saya tidak tahu cara menghasilkan data yang disensor yang memiliki tipe I disensor di R.

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

Jawaban:

11

(Sebagai masalah R gaya pengkodean, yang terbaik adalah tidak menggunakan T sebagai nama variabel, karena itu adalah alias untuk TRUE, dan praktik itu pasti akan menimbulkan masalah.)


Pertanyaan Anda agak ambigu; ada beberapa cara untuk menafsirkannya. Mari kita berjalan melalui mereka:

  1. Anda menetapkan bahwa Anda ingin mensimulasikan sensor tipe 1 . Itu biasanya berarti bahwa percobaan dijalankan untuk jangka waktu tertentu, dan bahwa unit studi mana pun yang belum memiliki peristiwa pada saat itu disensor. Jika itu yang Anda maksudkan, maka tidak mungkin (harus) menentukan parameter bentuk dan skala, dan waktu serta laju sensor secara bersamaan. Setelah menetapkan tiga, yang terakhir harus diperbaiki.

    (Mencoba untuk) memecahkan parameter bentuk:
    Ini gagal; tampaknya tidak mungkin untuk memiliki tingkat penyensoran 15% pada waktu penyensoran 0,88 dengan distribusi Weibull di mana parameter skala disimpan pada 1, tidak peduli apa pun parameter bentuknya.

    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

    Memecahkan untuk parameter skala:

    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

    Memecahkan untuk waktu sensor:

    qweibull(.15, shape=.5, scale=1, lower.tail=F)
    # [1] 3.599064

    Memecahkan untuk tingkat sensor:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
  2. Di sisi lain, kita dapat menganggap penyensoran secara acak (dan biasanya secara independen) terjadi sepanjang penelitian karena, katakanlah, putus sekolah. Dalam hal ini, prosedurnya adalah mensimulasikan dua set varian Weibull. Maka Anda cukup mencatat mana yang lebih dulu: Anda menggunakan nilai lebih rendah sebagai titik akhir dan memanggil unit yang disensor jika nilai lebih rendah adalah waktu penyensoran. Sebagai contoh:

    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
gung - Pasang kembali Monica
sumber
jawaban yang sangat menarik ( optimfungsinya mengagumkan), tetapi bagaimana Anda akan mengkalibrasi jawaban kedua Anda untuk mencapai persentase penyensoran tertentu?
Dan Chaltiel
@DanChaltiel, yang ke-2 tidak benar-benar dikalibrasi - hanya acak. Mungkin juga tidak mungkin untuk mencapai proporsi yang diinginkan, mengingat aspek-aspek lain yang Anda inginkan (analog dengan # 1). Oleh karena itu, dimungkinkan untuk mengidentifikasi proporsi populasi (proporsi yang diamati akan meningkat dari iterasi ke iterasi) dengan mengoptimalkan distribusi yang disensor relatif terhadap distribusi peristiwa.
gung - Reinstate Monica
2

Hanya untuk memastikan kita berbicara tentang hal yang sama, sensor tipe-I adalah kapan

... percobaan memiliki jumlah subjek atau item tertentu dan menghentikan percobaan pada waktu yang telah ditentukan, di mana setiap subjek yang tersisa disensor dengan benar.

Untuk menghasilkan data yang disensor benar menggunakan waktu sensor = 0,88 , Anda cukup menggunakan minfungsi:

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

Namun, saya tidak sepenuhnya yakin apa yang Anda maksud ketika Anda mengatakan, " tingkat sensor = 0,15 " ... Apakah Anda bermaksud mengatakan bahwa 15% dari subjek Anda disensor dengan benar? Catatan tentang sensor ini sepertinya mengindikasikan bahwa satu-satunya parameter yang dibutuhkan sensor Jenis-I adalah menyensor waktu , jadi saya tidak yakin bagaimana faktor laju ini masuk.

StevieP
sumber
1
Perhatikan bahwa kutipan Anda bukan definisi sensor: itu hanya sebuah contoh. Penyensoran benar terjadi ketika setiap nilai dibandingkan dengan ambang batas yang telah ditentukan dan diganti dengan indikator penyensoran non-numerik ketika nilainya melebihi ambang tersebut. Apapun, penerapan min(atau, lebih umum, pmin) adalah cara untuk mensimulasikannya R. (Contoh sensor kanan dalam studi non-survival adalah analisis koloni bakteri dalam air limbah. Hal ini dilakukan dengan menghitung secara manual yang terlihat pada slide mikroskop. Dengan kontaminasi berat, hasilnya diberikan sebagai "terlalu banyak untuk dihitung." )
whuber