Estimando uma distribuição com base em três percentis

23

Quais métodos posso usar para inferir uma distribuição se conhecer apenas três percentis?

Por exemplo, eu sei que em um determinado conjunto de dados, o quinto percentil é 8.135, o 50. ° é 11.259 e o 95. ° é 23.611. Quero poder passar de qualquer outro número para seu percentil.

Não são meus dados, e essas são todas as estatísticas que tenho. É claro que a distribuição não é normal. A única outra informação que tenho é que esses dados representam o financiamento per capita do governo para diferentes distritos escolares.

Sei o suficiente sobre estatísticas para saber que esse problema não tem uma solução definitiva, mas não o suficiente para saber como encontrar boas suposições.

Uma distribuição lognormal seria apropriada? Quais ferramentas posso usar para executar a regressão (ou preciso fazer isso sozinho)?

Mark Eichenlaub
fonte
Eu adicionei a tag r para que o código R seja destacado no meu comentário
mpiktas
Para um exemplo detalhado da mesma pergunta (e sua solução), consulte o thread duplicado em stats.stackexchange.com/questions/133129 .
whuber

Respostas:

17

O uso de um método puramente estatístico para realizar este trabalho não fornecerá absolutamente nenhuma informação adicional sobre a distribuição dos gastos escolares: o resultado refletirá apenas uma escolha arbitrária de algoritmo.

Você precisa de mais dados .

É fácil obter isso: use dados de anos anteriores, de distritos comparáveis, qualquer que seja. Por exemplo, os gastos federais em 14866 distritos escolares em 2008 estão disponíveis no site do Censo . Isso mostra que, em todo o país, a receita federal total per capita (registrada) era distribuída aproximadamente normalmente normalmente, mas a divisão por estado mostra uma variação substancial ( por exemplo , os gastos com toras no Alasca têm uma inclinação negativa, enquanto os gastos com toras no Colorado têm uma inclinação positiva forte) . Use esses dados para caracterizar a forma provável de distribuição e, em seguida, ajuste seus quantis a essa forma.

Se você estiver próximo da forma distributiva correta, poderá reproduzir os quantis com precisão, ajustando um ou no máximo dois parâmetros. A melhor técnica para encontrar o ajuste dependerá da forma distributiva usada, mas - muito mais importante - dependerá do que você pretende usar os resultados para. Você precisa estimar um valor médio de gastos? Limites superior e inferior de gastos? Seja o que for, você deseja adotar alguma medida de adequação que lhe proporcione a melhor chance de tomar boas decisões com seus resultados. Por exemplo, se seu interesse estiver focado nos 10% superiores de todos os gastos, convém ajustar o percentil 95 com precisão e você pode se importar pouco em ajustar o percentil 5. Nenhuma técnica sofisticada de ajuste fará essas considerações para você.

É claro que ninguém pode legitimamente garantir que esse método orientado a decisões, com base em dados, tenha um desempenho melhor (ou pior) do que alguma receita estatística, mas - diferentemente de uma abordagem puramente estatística - esse método tem uma base fundamentada na realidade, com foco nas suas necessidades, dando-lhe credibilidade e defesa contra críticas.

whuber
fonte
2
+1 Você precisa de mais dados e do que pretende usar os resultados para merecer ênfase extra.
vqv
2
Parece que há muita sabedoria em sua resposta. Vou ter que consultar mais com as pessoas que me colocaram o problema sobre o que elas querem. Obrigado pelos links e conselhos.
Mark Eichenlaub
1
@ Mark Boa sorte!
whuber
23

Como o @whuber apontou, os métodos estatísticos não funcionam exatamente aqui. Você precisa inferir a distribuição de outras fontes. Quando você conhece a distribuição, tem um exercício de resolução de equações não lineares. Denuncie por a função quantil da distribuição de probabilidade escolhida com o vetor de parâmetros θ . O que você tem é o seguinte sistema não-linear de equações:fθ

q0,05=f(0,05,θ)q0,5=f(0,5,θ)q0,95=f(0,95,θ)

qθ

(q0,05-f(0,05,θ))2+(q0,5-f(0,5,θ))2+(q0,95-f(0,95,θ))2

Aqui eu escolhi a função quadrática, mas você pode escolher o que quiser. De acordo com os comentários do @whuber, você pode atribuir pesos, para que quantis mais importantes possam ser ajustados com mais precisão.

Para quatro e mais parâmetros, o sistema é subdeterminado, existindo um número infinito de soluções.

Aqui está um código R de exemplo que ilustra essa abordagem. Para fins de demonstração, eu gero os quantis da distribuição Singh- Maddala do pacote VGAM . Essa distribuição possui 3 parâmetros e é usada na modelagem de distribuição de renda.

 q <- qsinmad(c(0.05,0.5,0.95),2,1,4)
 plot(x<-seq(0,2,by=0.01), dsinmad(x, 2, 1, 4),type="l")
 points(p<-c(0.05, 0.5, 0.95), dsinmad(p, 2, 1, 4))

texto alternativo

