(PS) Antes de tudo, acho que Glen_b está certo nos comentários acima sobre a utilidade de um teste: dados reais certamente não são exatamente distribuídos por Pareto, e para aplicações mais práticas a pergunta seria "quão boa é a aproximação de Pareto?" - e o gráfico QQ é uma boa maneira de mostrar a qualidade dessa aproximação.
De qualquer forma, você pode fazer seu teste com a estatística Kolmogorov-Smirnov, depois de estimar os parâmetros por máxima verossimilhança. Essa estimativa de parâmetro impede o uso do valor- de , portanto, você pode executar o bootstrap paramétrico para estimar. Como Glen_b diz no comentário, isso pode ser conectado ao teste de Lilliefors .pks.test
Aqui estão algumas linhas de código R.
Primeiro defina as funções básicas para lidar com as distribuições de 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)
A função a seguir calcula o MLE dos parâmetros (justificativas na Wikipedia ).
pareto.mle <- function(x)
{
xm <- min(x)
alpha <- length(x)/(sum(log(x))-length(x)*log(xm))
return( list(xm = xm, alpha = alpha))
}
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))
}
Agora, por exemplo, uma amostra proveniente de uma distribuição de 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
χ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
Note que não afirmo que este teste seja imparcial: quando a amostra é pequena, pode existir algum viés. O bootstrap paramétrico não leva bem em conta a incerteza na estimativa do parâmetro (pense no que aconteceria ao usar essa estratégia para testar ingenuamente se a média de alguma variável normal com variação desconhecida é zero).
PS Wikipedia diz algumas palavras sobre isso. Aqui estão duas outras perguntas para as quais uma estratégia semelhante foi sugerida: Teste de qualidade do ajuste para uma mistura , teste de qualidade do ajuste para uma distribuição gama .