(PS) Pertama-tama saya pikir Glen_b tepat di komentar di atas nya pada kegunaan tes seperti: data riil yang pasti tidak persis Pareto didistribusikan, dan untuk aplikasi praktis yang paling pertanyaan akan "seberapa baik adalah pendekatan Pareto?" - dan plot QQ adalah cara yang baik untuk menunjukkan kualitas perkiraan seperti itu.
Cara apa pun yang dapat Anda lakukan dengan statistik Kolmogorov-Smirnov, setelah memperkirakan parameter dengan kemungkinan maksimum. Estimasi parameter ini mencegah untuk menggunakan -value , sehingga Anda dapat melakukan bootstrap parametrik untuk memperkirakannya. Seperti yang Glen_b katakan dalam komentar, ini dapat dihubungkan ke tes Lilliefors .pks.test
Berikut adalah beberapa baris kode R.
Pertama-tama tentukan fungsi dasar untuk menangani distribusi Pareto.
# distribution, cdf, quantile and random functions for Pareto distributions
dpareto <- function(x, xm, alpha) ifelse(x > xm , alpha*xm**alpha/(x**(alpha+1)), 0)
ppareto <- function(q, xm, alpha) ifelse(q > xm , 1 - (xm/q)**alpha, 0 )
qpareto <- function(p, xm, alpha) ifelse(p < 0 | p > 1, NaN, xm*(1-p)**(-1/alpha))
rpareto <- function(n, xm, alpha) qpareto(runif(n), xm, alpha)
Fungsi berikut menghitung MLE dari parameter (justifikasi dalam Wikipedia ).
pareto.mle <- function(x)
{
xm <- min(x)
alpha <- length(x)/(sum(log(x))-length(x)*log(xm))
return( list(xm = xm, alpha = alpha))
}
Dan fungsi ini menghitung statistik KS, dan menggunakan bootstrap parametrik untuk memperkirakan nilai- .p
pareto.test <- function(x, B = 1e3)
{
a <- pareto.mle(x)
# KS statistic
D <- ks.test(x, function(q) ppareto(q, a$xm, a$alpha))$statistic
# estimating p value with parametric bootstrap
B <- 1e5
n <- length(x)
emp.D <- numeric(B)
for(b in 1:B)
{
xx <- rpareto(n, a$xm, a$alpha);
aa <- pareto.mle(xx)
emp.D[b] <- ks.test(xx, function(q) ppareto(q, aa$xm, aa$alpha))$statistic
}
return(list(xm = a$xm, alpha = a$alpha, D = D, p = sum(emp.D > D)/B))
}
Sekarang, misalnya, sampel yang berasal dari distribusi Pareto:
> # generating 100 values from Pareto distribution
> x <- rpareto(100, 0.5, 2)
> pareto.test(x)
$xm
[1] 0.5007593
$alpha
[1] 2.080203
$D
D
0.06020594
$p
[1] 0.69787
... dan dari a :χ2(2)
> # generating 100 values from chi square distribution
> x <- rchisq(100, df=2)
> pareto.test(x)
$xm
[1] 0.01015107
$alpha
[1] 0.2116619
$D
D
0.4002694
$p
[1] 0
Perhatikan bahwa saya tidak mengklaim bahwa tes ini tidak bias: ketika sampel kecil, beberapa bias mungkin ada. Bootstrap parametrik tidak memperhitungkan ketidakpastian pada estimasi parameter (pikirkan apa yang akan terjadi ketika menggunakan strategi ini untuk menguji secara naif jika rata-rata dari beberapa variabel normal dengan varian yang tidak diketahui adalah nol).
PS Wikipedia mengatakan beberapa kata tentang ini. Berikut adalah dua pertanyaan lain yang disarankan untuk strategi yang serupa: Uji goodness of fit untuk campuran , uji goodness of fit untuk distribusi gamma .