Agora forme a função que avalia o sistema não linear de equações:

 fn <- function(x,q) q-qsinmad(c(0.05, 0.5, 0.95), x[1], x[2], x[3])

Verifique se os valores verdadeiros satisfazem a equação:

 > fn(c(2,1,4),q)
   [1] 0 0 0

Para resolver o sistema de equações não lineares, uso a função nleqslvdo pacote nlqeslv .

 > sol <- nleqslv(c(2.4,1.5,4.3),fn,q=q)
 > sol$x       
  [1] 2.000000 1.000000 4.000001

Como vemos, obtemos a solução exata. Agora vamos tentar ajustar a distribuição log-normal a esses quantis. Para isso, usaremos a optimfunção

 > ofn <- function(x,q)sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)
 > osol <- optim(c(1,1),ofn)
 > osol$par
   [1] -0.905049  0.586334

Agora plote o resultado

  plot(x,dlnorm(x,osol$par[1],osol$par[2]),type="l",col=2)
  lines(x,dsinmad(x,2,1,4))
  points(p,dsinmad(p,2,1,4))

texto alternativo

A partir disso, vemos imediatamente que a função quadrática não é tão boa.

Espero que isto ajude.

mpiktas
fonte
1
Ótimo! Obrigado por todo o esforço que foi feito para isso, mpiktas. Eu não estou familiarizado com R, mas seu código é explicado suficientemente bem para que eu ainda possa dizer com facilidade o que você está fazendo.
Mark Eichenlaub
Muito obrigado por este exemplo. Eu acho que há 2 erros ofn <- function(x,q) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2). Proponho ofn <- function(x) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2],x[3]))^2)porque qnão é uma entrada ofne X[3]está faltando. Saudações
9

Experimente o pacote rriskDistributions e - se tiver certeza da família de distribuição lognormal - use o comando

get.lnorm.par(p=c(0.05,0.5,0.95),q=c(8.135,11.259,23.611))

o que deve resolver seu problema. Use fit.percse não quiser restringir a um pdf conhecido.

Matthias Greiner
fonte
Solução super simples!
Luchonacho
6

Para um lognormal, a proporção do percentil 95 para a mediana é a mesma que a proporção da mediana para o 5º percentil. Isso nem é quase verdade aqui, então o lognormal não seria um bom ajuste.

Você tem informações suficientes para ajustar uma distribuição com três parâmetros e claramente precisa de uma distribuição inclinada. Para simplicidade analítica, eu sugeriria a distribuição logística-logística deslocada como sua função quantílica (ou seja, a inversa de sua função de distribuição cumulativa) possa ser escrita em uma forma fechada razoavelmente simples, para que você possa obter expressões de forma fechada para seus três parâmetros em termos de seus três quantis com um pouco de álgebra (deixarei isso como um exercício!). Essa distribuição é usada na análise de frequência de inundação.

Isso não dará nenhuma indicação da incerteza nas estimativas dos outros quantis. Não sei se você precisa disso, mas, como estatístico, acho que devo fornecê-lo, por isso não estou realmente satisfeito com esta resposta. Eu certamente não usaria esse método, ou provavelmente qualquer outro método, para extrapolar (muito) fora do intervalo dos percentis 5 a 95.

uma parada
fonte
1
Obrigado pelo conselho. Re: lognormal - eu poderia fazer com que as proporções de percentis para mediana subtraíssem 7077 de tudo e, em seguida, adicionando-o novamente no final. Quão ruim seria essa ideia?
precisa saber é o seguinte
1
Bom ponto, isso daria uma 'distribuição log-normal deslocada'. O log-normal e o log-logistic têm formas bastante semelhantes, exceto as caudas mais pesadas do último, portanto, você pode tentar os dois e comparar os resultados.
onestop 6/01/11
Compare como? O lognormal deslocado é garantido para caber perfeitamente nos quantis. Quase qualquer família de três parâmetros se encaixa perfeitamente. Como você compara dois ajustes perfeitos?
whuber
@whuber, quis dizer comparar as previsões resultantes para os percentis correspondentes a outros valores
onestop
Estou sentindo falta de algo: que outros valores? O OP afirma que apenas três percentis estão disponíveis, nada mais.
whuber
2

Sobre as únicas coisas que você pode deduzir dos dados é que a distribuição é não simétrica. Você não pode nem dizer se esses quantis vieram de uma distribuição ajustada ou apenas do ecdf.

Se eles vieram de uma distribuição ajustada, você pode tentar todas as distribuições que puder imaginar e ver se há alguma correspondência. Caso contrário, não há informações suficientes. Você pode interpolar um polinômio de 2º grau ou um spline de 3º grau para a função quantil e usá-la, ou criar uma teoria sobre a família de distribuição e combinar quantis, mas qualquer dedução que você faça com esses métodos seria profundamente suspeita.

