Bagaimana saya harus mendekati masalah prediksi biner ini?


9

Saya punya dataset dengan format berikut.

Ramalan kanker tidak ada kanker

Ada kanker hasil biner / tidak ada kanker. Setiap dokter dalam dataset telah melihat setiap pasien dan memberikan penilaian independen pada apakah pasien menderita kanker atau tidak. Para dokter kemudian memberikan tingkat kepercayaan mereka dari 5 bahwa diagnosis mereka benar, dan tingkat kepercayaan ditampilkan dalam tanda kurung.

Saya telah mencoba berbagai cara untuk mendapatkan perkiraan yang baik dari dataset ini.

Ini bekerja cukup baik bagi saya untuk rata-rata di seluruh dokter, mengabaikan tingkat kepercayaan mereka. Dalam tabel di atas yang akan menghasilkan diagnosa yang benar untuk Pasien 1 dan Pasien 2, walaupun itu akan salah mengatakan bahwa Pasien 3 menderita kanker, karena oleh mayoritas 2-1 para dokter berpikir Pasien 3 menderita kanker.

Saya juga mencoba metode di mana kami secara acak mengambil sampel dua dokter, dan jika mereka tidak setuju satu sama lain, maka suara yang diputuskan pergi ke dokter mana pun yang lebih percaya diri. Metode itu ekonomis karena kita tidak perlu berkonsultasi dengan banyak dokter, tetapi metode ini juga sedikit meningkatkan tingkat kesalahan.

Saya mencoba metode terkait di mana kami secara acak memilih dua dokter, dan jika mereka tidak setuju satu sama lain, kami secara acak memilih dua dokter lagi. Jika satu diagnosis didahului oleh setidaknya dua 'suara' maka kami menyelesaikan hal-hal yang mendukung diagnosis itu. Jika tidak, kami terus mengambil sampel lebih banyak dokter. Metode ini cukup ekonomis dan tidak membuat banyak kesalahan.

Saya tidak dapat menahan perasaan bahwa saya kehilangan beberapa cara yang lebih canggih dalam melakukan sesuatu. Sebagai contoh, saya bertanya-tanya apakah ada beberapa cara saya bisa membagi dataset menjadi set pelatihan dan tes, dan mencari beberapa cara optimal untuk menggabungkan diagnosis, dan kemudian melihat bagaimana bobot tersebut dilakukan pada set tes. Salah satu kemungkinan adalah semacam metode yang memungkinkan saya menurunkan berat badan dokter yang terus membuat kesalahan pada set uji coba, dan mungkin diagnosa berat badan yang dibuat dengan keyakinan tinggi (kepercayaan tidak berkorelasi dengan akurasi dalam dataset ini).

Saya punya berbagai dataset yang cocok dengan deskripsi umum ini, sehingga ukuran sampel bervariasi dan tidak semua dataset terkait dengan dokter / pasien. Namun, dalam dataset khusus ini ada 40 dokter, yang masing-masing melihat 108 pasien.

EDIT: Berikut adalah tautan ke beberapa bobot yang dihasilkan dari pembacaan saya atas jawaban @ jeremy-miles.

  1. Hasil tidak tertimbang ada di kolom pertama. Sebenarnya dalam dataset ini nilai kepercayaan maksimum adalah 4, bukan 5 seperti yang saya katakan sebelumnya. Jadi dengan mengikuti pendekatan @ jeremy-miles, skor terbobot tertinggi yang bisa didapatkan oleh pasien adalah 7. Itu berarti bahwa setiap dokter menyatakan dengan tingkat kepercayaan 4 bahwa pasien tersebut menderita kanker. Skor tidak tertimbang terendah yang dapat diperoleh pasien adalah 0, yang berarti bahwa setiap dokter menyatakan dengan tingkat kepercayaan 4 bahwa pasien tersebut tidak menderita kanker.

  2. Pembobotan oleh Cronbach's Alpha. Saya menemukan di SPSS bahwa ada keseluruhan Cronbach's Alpha 0,9807. Saya mencoba memverifikasi bahwa nilai ini benar dengan menghitung Cronbach's Alpha secara lebih manual. Saya membuat matriks kovarians dari 40 dokter, yang saya tempelkan di sini . Kemudian berdasarkan pada pemahaman saya tentang rumus Alpha Cronbach α=KK1(1σxi2σT2)di manaKadalah jumlah item (di sini para dokter adalah 'item') saya menghitungσxi2 dengan menjumlahkan semua elemen diagonal dalam matriks kovarians, danσT2dengan menjumlahkan semua elemen dalam matriks kovarians. Saya kemudian mendapatα=40401(18.7915200.7112)=0.9807Saya kemudian menghitung 40 hasil Cronbach Alpha yang berbeda yang akan terjadi ketika setiap dokter dikeluarkan dari dataset. Saya menimbang dokter mana pun yang berkontribusi negatif terhadap Cronbach's Alpha di nol. Saya menemukan bobot untuk dokter yang tersisa sebanding dengan kontribusi positif mereka terhadap Cronbach's Alpha.

  3. Bobot berdasarkan Korelasi Total Item. Saya menghitung semua Korelasi Total Item, dan kemudian bobot setiap dokter sebanding dengan ukuran korelasinya.

  4. Bobot dengan Koefisien Regresi.

