Estimación de una distribución basada en tres percentiles.


23

¿Qué métodos puedo usar para inferir una distribución si solo conozco tres percentiles?

Por ejemplo, sé que en un determinado conjunto de datos, el quinto percentil es 8.135, el percentil 50 es 11.259 y el percentil 95 es 23.611. Quiero poder pasar de cualquier otro número a su percentil.

No son mis datos, y esas son todas las estadísticas que tengo. Está claro que la distribución no es normal. La única otra información que tengo es que esta información representa el financiamiento per cápita del gobierno para diferentes distritos escolares.

Sé lo suficiente sobre estadísticas para saber que este problema no tiene una solución definitiva, pero no lo suficiente como para saber cómo encontrar buenas conjeturas.

¿Sería apropiada una distribución lognormal? ¿Qué herramientas puedo usar para realizar la regresión (o debo hacerlo yo mismo)?


agregué la etiqueta r para que el código R se resalte en mi comentario
mpiktas

Para ver un ejemplo detallado de la misma pregunta (y su solución), vea el hilo duplicado en stats.stackexchange.com/questions/133129 .
whuber

Respuestas:


17

El uso de un método puramente estadístico para hacer este trabajo no proporcionará absolutamente ninguna información adicional sobre la distribución del gasto escolar: el resultado simplemente reflejará una elección arbitraria de algoritmo.

Necesitas más datos .

Esto es fácil de encontrar: use datos de años anteriores, de distritos comparables, lo que sea. Por ejemplo, el gasto federal en 14866 distritos escolares en 2008 está disponible en el sitio del Censo . Muestra que en todo el país, los ingresos federales totales per cápita (inscriptos) se distribuyeron de manera aproximadamente lognormalmente, pero desglosarlos por estado muestra una variación sustancial ( por ejemplo , el gasto de registro en Alaska tiene un sesgo negativo, mientras que el gasto de registro en Colorado tiene un sesgo positivo fuerte) . Use esos datos para caracterizar la forma probable de distribución y luego ajuste sus cuantiles a esa forma.

Si incluso está cerca de la forma de distribución correcta, entonces debería poder reproducir los cuantiles con precisión ajustando uno o como máximo dos parámetros. La mejor técnica para encontrar el ajuste dependerá de la forma de distribución que utilice, pero, lo que es más importante, dependerá de para qué pretende utilizar los resultados.. ¿Necesita estimar un gasto promedio? ¿Límites superior e inferior del gasto? Sea lo que sea, desea adoptar una medida de bondad de ajuste que le brinde la mejor oportunidad de tomar buenas decisiones con sus resultados. Por ejemplo, si su interés se centra en el 10% superior de todos los gastos, querrá ajustar el percentil 95 con precisión y es posible que le importe poco ajustarse al percentil 5. Ninguna técnica de ajuste sofisticada hará estas consideraciones por usted.

Por supuesto, nadie puede garantizar legítimamente que este método orientado a la toma de decisiones basado en datos funcionará mejor (o peor) que alguna receta estadística, pero, a diferencia de un enfoque puramente estadístico, este método tiene una base basada en la realidad, con un enfoque en sus necesidades, dándole cierta credibilidad y defensa contra las críticas.


2
+1 Necesitas más datos y para lo que pretendes usar los resultados merecen un énfasis adicional.
vqv

2
Parece que hay mucha sabiduría en tu respuesta. Tendré que consultar más con las personas que me plantearon el problema sobre lo que quieren. Gracias por los enlaces y los consejos.
Mark Eichenlaub

1
@ Mark ¡Mucha suerte!
whuber

23

Como señaló @whuber, los métodos estadísticos no funcionan exactamente aquí. Necesita inferir la distribución de otras fuentes. Cuando conoces la distribución tienes un ejercicio de resolución de ecuaciones no lineal. Denote por la función cuantil de la distribución de probabilidad elegida con el vector de parámetros θ . Lo que tienes es el siguiente sistema no lineal de ecuaciones:fθ