sesqu
fonte
1
Polinômios e splines provavelmente não são CDFs válidos.
whuber
Boa observação. Nesse caso, o polinômio quadrático usual não funciona, mas existem infinitos splines quadráticos para escolher (pense Bézier) que não deveriam ter o mesmo problema (embora alguns ainda possam exigir o corte de domínio). Da mesma forma, deve ser possível encontrar um spline cúbico monotônico adequado. Estou ciente dos algoritmos de spline que garantem a monotonicidade, mas não consigo encontrar um agora, então tenho que deixar o assunto em "escolher algo que você gosta que funcione como cdf".
sesqu
Você poderia ir tão longe quanto ajustar um spline monotônico (ou o que seja) aos logaritmos dos quantis, obtendo assim algo razoável dentro do intervalo dos quantis. Mas isso não ajuda em ajustar as caudas além dos dois quantis extremos. Deve-se relutar em deixar que um aspecto tão importante do ajuste seja deixado para as características acidentais do procedimento de ajuste numérico.
whuber
2

O uso de quantis para estimar parâmetros de distribuições a priori é discutido na literatura sobre medição de tempo de resposta humana como "estimativa de probabilidade máxima quantil" (QMPE, embora originalmente chamado erroneamente de "estimativa de verossimilhança de quantil máxima", QMLE), discutido longamente por Heathcote e colegas . Você pode ajustar várias distribuições a priori diferentes (ex-Gaussian, Lognormal deslocada, Wald e Weibull) e comparar as probabilidades de log de soma dos melhores ajustes resultantes para cada distribuição para encontrar o sabor da distribuição que parece produzir o melhor ajuste.

Mike Lawrence
fonte
2
É garantida qualquer distribuição de três parâmetros para ajustar três quantis perfeitamente. Portanto, faz sentido usar essa abordagem para ajustar apenas um ou dois parâmetros. Também não faz sentido comparar um ajuste de um parâmetro com um ajuste de dois parâmetros (com uma família diferente) com base apenas na probabilidade.
whuber
@whuber, re: "Qualquer distribuição de três parâmetros é garantida para encaixar perfeitamente três quantis". Eu não tinha percebido isso, tão bom saber! re: "Também não faz sentido comparar um ajuste de um parâmetro com um ajuste de dois parâmetros (com uma família diferente) com base apenas na probabilidade". Ah sim, de fato; Não mencionei que seria necessário aplicar alguma correção de complexidade (AIC, BIC, ...) se comparar ajustes a sabores de distribuição com diferentes números de parâmetros. Obrigado por apontar isso.
Mike Lawrence
Eu exagerei um pouco, porque estava pensando em dois dos parâmetros sendo escala e localização e o terceiro compreendendo uma ampla gama de formas. Mesmo assim, a maioria das famílias de três parâmetros possui flexibilidade suficiente para ajustar três percentis, desde que sejam todos distintos.
whuber
1

Você pode usar suas informações de percentil para simular os dados de alguma forma e usar o pacote "logspline" do R para estimar a distribuição não parametricamente. Abaixo está minha função que emprega um método como este.

calc.dist.from.median.and.range <- function(m, r) 
{
    ## PURPOSE: Return a Log-Logspline Distribution given (m, r).
    ##          It may be necessary to call this function multiple times in order to get a satisfying distribution (from the plot). 
    ## ----------------------------------------------------------------------
    ## ARGUMENT:
    ##   m: Median
    ##   r: Range (a vector of two numbers)
    ## ----------------------------------------------------------------------
    ## RETURN: A log-logspline distribution object.
    ## ----------------------------------------------------------------------
    ## AUTHOR: Feiming Chen,  Date: 10 Feb 2016, 10:35

    if (m < r[1] || m > r[2] || r[1] > r[2]) stop("Misspecified Median and Range")

    mu <- log10(m)
    log.r <- log10(r)

    ## Simulate data that will have median of "mu" and range of "log.r"
    ## Distribution on the Left/Right: Simulate a Normal Distribution centered at "mu" and truncate the part above/below the "mu".
    ## May keep sample size intentionaly small so as to introduce uncertainty about the distribution. 
    d1 <- rnorm(n=200, mean=mu, sd=(mu - log.r[1])/3) # Assums 3*SD informs the bound
    d2 <- d1[d1 < mu]                   # Simulated Data to the Left of "mu"
    d3 <- rnorm(n=200, mean=mu, sd=(log.r[2] - mu)/3)
    d4 <- d3[d3 > mu]                   # Simulated Data to the Right of "mu"
    d5 <- c(d2, d4)                     # Combined Simulated Data for the unknown distribution

    require(logspline)
    ans <- logspline(x=d5)
    plot(ans)
    return(ans)
}
if (F) {                                # Unit Test 
    calc.dist.from.median.and.range(m=1e10, r=c(3.6e5, 3.1e12))
    my.dist <- calc.dist.from.median.and.range(m=1e7, r=c(7e2, 3e11))
    dlogspline(log10(c(7e2, 1e7, 3e11)), my.dist) # Density
    plogspline(log10(c(7e2, 1e7, 3e11)), my.dist) # Probability
    10^qlogspline(c(0.05, 0.5, 0.95), my.dist) # Quantiles 
    10^rlogspline(10, my.dist) # Random Sample 
}
Feiming Chen
fonte