OK, saya telah merevisi jawaban ini secara ekstensif. Saya pikir daripada membuang-buang data Anda dan membandingkan jumlah di setiap bin, saran yang telah saya tanamkan dalam jawaban asli saya tentang menyesuaikan perkiraan kepadatan kernel 2d dan membandingkannya adalah ide yang jauh lebih baik. Bahkan lebih baik, ada fungsi kde.test () dalam paket ks Tarn Duong untuk R yang melakukan ini semudah pie.
Periksa dokumentasi untuk kde.test untuk detail lebih lanjut dan argumen yang dapat Anda ubah. Tetapi pada dasarnya itu tidak persis apa yang Anda inginkan. Nilai p yang dikembalikan adalah probabilitas menghasilkan dua set data yang Anda bandingkan di bawah hipotesis nol bahwa mereka dihasilkan dari distribusi yang sama. Jadi semakin tinggi nilai-p, semakin baik kesesuaian antara A dan B. Lihat contoh saya di bawah ini di mana ini dengan mudah mengambil bahwa B1 dan A berbeda, tetapi B2 dan A secara masuk akal sama (yaitu bagaimana mereka dihasilkan) .
# generate some data that at least looks a bit similar
generate <- function(n, displ=1, perturb=1){
BV <- rnorm(n, 1*displ, 0.4*perturb)
UB <- -2*displ + BV + exp(rnorm(n,0,.3*perturb))
data.frame(BV, UB)
}
set.seed(100)
A <- generate(300)
B1 <- generate(500, 0.9, 1.2)
B2 <- generate(100, 1, 1)
AandB <- rbind(A,B1, B2)
AandB$type <- rep(c("A", "B1", "B2"), c(300,500,100))
# plot
p <- ggplot(AandB, aes(x=BV, y=UB)) + facet_grid(~type) +
geom_smooth() + scale_y_reverse() + theme_grey(9)
win.graph(7,3)
p +geom_point(size=.7)
> library(ks)
> kde.test(x1=as.matrix(A), x2=as.matrix(B1))$pvalue
[1] 2.213532e-05
> kde.test(x1=as.matrix(A), x2=as.matrix(B2))$pvalue
[1] 0.5769637
JAWABAN ASLI SAYA DI BAWAH INI, HANYA DISEDIAKAN KARENA ADA SEKALI LINK KE ITU DARI TEMPAT LAIN YANG TIDAK AKAN MEMBUAT SENSE
Pertama, mungkin ada cara lain untuk melakukannya.
Justel et al telah mengajukan ekstensi multivariat dari uji Kolmogorov-Smirnov tentang goodness of fit yang menurut saya dapat digunakan dalam kasus Anda, untuk menguji seberapa baik setiap set data yang dimodelkan cocok dengan aslinya. Saya tidak dapat menemukan implementasi dari ini (misalnya dalam R) tetapi mungkin saya tidak terlihat cukup keras.
Atau, mungkin ada cara untuk melakukan ini dengan memasang kopula pada data asli dan untuk setiap set data yang dimodelkan, dan kemudian membandingkan model-model tersebut. Ada implementasi dari pendekatan ini di R dan tempat lain tapi saya tidak terlalu akrab dengan mereka jadi belum mencoba.
Tetapi untuk menjawab pertanyaan Anda secara langsung, pendekatan yang Anda ambil adalah yang masuk akal. Beberapa poin menyarankan diri mereka sendiri:
Kecuali jika kumpulan data Anda lebih besar dari yang terlihat saya pikir kotak 100 x 100 terlalu banyak sampah. Secara intuitif, saya bisa membayangkan Anda menyimpulkan berbagai set data lebih berbeda daripada mereka hanya karena ketepatan tempat sampah Anda berarti Anda memiliki banyak tempat sampah dengan jumlah poin yang rendah di dalamnya, bahkan ketika kepadatan data tinggi. Namun ini pada akhirnya adalah masalah penilaian. Saya pasti akan memeriksa hasil Anda dengan pendekatan berbeda untuk binning.
Setelah Anda selesai melakukan binning dan Anda telah mengubah data Anda menjadi (pada dasarnya) sebuah tabel kontingensi dengan dua kolom dan jumlah baris yang sama dengan jumlah sampah (10.000 dalam kasus Anda), Anda memiliki masalah standar dalam membandingkan dua kolom hitungan. Entah uji Chi square atau pemasangan semacam model Poisson akan berhasil, tetapi seperti yang Anda katakan ada kecanggungan karena banyaknya jumlah nol. Salah satu dari model-model tersebut biasanya cocok dengan meminimalkan jumlah kuadrat perbedaan, dibobot oleh kebalikan dari jumlah yang diharapkan jumlah; ketika ini mendekati nol dapat menyebabkan masalah.
Sunting - sisa dari jawaban ini Saya sekarang tidak lagi percaya untuk menjadi pendekatan yang tepat.
Saya pikir uji pasti Fisher mungkin tidak berguna atau tidak sesuai dalam situasi ini, di mana total marginal dari baris di tab-silang tidak diperbaiki. Ini akan memberikan jawaban yang masuk akal tapi saya merasa sulit untuk mendamaikan penggunaannya dengan turunan aslinya dari desain eksperimental. Saya meninggalkan jawaban asli di sini sehingga komentar dan pertanyaan selanjutnya masuk akal. Selain itu, mungkin masih ada cara untuk menjawab pendekatan OP yang diinginkan untuk men-binning data dan membandingkan tempat sampah dengan beberapa tes berdasarkan pada perbedaan absolut atau kuadrat rata-rata. Pendekatan semacam itu masih akan menggunakan tab silang dirujuk di bawah dan menguji independensi yaitu mencari hasil di mana kolom A memiliki proporsi yang sama dengan kolom B.ng× 2
Saya menduga bahwa solusi untuk masalah di atas adalah dengan menggunakan uji pasti Fisher , menerapkannya tab silang , di mana adalah jumlah total sampah. Meskipun perhitungan lengkap kemungkinan tidak praktis karena jumlah baris di tabel Anda, Anda bisa mendapatkan estimasi nilai p yang baik menggunakan simulasi Monte Carlo (implementasi R dari uji Fisher memberikan ini sebagai opsi untuk tabel yang lebih besar dari 2 x 2 dan saya kira begitu paket lain). Nilai-p ini adalah probabilitas bahwa set data kedua (dari salah satu model Anda) memiliki distribusi yang sama melalui nampan Anda seperti aslinya. Oleh karena itu semakin tinggi nilai p, semakin baik kesesuaiannya. ng× 2ng
Saya mensimulasikan beberapa data agar terlihat seperti milik Anda dan menemukan bahwa pendekatan ini cukup efektif untuk mengidentifikasi set data "B" mana yang dihasilkan dari proses yang sama dengan "A" dan yang sedikit berbeda. Tentunya lebih efektif daripada mata telanjang.
- ng× 2masalah jika Anda hanya menggunakan jumlah perbedaan absolut atau perbedaan kuadrat, seperti yang Anda usulkan pada awalnya). Namun, penting bahwa setiap versi B Anda memiliki jumlah poin yang berbeda. Pada dasarnya, set data B yang lebih besar akan memiliki kecenderungan untuk mengembalikan nilai-p yang lebih rendah. Saya dapat memikirkan beberapa kemungkinan solusi untuk masalah ini. 1. Anda bisa mengurangi semua set B Anda ke ukuran yang sama (ukuran terkecil dari set B Anda), dengan mengambil sampel acak dari ukuran itu dari semua set B yang lebih besar dari ukuran itu. 2. Pertama-tama Anda bisa memasukkan perkiraan kepadatan kernel dua dimensi untuk setiap set B Anda, dan kemudian mensimulasikan data dari perkiraan itu yang berukuran sama. 3. Anda bisa menggunakan semacam simulasi untuk mengetahui hubungan nilai-p dengan ukuran dan menggunakannya untuk "memperbaiki" nilai-p yang Anda dapatkan dari prosedur di atas sehingga dapat dibandingkan. Mungkin ada alternatif lain juga. Yang mana yang Anda lakukan akan bergantung pada bagaimana data B dihasilkan, seberapa berbeda ukurannya, dll.
Semoga itu bisa membantu.