Satu hal yang saya masih tidak yakin tentang bagaimana mengatakan metode mana yang bekerja "lebih baik" daripada yang lain. Sebelumnya saya telah menghitung hal-hal seperti Skor Keterampilan Peirce, yang sesuai untuk contoh di mana ada prediksi biner dan hasil biner. Namun, sekarang saya memiliki perkiraan mulai dari 0 hingga 7 bukannya 0 hingga 1. Haruskah saya mengonversi semua skor tertimbang> 3,50 ke 1, dan semua skor tertimbang <3,50 ke 0?


Dapatkah kita mengatakan bahwa No Cancer (3)adalah Cancer (2)? Itu akan sedikit menyederhanakan masalah Anda.
Wayne

1
Re: struktur data Anda, hampir selalu lebih baik untuk memiliki variabel yang berbeda (apakah pasien menderita kanker; seberapa yakin penilaiannya) dalam kolom yang berbeda. Menggabungkannya seperti dalam "tanpa kanker (3)" sangat membatasi pilihan Anda.
rolando2

@Wayne Data berkisar dari prediksi kanker dengan kepercayaan maksimal Cancer (4)hingga prediksi tidak ada kanker dengan kepercayaan maksimal No Cancer (4). Kita tidak bisa mengatakan itu No Cancer (3)dan Cancer (2)itu sama, tetapi kita bisa mengatakan ada sebuah kontinum, dan titik tengah dalam kontinum ini adalah Cancer (1)dan No Cancer (1).
user1205901

@ rolando2 Terima kasih atas sarannya. Saya telah mengatur ulang hal-hal dalam file data saya sendiri sehingga sekarang mereka dipisahkan.
user1205901

1
Perhatikan bahwa ambang Anda adalah parameter yang dapat disesuaikan , sehingga cutoff yang sesuai akan tergantung pada kriteria evaluasi Anda. Karena saya tidak terbiasa dengan metrik Anda, saya meng-Google-nya, dan sebenarnya hit pertama mungkin relevan bagi Anda: Catatan tentang skor keterampilan Peirce maksimum (2007) .
GeoMatt22

Jawaban:


7

Pertama, saya akan melihat apakah para dokter sepakat satu sama lain. Anda tidak dapat menganalisis 50 dokter secara terpisah, karena Anda akan mengenakan model yang sesuai - kebetulan seorang dokter akan terlihat hebat.

Anda mungkin mencoba menggabungkan kepercayaan diri dan diagnosis ke dalam skala 10 poin. Jika seorang dokter mengatakan bahwa pasien tidak memiliki kanker, dan mereka sangat percaya diri, itu adalah 0. Jika dokter mengatakan mereka menderita kanker dan mereka sangat percaya diri, itu adalah 9. Jika mereka dokter mengatakan mereka tidak, dan tidak percaya diri, itu 5, dll.

Ketika Anda mencoba untuk memprediksi, Anda melakukan semacam analisis regresi, tetapi berpikir tentang urutan kausal dari variabel-variabel ini, itu sebaliknya. Apakah pasien menderita kanker adalah penyebab diagnosis, hasilnya adalah diagnosis.

Baris Anda haruslah pasien, dan kolom Anda haruslah dokter. Anda sekarang memiliki situasi yang umum dalam psikometrik (itulah sebabnya saya menambahkan tag).

Kemudian lihat hubungan antar skor. Setiap pasien memiliki skor rata-rata, dan skor dari masing-masing dokter. Apakah skor rata-rata berkorelasi positif dengan skor setiap dokter? Jika tidak, dokter itu mungkin tidak dapat dipercaya (ini disebut korelasi item-total). Kadang-kadang Anda menghapus satu dokter dari skor total (atau skor rata-rata) dan melihat apakah dokter itu berkorelasi dengan rata-rata semua dokter lain - ini adalah total korelasi item yang dikoreksi.

