Saya mendapatkan data, dan memplot distribusi data, dan menggunakan fungsi qqnorm, tetapi sepertinya tidak mengikuti distribusi normal, jadi distribusi mana yang harus saya gunakan untuk menggambarkan data?
Fungsi distribusi kumulatif empiris
Saya mendapatkan data, dan memplot distribusi data, dan menggunakan fungsi qqnorm, tetapi sepertinya tidak mengikuti distribusi normal, jadi distribusi mana yang harus saya gunakan untuk menggambarkan data?
Fungsi distribusi kumulatif empiris
Jawaban:
Saya sarankan Anda mencoba distribusi Lambert W x F yang berat atau miring yang mencoba Lambert W x F (penafian: saya penulisnya). Dalam R mereka diimplementasikan dalam paket LambertW .
Mereka muncul dari transformasi parametrik, non-linear dari variabel acak (RV) , ke versi berekor berat (condong) . Untuk menjadi Gaussian, ekor berat Lambert W x F berkurang menjadi milik Tukey distribusi. (Di sini saya akan menguraikan versi heavy-tail, yang miring adalah analog.)
Mereka memiliki satu parameter (untuk Lambert miring x F) yang mengatur derajat bobot ekor (skewness). Secara opsional, Anda juga dapat memilih ekor berat kiri dan kanan yang berbeda untuk mencapai ekor berat dan asimetri. Ini mengubah Normal standar ke Lambert W Gaussian oleh
Jika memiliki ekor lebih berat daripada ; untuk, .
Jika Anda tidak ingin menggunakan Gaussian sebagai garis dasar, Anda dapat membuat versi Lambert W lain dari distribusi favorit Anda, misalnya, t, seragam, gamma, eksponensial, beta, ... Namun, untuk dataset Anda, double heavy- ekor Lambert W x Gaussian (atau kemiringan Lambert W xt) tampaknya menjadi titik awal yang baik.
library(LambertW)
set.seed(10)
### Set parameters ####
# skew Lambert W x t distribution with
# (location, scale, df) = (0,1,3) and positive skew parameter gamma = 0.1
theta.st <- list(beta = c(0, 1, 3), gamma = 0.1)
# double heavy-tail Lambert W x Gaussian
# with (mu, sigma) = (0,1) and left delta=0.2; right delta = 0.4 (-> heavier on the right)
theta.hh <- list(beta = c(0, 1), delta = c(0.2, 0.4))
### Draw random sample ####
# skewed Lambert W x t
yy <- rLambertW(n=1000, distname="t", theta = theta.st)
# double heavy-tail Lambert W x Gaussian (= Tukey's hh)
zz =<- rLambertW(n=1000, distname = "normal", theta = theta.hh)
### Plot ecdf and qq-plot ####
op <- par(no.readonly=TRUE)
par(mfrow=c(2,2), mar=c(3,3,2,1))
plot(ecdf(yy))
qqnorm(yy); qqline(yy)
plot(ecdf(zz))
qqnorm(zz); qqline(zz)
par(op)
Dalam praktiknya, tentu saja, Anda harus memperkirakan dimana adalah parameter distribusi input Anda (misalnya, untuk seorang Gaussian, atau untuk sebuah distribusi; lihat kertas untuk detailnya):
### Parameter estimation ####
mod.Lst <- MLE_LambertW(yy, distname="t", type="s")
mod.Lhh <- MLE_LambertW(zz, distname="normal", type="hh")
layout(matrix(1:2, ncol = 2))
plot(mod.Lst)
plot(mod.Lhh)
Karena generasi berekor berat ini didasarkan pada transformasi bijective dari RVs / data, Anda dapat menghapus ekor berekor dari data dan memeriksa apakah mereka bagus sekarang, yaitu, jika mereka Gaussian (dan mengujinya menggunakan tes Normality).
### Test goodness of fit ####
## test if 'symmetrized' data follows a Gaussian
xx <- get_input(mod.Lhh)
normfit(xx)
Ini bekerja cukup baik untuk dataset simulasi. Saya sarankan Anda mencobanya dan melihat apakah Anda juga bisa Gaussianize()
data Anda .
Namun, seperti yang ditunjukkan @whuber, bimodality dapat menjadi masalah di sini. Jadi mungkin Anda ingin memeriksa data yang diubah (tanpa ekor) apa yang terjadi dengan bimodality ini dan dengan demikian memberi Anda wawasan tentang cara memodelkan data (asli) Anda.
Ini terlihat seperti distribusi asimetris yang memiliki ekor lebih panjang, di kedua arah, dari distribusi normal.
Anda dapat melihat ekor panjang karena titik yang diamati lebih ekstrim daripada yang diharapkan di bawah distribusi normal, di sisi kiri dan kanan (yaitu masing-masing di bawah dan di atas garis).
Anda dapat melihat asimetri karena, di ekor kanan, sejauh mana titik-titik lebih ekstrim daripada apa yang diharapkan di bawah distribusi normal lebih besar daripada di ekor kiri.
Saya tidak dapat memikirkan distribusi "kalengan" yang memiliki bentuk ini tetapi tidak terlalu sulit untuk "memasak" distribusi yang memiliki properti yang disebutkan di atas.
Berikut ini adalah contoh yang disimulasikan R
:
set.seed(1234)
x=rexp(1e3)
y=-rexp(1e3,rate=2)
z=c(x,y)
qqnorm(z)
qqline(z) # see below for the plot.
plot( ecdf(z) ) # see below for plot (2nd plot)
Variabel di sini adalah campuran 50/50 antara dan sebuah tercermin di sekitar 0. Pilihan ini dibuat karena akan secara asimetris, karena ada parameter laju yang berbeda, dan keduanya akan berekor panjang relatif terhadap distribusi normal, dengan ekor kanan lebih panjang, karena laju di tangan kanan sisi lebih besar.
Contoh ini menghasilkan qqplot dan CDF empiris yang sangat mirip (secara kualitatif) dengan apa yang Anda lihat:
Untuk mengetahui distribusi mana yang paling cocok, saya pertama-tama akan mengidentifikasi beberapa target distribusi potensial: Saya akan berpikir tentang proses dunia nyata yang menghasilkan data, kemudian saya akan memasukkan beberapa kepadatan potensial ke data dan membandingkan skor kemungkinan log mereka untuk melihat distribusi potensial mana yang paling cocok. Ini mudah di R dengan fungsi fitdistr di perpustakaan MASS.
Jika data Anda seperti Macro's z maka:
>fitdistr(z,'cauchy',list(location=mean(z),scale=sqrt(sd(z))))$loglik
[1] -2949.068
> fitdistr(z,'normal')$loglik
[1] -3026.648
> fitdistr(z,'t')$loglik
[1] -2830.861
Jadi ini memberikan distribusi t yang paling cocok (dari yang kami coba) untuk data Makro. konfirmasikan ini dengan beberapa qqplot menggunakan parameter dari fitdistr.
> qqplot(z,rt(length(z),df=2.7))
Kemudian bandingkan plot ini dengan distribusi yang cocok lainnya.