Bagaimana saya memeriksa apakah data saya cocok dengan distribusi eksponensial?

22

Bagaimana saya bisa mengecek apakah data saya mis. Gaji berasal dari distribusi eksponensial berkelanjutan dalam R?

Ini histogram dari sampel saya:

masukkan deskripsi gambar di sini

. Bantuan apa pun akan sangat dihargai!

bersabar
sumber
1
Apakah variabel Anda diskrit atau kontinu? Distribusi eksponensial didefinisikan sebagai kontinu .
Penasaran
terus menerus Saya bertanya-tanya apakah ada tes di R untuk memeriksa itu
stjudent
1
Selamat datang. Cari fungsi fitdistrdi R. Ini menyesuaikan fungsi kepadatan probabilitas (pdf) berdasarkan metode estimasi kemungkinan maksimum (MLE). Juga mencari dalam istilah situs ini sebagai pdf, fitdistr, mle dan pertanyaan serupa akan muncul. Ingatlah bahwa pertanyaan seperti itu hampir membutuhkan contoh yang dapat direproduksi untuk mengumpulkan jawaban yang baik. Juga, akan membantu jika pertanyaannya tidak murni tentang pemrograman (yang mungkin membuatnya ditunda sebagai topik yang tidak dibahas).
Andre Silva
8
Distribusi eksponensial akan memplot sebagai garis lurus terhadap posisi 1 - plot) di mana posisi plot adalah (peringkat - a ) / ( n - 2 a + 1 ) , peringkat 1 untuk nilai terendah, n adalah ukuran sampel, dan pilihan populer untuk sebuah meliputi 1 / 2 . Itu memberikan tes informal yang bisa sama atau lebih berguna daripada tes formal apa pun. -dalam(1--Sebuah)/(n-2Sebuah+1)1nSebuah1/2
Nick Cox
@Berkan mengembangkan ide plot kuantil di posnya.
Nick Cox

Jawaban:

29

Saya akan melakukannya dengan terlebih dahulu memperkirakan hanya ratemenggunakan parameter distribusi fitdistr. Ini tidak akan memberi tahu Anda apakah distribusinya cocok atau tidak, jadi Anda harus menggunakan uji goodness of fit . Untuk ini, Anda dapat menggunakan ks.test:

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

masukkan deskripsi gambar di sini

Dari pengalaman pribadi saya (meskipun saya belum pernah menemukannya secara resmi di mana pun, harap konfirmasikan atau koreksi saya), ks.test hanya akan berjalan jika Anda memberikan perkiraan parameter terlebih dahulu. Anda tidak dapat membiarkannya memperkirakan parameter secara otomatis seperti misalnya goodfitmelakukannya. Itu sebabnya Anda membutuhkan prosedur dua langkah ini fitdistr.

Untuk info lebih lanjut ikuti panduan yang sangat baik dari Ricci: PEMASANGAN DISTRIBUSI DENGAN R .

Ingin tahu
sumber
2
+1. Apakah ks.test tes terbaik untuk menguji kebaikan dalam situasi seperti itu? Saya pikir Anda juga menjawab satu pertanyaan saya .
Andre Silva
4
hanya kepala saja, Anda harus berhati-hati jika Anda memperkirakan parameter dari data itu sendiri. Dalam hal itu, tes seperti anderson sayang mungkin yang terbaik, karena kuat terhadap situasi seperti itu.
JPC
Pada uji KS untuk eksponensial ketika parameter laju diperkirakan dari data: lihat Pertanyaan naif tentang uji Kolmogorov Smirnov .
Scortchi
8

Walaupun saya biasanya merekomendasikan memeriksa eksponensial dengan menggunakan plot diagnostik (seperti plot QQ), saya akan membahas tes, karena orang sering menginginkannya:

Seperti yang disarankan Tomas, tes Kolmogorov-Smirnov tidak cocok untuk menguji eksponensialitas dengan parameter yang tidak ditentukan.

Namun, jika Anda menyesuaikan tabel untuk estimasi parameter, Anda mendapatkan tes Lilliefors untuk distribusi eksponensial.

Lilliefors, H. (1969), "Pada uji Kolmogorov-Smirnov untuk distribusi eksponensial dengan mean tidak diketahui", Jurnal Asosiasi Statistik Amerika , Vol. 64. hlm. 387-389.

Penggunaan tes ini dibahas dalam Conover's Statistik Nonparametrik Praktis .

Namun, di D'Agostino & Stephens ' Teknik Kebaikan , mereka membahas modifikasi serupa dari uji Anderson-Darling (agak tidak jelas jika saya ingat benar, tetapi saya pikir semua informasi yang diperlukan tentang cara mendekatinya untuk kasus eksponensial adalah dapat ditemukan dalam buku), dan itu hampir pasti memiliki lebih banyak kekuatan terhadap alternatif yang menarik.

n(1-r2)r

Akhirnya, orang mungkin mengambil pendekatan uji kelancaran , seperti dalam buku karya Rayner & Best ( Tes Kelancaran Goodness of Fit) , 1990 - meskipun saya percaya ada yang lebih baru, dengan Thas dan " dalam R " ditambahkan ke judul). Kasus eksponensial juga tercakup dalam:

JCW Rayner dan DJ Best (1990), "Uji Kelancaran Goodness of Fit: An Overview", Statistik Internasional , Vol. 58, No. 1 (Apr., 1990), hlm. 9-17

Cosma Shalizi juga membahas tes mulus dalam satu bab dari catatan kuliah Analisis Data Lanjutan Sarjana , atau lihat Ch15 bukunya Analisis Data Lanjutan dari Sudut Pandang Dasar .

Untuk beberapa hal di atas, Anda mungkin perlu mensimulasikan distribusi statistik uji; untuk tabel lain tersedia (tetapi dalam beberapa kasus, mungkin akan lebih mudah untuk mensimulasikan, atau bahkan lebih akurat untuk mensimulasikan diri Anda, seperti dengan tes Lilliefors, karena ukuran simulasi terbatas pada aslinya).

n(1-r2)

Glen_b -Reinstate Monica
sumber
5

Anda dapat menggunakan plot-qq , yang merupakan metode grafis untuk membandingkan dua distribusi probabilitas dengan memplot kuantilnya satu sama lain.

Di R, tidak ada fungsi qq-plot out-of-the-box untuk distribusi eksponensial secara khusus (setidaknya di antara fungsi-fungsi dasar). Namun, Anda dapat menggunakan ini:

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

Sementara menginterpretasikan hasil Anda: Jika dua distribusi yang dibandingkan adalah serupa, titik-titik dalam plot qq kira-kira akan terletak pada baris y = x. Jika distribusi terkait linier, titik-titik dalam plot qq kira-kira akan terletak pada garis, tetapi tidak harus pada garis y = x.

Zhubarb
sumber
2
Di Stata, qexpdari SSC adalah implementasi kalengan.
Nick Cox