Memperkirakan distribusi dari data


12

Saya memiliki sampel data yang dihasilkan Roleh rnorm(50,0,1), jadi data jelas mengambil distribusi normal. Namun, Rtidak "tahu" informasi distribusi ini tentang data.

Apakah ada metode Ryang dapat memperkirakan jenis distribusi sampel saya berasal? Jika tidak, saya akan menggunakan shapiro.testfungsi dan melanjutkan dengan cara itu.


Saya tidak yakin mengenali hasil dari pertanyaan ini. Memang benar bahwa jika Anda hanya memiliki vektor angka dalam R, tidak ada banyak metadata yang terkait dengannya, tetapi mengapa itu mengganggu Anda? Mengapa Anda membutuhkan itu / apa yang ingin Anda lakukan dengannya? Misalkan memang memiliki seperti itu, itu hanya akan membantu sejauh Anda melewati vektor itu ke suatu fungsi dengan metode spesifik untuk data Gaussian vs lainnya. Saya tidak tahu apa-apa (walaupun saya bukan pengguna R paling ahli di dunia).
gung - Reinstate Monica

Jika Anda hanya ingin menguji apakah sampel yang diberikan tampak normal, tes Shapiro-Wilk adalah pilihan yang layak (meskipun layak untuk membaca pertanyaan ini dan jawaban yang diberikan di sana). Saya bisa melihat bagaimana ini bisa muncul dalam studi simulasi, tetapi tanpa rincian lebih lanjut tentang studi ini, sulit untuk memberikan jawaban yang bermanfaat.
gung - Reinstate Monica

Mengapa Anda perlu mengidentifikasi distribusi untuk data? Pilihan distribusi otomatis seringkali merupakan ide yang menarik, tetapi itu tidak membuatnya menjadi ide yang baik.
Glen_b -Reinstate Monica

Jawaban:


21

Ada fitdistrfungsi dalam paket MASS atau beberapa fungsi dalam paket fitdistrplus . Berikut adalah beberapa contoh dari yang terakhir.

require(fitdistrplus)

set.seed(1)
dat <- rnorm(50,0,1)
f1 <- fitdist(dat,"norm")
f2 <- fitdist(dat,"logis")
f3 <- fitdist(dat,"cauchy")

jadi misalnya

> f1
Fitting of the distribution ' norm ' by maximum likelihood 
Parameters:
      estimate Std. Error
mean 0.1004483 0.11639515
sd   0.8230380 0.08230325

dan Anda dapat melihat plot dengan

plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
plotdist(dat,"logis",para=list(location=f2$estimate[1],scale=f2$estimate[2]))
plotdist(dat,"cauchy",para=list(location=f3$estimate[1],scale=f3$estimate[2]))

sehingga terlihat masuk akal sebagai distribusi normal

masukkan deskripsi gambar di sini

tetapi juga mungkin sebagai distribusi logistik (Anda perlu sampel yang lebih besar untuk membedakannya di bagian ekor)

masukkan deskripsi gambar di sini

meskipun dengan qqplot dan melihat CDF Anda dapat mengatakan bahwa ini mungkin bukan distribusi Cauchy

masukkan deskripsi gambar di sini


1
Terima kasih Henry untuk ikhtisar yang indah. Saya telah ditanya apakah ada paket yang mengambil data dan meludahkan distribusi (dan parameter) mana yang terbaik. Apakah Anda mengetahui adanya fungsi seperti itu di salah satu paket?
Roman Luštrik

3
fitdistmemberikan estimasi parameter. Ada beberapa petunjuk tentang apa distribusi mungkin dari fungsi seperti descdist(dat, boot = 1000)tetapi mereka juga akan mendapat manfaat dari sampel yang lebih besar.
Henry

Tak satu pun dari fungsi ini akan menyelesaikan masalah yang Anda ajukan dalam pertanyaan terakhir Anda ketika sampel tidak representatif.
John

1
@Scott Kaiser: Saya kira tidak. fitdist()adalah fungsi dalam paket fitdistrplus, dan inilah yang saya gunakan. Sementara itu fitdistr()adalah fungsi dalam paket MASS, dan tidak akan berfungsi di sini dalam formulir ini.
Henry

1
Saya tidak punya cukup poin untuk menambahkan ini sebagai komentar, tetapi hanya sebagai catatan tambahan untuk informasi yang disediakan di utas di atas, juga memungkinkan untuk memanggil saja plot(f1)alih-alih lebih berbelitplotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
swestenb
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.