Considere una distribución beta para un conjunto dado de clasificaciones en [0,1]. Después de haber calculado la media:
¿Hay alguna manera de proporcionar un intervalo de confianza en torno a este medio?
Considere una distribución beta para un conjunto dado de clasificaciones en [0,1]. Después de haber calculado la media:
¿Hay alguna manera de proporcionar un intervalo de confianza en torno a este medio?
Respuestas:
Si bien existen métodos específicos para calcular los intervalos de confianza para los parámetros en una distribución beta, describiré algunos métodos generales, que se pueden usar para (casi) todo tipo de distribuciones , incluida la distribución beta, y se implementan fácilmente en R .
Comencemos con la estimación de máxima verosimilitud con los correspondientes intervalos de confianza de verosimilitud de perfil. Primero necesitamos algunos datos de muestra:
# Sample size
n = 10
# Parameters of the beta distribution
alpha = 10
beta = 1.4
# Simulate some data
set.seed(1)
x = rbeta(n, alpha, beta)
# Note that the distribution is not symmetrical
curve(dbeta(x,alpha,beta))
La media real / teórica es
> alpha/(alpha+beta)
0.877193
Ahora tenemos que crear una función para calcular la función de probabilidad de registro negativa para una muestra de la distribución beta, con la media como uno de los parámetros. Podemos usar la dbeta()
función, pero como esto no usa una parametrización que involucre la media, tenemos que expresar sus parámetros ( α y β ) en función de la media y algún otro parámetro (como la desviación estándar):
# Negative log likelihood for the beta distribution
nloglikbeta = function(mu, sig) {
alpha = mu^2*(1-mu)/sig^2-mu
beta = alpha*(1/mu-1)
-sum(dbeta(x, alpha, beta, log=TRUE))
}
Para encontrar la estimación de máxima verosimilitud, podemos usar la mle()
función en la stats4
biblioteca:
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Simplemente ignore las advertencias por ahora. Son causados por los algoritmos de optimización que prueban valores no válidos para los parámetros, dando valores negativos para α y / o β . (Para evitar la advertencia, puede agregar un lower
argumento y cambiar la optimización method
utilizada).
Ahora tenemos estimaciones e intervalos de confianza para nuestros dos parámetros:
> est
Call:
mle(minuslogl = nloglikbeta, start = list(mu = mean(x), sig = sd(x)))
Coefficients:
mu sig
0.87304148 0.07129112
> confint(est)
Profiling...
2.5 % 97.5 %
mu 0.81336555 0.9120350
sig 0.04679421 0.1276783
Tenga en cuenta que, como se esperaba, los intervalos de confianza no son simétricos:
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(Las segundas líneas magentas externas muestran el intervalo de confianza del 95%).
También tenga en cuenta que incluso con solo 10 observaciones, obtenemos estimaciones muy buenas (un intervalo de confianza estrecho).
Como alternativa a mle()
, puede usar la fitdistr()
función del MASS
paquete. Esto también calcula el estimador de máxima verosimilitud, y tiene la ventaja de que solo necesita suministrar la densidad, no la probabilidad de registro negativa, pero no le da intervalos de confianza de verosimilitud de perfil, solo intervalos de confianza asintóticos (simétricos).
Una mejor opción es mle2()
(y las funciones relacionadas) del bbmle
paquete, que es algo más flexible y potente que mle()
, y ofrece gráficos un poco más agradables.
Otra opción es usar el bootstrap. Es extremadamente fácil de usar en R, y ni siquiera tiene que proporcionar una función de densidad:
> library(simpleboot)
> x.boot = one.boot(x, mean, R=10^4)
> hist(x.boot) # Looks good
> boot.ci(x.boot, type="bca") # Confidence interval
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 10000 bootstrap replicates
CALL :
boot.ci(boot.out = x.boot, type = "bca")
Intervals :
Level BCa
95% ( 0.8246, 0.9132 )
Calculations and Intervals on Original Scale
El programa de arranque tiene la ventaja adicional de que funciona incluso si sus datos no provienen de una distribución beta.
Para intervalos de confianza en la media, no olvidemos los viejos intervalos de confianza asintóticos basados en el teorema del límite central (y la distribución t ). Siempre que tengamos un tamaño de muestra grande (por lo que se aplica el CLT y la distribución de la media de la muestra es aproximadamente normal) o valores grandes tanto de α como de β (para que la distribución beta en sí sea aproximadamente normal), funciona bien. Aquí no tenemos ninguno, pero el intervalo de confianza aún no es tan malo:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
Para valores ligeramente mayores de n (y valores no demasiado extremos de los dos parámetros), el intervalo de confianza asintótico funciona extremadamente bien.
Echa un vistazo a la regresión Beta. Una buena introducción a cómo hacerlo usando R se puede encontrar aquí:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Otra forma (realmente fácil) de construir un intervalo de confianza sería utilizar un enfoque boostrap no paramétrico. Wikipedia tiene buena información:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
También bonito video aquí: