Saya memiliki dataset dan ingin mengetahui distribusi mana yang paling cocok dengan data saya.
Saya menggunakan fitdistr()
fungsi untuk memperkirakan parameter yang diperlukan untuk menggambarkan distribusi yang diasumsikan (yaitu Weibull, Cauchy, Normal). Dengan menggunakan parameter-parameter tersebut, saya dapat melakukan Tes Kolmogorov-Smirnov untuk memperkirakan apakah data sampel saya berasal dari distribusi yang sama dengan asumsi distribusi saya.
Jika nilai-p> 0,05 saya dapat mengasumsikan bahwa data sampel diambil dari distribusi yang sama. Tetapi nilai-p tidak memberikan informasi apa pun tentang godness of fit, bukan?
Jadi jika nilai-p dari data sampel saya adalah> 0,05 untuk distribusi normal dan juga distribusi weibull, bagaimana saya bisa tahu distribusi mana yang lebih cocok dengan data saya?
Ini pada dasarnya adalah apa yang telah saya lakukan:
> mydata
[1] 37.50 46.79 48.30 46.04 43.40 39.25 38.49 49.51 40.38 36.98 40.00
[12] 38.49 37.74 47.92 44.53 44.91 44.91 40.00 41.51 47.92 36.98 43.40
[23] 42.26 41.89 38.87 43.02 39.25 40.38 42.64 36.98 44.15 44.91 43.40
[34] 49.81 38.87 40.00 52.45 53.13 47.92 52.45 44.91 29.54 27.13 35.60
[45] 45.34 43.37 54.15 42.77 42.88 44.26 27.14 39.31 24.80 16.62 30.30
[56] 36.39 28.60 28.53 35.84 31.10 34.55 52.65 48.81 43.42 52.49 38.00
[67] 38.65 34.54 37.70 38.11 43.05 29.95 32.48 24.63 35.33 41.34
# estimate shape and scale to perform KS-test for weibull distribution
> fitdistr(mydata, "weibull")
shape scale
6.4632971 43.2474500
( 0.5800149) ( 0.8073102)
# KS-test for weibull distribution
> ks.test(mydata, "pweibull", scale=43.2474500, shape=6.4632971)
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0686, p-value = 0.8669
alternative hypothesis: two-sided
# KS-test for normal distribution
> ks.test(mydata, "pnorm", mean=mean(mydata), sd=sd(mydata))
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0912, p-value = 0.5522
alternative hypothesis: two-sided
Nilai p adalah 0,8669 untuk distribusi Weibull, dan 0,5522 untuk distribusi normal. Jadi saya dapat berasumsi bahwa data saya mengikuti Weibull serta distribusi normal. Tetapi fungsi distribusi mana yang menggambarkan data saya lebih baik?
Mengacu pada elevendollar saya menemukan kode berikut, tetapi tidak tahu bagaimana menafsirkan hasil:
fits <- list(no = fitdistr(mydata, "normal"),
we = fitdistr(mydata, "weibull"))
sapply(fits, function(i) i$loglik)
no we
-259.6540 -257.9268
I used the fitdistr() function
..... Apafitdistr
fungsinya? Sesuatu dari Excel? Atau sesuatu yang Anda tulis sendiri di C?Jawaban:
Pertama, berikut adalah beberapa komentar cepat:
Tapi mari kita lakukan eksplorasi. Saya akan menggunakan
fitdistrplus
paket luar biasa yang menawarkan beberapa fungsi yang bagus untuk pemasangan distribusi. Kami akan menggunakan fungsi inidescdist
untuk mendapatkan beberapa ide tentang kemungkinan distribusi kandidat.Sekarang mari kita gunakan
descdist
:Kurtosis dan skewness kuadrat dari sampel Anda adalah plot sebagai titik biru bernama "Observasi". Tampaknya kemungkinan distribusi termasuk Weibull, Lognormal, dan mungkin distribusi Gamma.
Mari kita paskan distribusi Weibull dan distribusi normal:
Sekarang periksa fit untuk yang normal:
Dan untuk Weibull:
Keduanya terlihat bagus tetapi dinilai oleh QQ-Plot, Weibull mungkin terlihat sedikit lebih baik, terutama di bagian ekor. Sejalan dengan itu, AIC dari Weibull fit lebih rendah dibandingkan dengan normal:
Simulasi tes Kolmogorov-Smirnov
Saya akan menggunakan prosedur @ Aksakal yang dijelaskan di sini untuk mensimulasikan statistik KS di bawah nol.
ECDF dari statistik-KS yang disimulasikan terlihat seperti berikut:
Ini mengkonfirmasi kesimpulan grafis kami bahwa sampel tersebut kompatibel dengan distribusi Weibull.
Seperti yang dijelaskan di sini , kita dapat menggunakan bootstrap untuk menambahkan interval kepercayaan pointwise ke perkiraan Weibull PDF atau CDF:
Distribusi otomatis cocok dengan GAMLSS
gamlss
R
fitDist
type = "realline"
type = "realsplus"
Menurut AIC, distribusi Weibull (lebih khusus
WEI2
, parametriisasi khusus dari itu) paling cocok dengan data. Parameterisasi distribusi yang tepatWEI2
ditentukan dalam dokumen ini di halaman 279. Mari kita periksa kecocokan dengan melihat residu dalam plot cacing (pada dasarnya plot QQ yang tidak tren):Kami perkirakan residunya mendekati garis horizontal tengah dan 95% di antaranya terletak di antara kurva putus-putus atas dan bawah, yang bertindak sebagai interval kepercayaan 95% searah. Dalam hal ini, plot worm terlihat bagus untuk saya yang menunjukkan bahwa distribusi Weibull cukup memadai.
sumber
gofstat
dan AIC. Tidak ada konsensus tentang apa cara terbaik untuk menentukan distribusi "terbaik". Saya suka metode grafis dan AIC.Plot sebagian besar merupakan cara yang baik untuk mendapatkan gambaran yang lebih baik tentang seperti apa data Anda. Dalam kasus Anda, saya akan merekomendasikan memplot fungsi distribusi kumulatif empiris (ecdf) terhadap cdf teoritis dengan parameter yang Anda dapatkan dari fitdistr ().
Saya melakukan itu sekali untuk data saya dan juga termasuk interval kepercayaan. Ini gambar yang saya dapat menggunakan ggplot2 ().
Garis hitam adalah fungsi distribusi kumulatif empiris dan garis berwarna adalah cdf dari distribusi yang berbeda menggunakan parameter yang saya dapat menggunakan metode Maximum Likelihood. Orang dapat dengan mudah melihat bahwa distribusi eksponensial dan normal tidak cocok untuk data, karena garis-garis memiliki bentuk yang berbeda dari garis ek dan garis yang cukup jauh dari garis ek. Sayangnya distribusi lainnya cukup dekat. Tapi saya akan mengatakan bahwa garis logNormal adalah yang paling dekat dengan garis hitam. Dengan menggunakan ukuran jarak (misalnya MSE) seseorang dapat memvalidasi asumsi tersebut.
Jika Anda hanya memiliki dua distribusi yang bersaing (misalnya memilih yang tampaknya paling cocok dalam plot), Anda dapat menggunakan Likelihood-Ratio-Test untuk menguji distribusi mana yang lebih cocok.
sumber