q0.05=f(0.05,θ)q0.5=f(0.5,θ)q0.95=f(0.95,θ)

qθ

(q0.05f(0.05,θ))2+(q0.5f(0.5,θ))2+(q0.95f(0.95,θ))2

Aquí elegí la función cuadrática, pero puedes elegir lo que quieras. De acuerdo con los comentarios de @whuber, puede asignar pesos, de modo que los cuantiles más importantes puedan ajustarse con mayor precisión.

Para cuatro y más parámetros, el sistema está subdeterminado, por lo que existe un número infinito de soluciones.

Aquí hay un código R de muestra que ilustra este enfoque. Para fines de demostración, genero los cuantiles de la distribución Singh-Maddala del paquete VGAM . Esta distribución tiene 3 parámetros y se usa en modelos de distribución de ingresos.

 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

Ahora forme la función que evalúa el sistema no lineal de ecuaciones:

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

Verifique si los valores verdaderos satisfacen la ecuación:

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

Para resolver el sistema de ecuaciones no lineales, uso la función nleqslvdel paquete nlqeslv .

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

Como vemos, obtenemos la solución exacta. Ahora intentemos ajustar la distribución logarítmica normal a estos cuantiles. Para esto usaremos la optimfunción.

 > 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

Ahora traza el 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

De esto vemos de inmediato que la función cuadrática no es tan buena.

Espero que esto ayude.


1
¡Excelente! Gracias por todo el esfuerzo que se hizo en esto, mpiktas. No estoy familiarizado con R, pero su código se explica lo suficientemente bien como para que aún pueda decir fácilmente lo que está haciendo.
Mark Eichenlaub

Muchas gracias por este ejemplo. Creo que hay 2 errores en ofn <- function(x,q) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2). Propongo ofn <- function(x) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2],x[3]))^2)porque qno es una entrada para ofn, y X[3]falta. Saludos

9

Pruebe el paquete rriskDistributions y, si está seguro de la familia de distribución lognormal, use el comando

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

Que debería resolver tu problema. Use fit.percen su lugar si no desea restringir a un pdf conocido.


Solución súper simple!
luchonacho

6

Para un lognormal, la razón del percentil 95 a la mediana es la misma que la razón de la mediana al quinto percentil. Eso ni siquiera es cierto aquí, así que lognormal no sería una buena opción.

Tiene suficiente información para ajustar una distribución con tres parámetros, y claramente necesita una distribución sesgada. Por simplicidad analítica, sugeriría que la distribución log-logística desplazada como su función cuantil (es decir, la inversa de su función de distribución acumulativa) se pueda escribir en una forma cerrada razonablemente simple, por lo que debería poder obtener expresiones de forma cerrada para sus tres parámetros en términos de sus tres cuantiles con un poco de álgebra (¡lo dejaré como un ejercicio!). Esta distribución se utiliza en el análisis de frecuencia de inundación.

Sin embargo, esto no le dará ninguna indicación de la incertidumbre en las estimaciones de los otros cuantiles. No sé si necesita eso, pero como estadístico creo que debería poder proporcionarlo, así que no estoy realmente satisfecho con esta respuesta. Ciertamente no usaría este método, o probablemente cualquier otro , para extrapolar (mucho) fuera del rango de los percentiles 5 al 95.


1
Gracias por el consejo. Re: lognormal: podría hacer que las proporciones de percentiles a mediana funcionen restando 7077 de todo, y luego volviéndolo a agregar al final. ¿Qué tan mala sería esa idea?
Mark Eichenlaub

1
Buen punto, eso daría una 'distribución logarítmica normal desplazada'. El log-normal y el log-logístico son bastante similares en forma, aparte de las colas más pesadas de este último, por lo que puede probar ambos y comparar resultados.
parada el

Compara cómo? Se garantiza que el desplazamiento lognormal se ajuste perfectamente a los cuantiles. Casi cualquier familia de tres parámetros se ajustará perfectamente. ¿Cómo se comparan dos ajustes perfectos?
whuber

