En primer lugar, comprobaría si la media es un índice apropiado para la tarea en cuestión. Si está buscando "un valor típico / central" de una distribución sesgada, la media podría indicarle un valor bastante no representativo. Considere la distribución log-normal:
x <- rlnorm(1000)
plot(density(x), xlim=c(0, 10))
abline(v=mean(x), col="red")
abline(v=mean(x, tr=.20), col="darkgreen")
abline(v=median(x), col="blue")
La media (línea roja) está bastante lejos del grueso de los datos. La media recortada del 20% (verde) y la mediana (azul) están más cerca del valor "típico".
Los resultados dependen del tipo de distribución "no normal" (sería útil un histograma de sus datos reales). Si no está sesgado, pero tiene colas pesadas, sus CI serán muy amplios.
En cualquier caso, creo que el bootstrapping es un buen enfoque, ya que también puede proporcionar CI asimétricos. El R
paquete simpleboot
es un buen comienzo:
library(simpleboot)
# 20% trimmed mean bootstrap
b1 <- one.boot(x, mean, R=2000, tr=.2)
boot.ci(b1, type=c("perc", "bca"))
... te da el siguiente resultado:
# The bootstrap trimmed mean:
> b1$t0
[1] 1.144648
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 2000 bootstrap replicates
Intervals :
Level Percentile BCa
95% ( 1.062, 1.228 ) ( 1.065, 1.229 )
Calculations and Intervals on Original Scale