Anda dapat menghitung alpha Cronbach (yang merupakan bentuk korelasi intra-kelas), dan alpha tanpa masing-masing dokter. Alpha harus selalu naik ketika Anda menambahkan dokter, jadi jika naik ketika Anda menghapus dokter, peringkat dokter itu dicurigai (ini tidak sering memberi tahu Anda sesuatu yang berbeda dari korelasi total barang yang dikoreksi).

Jika Anda menggunakan R, hal semacam ini tersedia dalam paket psik, menggunakan fungsi alpha. Jika Anda menggunakan Stata, perintahnya adalah alpha, di SAS itu proc proc, dan di SPSS itu dalam skala, reliabilitas.

Kemudian Anda dapat menghitung skor, sebagai skor rata-rata dari masing-masing dokter, atau rata-rata tertimbang (terbobot oleh korelasi) dan melihat apakah skor tersebut merupakan prediksi dari diagnosis yang sebenarnya.

Atau Anda dapat melewati tahap itu, dan mundur setiap skor dokter pada diagnosis secara terpisah, dan memperlakukan parameter regresi sebagai bobot.

Jangan ragu untuk meminta klarifikasi, dan jika Anda ingin buku, saya suka Streiner dan "Skala Pengukuran Kesehatan" Norman.

-Edit: berdasarkan info tambahan OPs.

Wow, itu sih alfa Cronbach. Satu-satunya saat aku melihatnya setinggi itu adalah ketika terjadi kesalahan.

Sekarang saya akan melakukan regresi logistik dan melihat kurva ROC.

Perbedaan antara pembobotan dengan regresi dan korelasi tergantung pada bagaimana Anda percaya dokter merespons. Beberapa dokumen mungkin secara umum lebih percaya diri (tanpa lebih terampil), dan karenanya mereka mungkin menggunakan rentang ekstrim lebih banyak. Jika Anda ingin memperbaikinya, gunakan korelasi, daripada regresi, lakukan itu. Saya mungkin akan mempertimbangkan regresi, karena ini menyimpan data asli (dan tidak membuang informasi apa pun).

Sunting (2): Saya menjalankan model regresi logistik di R untuk melihat seberapa baik masing-masing memprediksi output. tl / dr: tidak ada di antara mereka.

Ini kode saya:

d <- read.csv("Copy of Cancer data - Weightings.csv")

mrc <- glm(cancer ~ weightrc, data = d, family = "binomial")
mun <- glm(cancer ~ unweight, data = d, family = "binomial")
mca <- glm(cancer ~ weightca, data = d, family = "binomial")
mic <- glm(cancer ~ weightic, data = d, family = "binomial")

d$prc <- predict(mrc, type = "response")
d$pun <- predict(mun, type = "response")
d$pca <- predict(mca, type = "response")
d$pic <- predict(mic, type = "response")

par(mfrow = c(2, 2))
roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

4 kurva ROC

Dan hasilnya:

> par(mfrow = c(2, 2))
> roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$prc, ci = TRUE,     plot = TRUE)

Data: d$prc in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9831
95% CI: 0.9637-1 (DeLong)
> roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pun, ci = TRUE,     plot = TRUE)

Data: d$pun in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9808
95% CI: 0.9602-1 (DeLong)
> roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pca, ci = TRUE,     plot = TRUE)

Data: d$pca in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9854
95% CI: 0.9688-1 (DeLong)
> roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pic, ci = TRUE,     plot = TRUE)

Data: d$pic in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9822
95% CI: 0.9623-1 (DeLong)

1
Baik sekali. Dan, jika alasan Anda memungkinkan, ada kemungkinan beberapa dokter akan memperburuk alfa dengan menyumbangkan wawasan unik sambil melawan tren.
rolando2

@ jeremy-miles Terima kasih atas jawaban ini, dan tawaran yang baik untuk mengajukan pertanyaan tentangnya. Saya mencoba menerapkan apa yang Anda sarankan, dan mengedit OP untuk memposting beberapa hasil. Hal utama yang saya ingin tanyakan adalah apakah saya menafsirkan posting Anda dengan benar, dan juga apa yang diperlukan untuk menunjukkan bahwa metode agregasi tertentu bekerja lebih baik daripada metode lain dalam memprediksi hasilnya.
user1205901

Terima kasih telah mengirim data. Saya akan memeriksanya nanti. (Perangkat lunak apa yang Anda gunakan?)
Jeremy Miles

@JeremyMiles Terima kasih telah mengirim suntingan ini! Saya menggunakan MATLAB, tapi saya tahu cukup banyak tentang R untuk menggeser dan menggunakannya, karena Anda sudah memposting kode R. Saya menghitung Cronbach's Alpha di SPSS - apakah Anda mendapatkan nilai yang berbeda dari R?
user1205901

