7 votos

¿Cómo puedo ajustar los parámetros de una distribución lognormal sabiendo la media muestral y un determinado cuantil?

El objetivo es parametrizar una distribución lognormal, que luego debe tener una media dada y un valor dado para un percentil dado.

8voto

jldugger Puntos 7490

Deje $\mu$ $\sigma$ ser los parámetros de la distribución Normal correspondiente (su media y desviación estándar, respectivamente). Dada la lognormal media de $m$ y el valor de $z$ para el percentil $\alpha$, tenemos que encontrar la $\mu$$\sigma \gt 0$.

Para este fin, vamos a $\Phi$ ser el estándar de la distribución Normal de la función. Las dos piezas de información son

  • $m = \exp(\mu + \sigma^2/2)$, de donde $\mu + \sigma^2/2 = \log(m)$.

  • $\log(z) = \mu + \sigma \Phi^{-1}(\alpha).$

Restando la segunda de la primera y multiplicando por $2$ produce

$$\sigma^2 - 2\Phi^{-1}(\alpha)\sigma + 2(\log(z) - \log(m)) = 0.$$

This is a quadratic equation in $\sigma$, solved with the usual Quadratic Formula. There will be zero, one, or two solutions. Two solutions are likely to occur when $\alpha$ is close to $1$.

$\mu$ is then found in terms of $\sigma$ by using either of the original equations; for instance,

$$\mu = \log(m) - \sigma^2/2$$

will do nicely.

(A special case is when $\alfa=1/2$, corresponding to the median, where $\Phi^{-1}(\alpha) = 0$. The formula for $\sigma$ simplifies to $$\sigma^2 + 2(\log(z) - \log(m)) = 0.$$ That is the solution obtained by @Glen_b at Can I get the parameters of a lognormal distribution from the sample mean & median?, which uses "$\tilde{m}$" for "$z$".)

For fitting these estimates to data, consider measuring the goodness of fit for discriminating between two solutions when they are available. A $\chi^2$ estadística debe hacer bien. Este enfoque se ilustra en el siguiente R código, que simula los datos, lleva a cabo el análisis, dibuja un histograma de los datos, y overplots las soluciones. Cuando una solución se adapta mal, su trama se desvaneció. Aquí es un ejemplo.

Figure

#
# Given a mean `m` and `alpha` quantile `z, find the matching parameters of any 
# lognormal distributions.
#
f <- function(m, z, alpha) {
  B <- -2 * qnorm(alpha)
  C <- 2*(log(z) - log(m))
  sigma <- (-B + c(-1,1)*sqrt(B^2 - 4*C)) / 2
  sigma <- sigma[sigma > 0 & !is.na(sigma)]
  mu <- log(m) - sigma^2 / 2
  return(cbind(mu=mu, sigma=sigma))
}
#
# Compute a chi-squared statistic for data `x` corresponding to binning
# a lognormal distribution with parameter `theta` into `n` equal-size bins.
#
chi.squared <- function(theta, x, n=4) {
  cutpoints <- exp(qnorm(seq(0, 1, length.out=n+1), theta[1], theta[2]))
  counts <- table(cut(x, cutpoints))
  expected <- length(x) / n
  stat <- sum((counts - expected)^2 / expected)
}
#
# Simulate data, compute their statistics, and estimate matching lognormal
# distributions.
#
set.seed(17)
x <- exp(rnorm(20, sd=0.4))
m <- mean(x)
alpha <- 0.9
z <- quantile(x, alpha)
theta <- f(m, z, alpha)
stats <- apply(theta, 1, chi.squared, x=x)
#
# Plot the data and any matching lognormal density functions.
#
hist(x, freq=FALSE, breaks=12)
col <- "Red"
invisible(apply(theta, 1, function(q) {
  stat <- chi.squared(q, x, min(length(x), 5))
  curve(dnorm(log(x), q["mu"], q["sigma"])/x, add=TRUE, lwd=2,
        col=hsv(0, min(1, 2/sqrt(1 + 10*stat/length(x))), 0.9))
}))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X