@whuber me refería a comparar las predicciones resultantes para los percentiles correspondientes a otros valores
onestop

Me falta algo: ¿qué otros valores? El OP establece que solo hay tres percentiles disponibles, nada más.
whuber

2

Las únicas cosas que puede inferir de los datos es que la distribución no es simétrica. Ni siquiera se puede saber si esos cuantiles provienen de una distribución ajustada o solo del ecdf.

Si provienen de una distribución ajustada, puede probar todas las distribuciones que se le ocurran y ver si alguna coincide. Si no, no hay suficiente información. Puede interpolar un polinomio de segundo grado o una spline de tercer grado para la función cuantil y usarlo, o elaborar una teoría sobre la familia de distribución y los cuantiles de coincidencia, pero cualquier inferencia que haga con estos métodos sería muy sospechosa.


1
Es poco probable que los polinomios y las splines sean CDF válidos.
whuber

Buena observación. En este caso, el polinomio cuadrático habitual no funciona, pero hay infinitas splines cuadráticas para elegir (piense en Bézier) que no deberían tener el mismo problema (aunque algunas podrían requerir un recorte de dominio). Del mismo modo, debería ser posible encontrar una spline cúbica monotónica adecuada. Soy consciente de los algoritmos de spline que garantizan la monotonicidad, pero no puedo encontrar uno en este momento, así que tengo que dejar el asunto en "elegir algo que te guste que funcione como cdf".
sesqu

Podría ir tan lejos como para ajustar una spline monotónica (o lo que sea) a los logaritmos de los cuantiles, obteniendo así algo razonable dentro del rango de los cuantiles. Pero esto no proporciona ayuda para ajustar las colas más allá de los dos cuantiles extremos. Uno debe ser reacio a dejar que un aspecto tan importante del ajuste se deje a las características accidentales del procedimiento de ajuste numérico.
Whuber

2

El uso de cuantiles para estimar los parámetros de las distribuciones a priori se discute en la literatura sobre la medición del tiempo de respuesta humana como "estimación de probabilidad máxima cuantil" (QMPE, aunque originalmente erróneamente se denominó "estimación de máxima probabilidad de cuantil", QMLE), discutido en detalle por Heathcote y colegas . Podría ajustar varias distribuciones a priori diferentes (ex gaussiano, Lognormal desplazado, Wald y Weibull) y luego comparar las probabilidades de registro de suma de los mejores ajustes resultantes para cada distribución para encontrar el sabor de distribución que parece producir el mejor ajuste.


2
Se garantiza que cualquier distribución de tres parámetros se ajuste perfectamente a tres cuantiles . Por lo tanto, tiene sentido utilizar este enfoque para ajustar solo uno o dos parámetros. Tampoco tiene sentido comparar un ajuste de un parámetro con un ajuste de dos parámetros (con una familia diferente) basándose solo en la probabilidad.
whuber

@whuber, re: "Se garantiza que cualquier distribución de tres parámetros se ajuste perfectamente a tres cuantiles". No me había dado cuenta de eso, ¡es bueno saberlo! re: "Tampoco tiene ningún sentido comparar un ajuste de un parámetro con un ajuste de dos parámetros (con una familia diferente) basado solo en la probabilidad". Ah sí, de hecho; No mencioné que habría que aplicar alguna corrección de complejidad (AIC, BIC, ...) si se comparan los ajustes con los sabores de distribución con diferentes números de parámetros. Gracias por señalar eso.
Mike Lawrence

Exageré un poco, porque estaba pensando en dos de los parámetros que son la escala y la ubicación y el tercero que comprende una amplia gama de formas. Aun así, la mayoría de las familias de tres parámetros tienen suficiente flexibilidad para ajustarse a tres percentiles, siempre que sean distintas.
whuber

1

Puede usar su información de percentiles para simular los datos de alguna manera y usar el paquete R "logspline" para estimar la distribución de forma no paramétrica. A continuación se muestra mi función que emplea un 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 
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.