1
Ya, itulah yang saya pikirkan. Jadi setiap dokter mendapat berat yang berbeda.
Jeremy Miles

2

Dua saran di luar kotak:

  1. Anda dapat menggunakan bobot pada fungsi hilangnya regresi logistik Anda, sehingga dokter yang sangat yakin bahwa pasien menderita kanker dengan P = 1 mendapat dua kali lipat dampaknya memiliki orang lain yang mengatakan ia menderita kanker dengan P = 0,75. Jangan lupa untuk mengubah probabilitas Anda menjadi bobot dengan benar.
  2. Satu keluarga model yang sering diabaikan adalah model peringkat. Di dalam rangking ada tiga kelompok besar: rangking listwise, pointwise dan pairwise, tergantung pada apa input Anda. Sepertinya Anda bisa menggunakan peringkat pointwise dalam kasus Anda.

Bisakah Anda menyarankan cara untuk mengubah probabilitas menjadi bobot dengan benar? Saya mencoba googling konsep ini tetapi tidak dapat menemukan saran yang jelas tentang bagaimana melakukan ini.
user1205901

@ user1205901, ada dalam pikiran saya sesuatu yang sangat sederhana seperti: Biarkan P= kemungkinan menjadi kanker yang diberikan oleh dokter, kemudian (dengan notasi python): y=[1 if p >= 0.5 else 0 for p in P]dan w=[abs(p-0.5)*2 for p in P]. Kemudian latih modelnya:LogisticRegression().fit(X,y,w)
Ricardo Cruz

Dalam fungsi kerugian, ini akan memberikan, misalnya, gandakan berat menjadi 0,1 dari 0,2 karena tidak menjadi kanker (0,1 -> 0,8 dan 0,2 -> 0,6). Jika dokter tidak yakin (P ~ 0,5) maka pengamatan hampir tidak berkontribusi terhadap kerugian. Model apa pun yang ia gunakan perlu mendukung penambahan vektor biaya ke fungsi kerugian, yang didukung sebagian besar model. Saya tidak tahu apakah ini bagus, tetapi tampaknya sepele untuk mencoba. Dia harus menentukan metrik terlebih dahulu. Fungsi kerugian dapat lebih jauh disesuaikan dengan metrik apa pun yang ingin dimaksimalkan.
Ricardo Cruz

2

(Ini di luar bidang keahlian saya, jadi jawaban oleh Jeremy Miles mungkin lebih dapat diandalkan.)

Ini satu ide.

i=1Nci{0,1}j=1mdij{0,1}

dijci

p[c]1Nici

p[dj|c]idijciici
jci

p[dj|c,wj]idijwijciiwijci
wij0dij

w[0,1]

p[dw]=dw(1d)1w
d=0

0^0=10^0=NaNw(0,1)k{1K}w=k/(K+1)


No Cancer (3) = Cancer (2)w[k]=kK25=135No Cancer (3) = Cancer (3)w[k]=kK+136=136

p[dj|c,wj]idijwijciiwijci

dδ[0,1]d{0,1}δi=wi(di=1)+(1wi)(di=0)δ=[0.8,0.4,0.8]p[c,δ]=cδ¯=0.8+0+0.83=230.8p[2]=c¯=23p[δ]=δ¯=560.8p[c|δ]=p[c,δ]/p[δ]=0.8p[δ|c]=p[c,δ]/p[c]=0.8

0

Dari pertanyaan Anda, tampaknya yang ingin Anda uji adalah sistem pengukuran Anda. Dalam ranah rekayasa proses, ini akan menjadi analisis sistem pengukuran atribut atau MSA.

Tautan ini memberikan beberapa informasi bermanfaat tentang ukuran sampel yang dibutuhkan dan perhitungan berjalan untuk melakukan studi jenis ini. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-cculations/

Dengan penelitian ini, Anda juga perlu dokter untuk mendiagnosis pasien yang sama dengan informasi yang sama setidaknya dua kali.

Anda dapat melakukan studi ini dengan satu dari dua cara. Anda dapat menggunakan kanker sederhana / tidak ada peringkat kanker untuk menentukan kesepakatan antara dokter dan oleh masing-masing dokter. Idealnya, mereka juga harus dapat mendiagnosis dengan tingkat kepercayaan yang sama. Anda kemudian dapat menggunakan skala 10 poin penuh untuk menguji perjanjian antara dan oleh masing-masing dokter. (Semua orang harus setuju bahwa kanker (5) adalah peringkat yang sama, bahwa tidak ada kanker (1) adalah peringkat yang sama, & c.)

Perhitungan di situs web tertaut mudah dilakukan di platform apa pun yang mungkin Anda gunakan untuk pengujian.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.