¿Cómo calculo los intervalos de confianza para una distribución no normal?


21

Tengo 383 muestras que tienen un sesgo importante para algunos valores comunes, ¿cómo calcularía el IC del 95% para la media? El IC que calculé parece muy diferente, lo que supongo es que mis datos no se ven como una curva cuando hago un histograma. Así que creo que tengo que usar algo como bootstrapping, que no entiendo muy bien.


2
Una solución sería utilizar el CI asintótico que utiliza el hecho de que el RV tiene una distribución normal estándar limitante. Su muestra es razonablemente grande, por lo que podría ser una buena aproximación. X¯μS/n
JohnK

1
No, encontrará esa cobertura de cola realmente mala en ambas colas del intervalo de confianza utilizando ese enfoque. La cobertura promedio podría ser buena suerte, pero ambas tasas de error de cola serán incorrectas.
Frank Harrell

2
¿Qué significa "fuerte sesgo para algunos valores comunes"? Tenga en cuenta que el sesgo tiene un significado particular en las estadísticas; debes intentar evitarlo si no quieres decir eso. ¿Simplemente quiere decir "algunos valores particulares ocurren con mucha frecuencia"? ¿Puede mostrar sus cálculos y alguna visualización o tabla de sus datos?
Glen_b -Reinstale a Mónica el

Respuestas:


21

Sí, bootstrap es una alternativa para obtener intervalos de confianza para la media (y debe hacer un poco de esfuerzo si desea comprender el método).

La idea es la siguiente:

  1. Vuelva a muestrear con reemplazo B veces.
  2. Para cada una de estas muestras, calcule la media muestral.
  3. Calcule un intervalo de confianza de arranque apropiado .

Con respecto al último paso, hay varios tipos de intervalo de confianza de arranque (BCI). Las siguientes referencias presentan una discusión sobre las propiedades de los diferentes tipos de BCI:

http://staff.ustc.edu.cn/~zwp/teach/Stat-Comp/Efron_Bootstrap_CIs.pdf

http://www.tau.ac.il/~saharon/Boot/10.1.1.133.8405.pdf

Es una buena práctica calcular varios BCI e intentar comprender las posibles discrepancias entre ellos.

En R, puede implementar fácilmente esta idea usando el paquete R 'boot' de la siguiente manera:

rm(list=ls())
# Simulated data
set.seed(123)
data0 = rgamma(383,5,3)
mean(data0) # Sample mean

hist(data0) # Histogram of the data

library(boot) 

# function to obtain the mean
Bmean <- function(data, indices) {
  d <- data[indices] # allows boot to select sample 
    return(mean(d))
} 

# bootstrapping with 1000 replications 
results <- boot(data=data0, statistic=Bmean, R=1000)

# view results
results 
plot(results)

# get 95% confidence interval 
boot.ci(results, type=c("norm", "basic", "perc", "bca"))

3
El último paso, calcular varios, implica buscar un IC que le guste del resultado. Debe decidir el tipo de CI que desea en función de lo que son de antemano.
John

@John CI diferentes tienen propiedades diferentes. Es una buena práctica verificar posibles discrepancias (e intentar investigar la fuente de esto). No se trata de pescar para obtener un resultado conveniente.
Munchausen

Absolutamente, pero sin tal descripción de la razón en su respuesta, "implica" la pesca. Y todavía no está afirmando que es crítico elegir realmente el CI que desea primero. Estoy sugiriendo una actualización de la respuesta con información crítica para un cuestionador ingenuo. Sería aún mejor si declara qué CI generalmente prefiere y por qué, o cuál prefiere en casos como este y por qué.
John

2
@IhaveCandy: No. Demuestra el Teorema del límite central, es decir, cómo la distribución de muestreo de la media tiende a la normal, incluso para valores que siguen una distribución muy "anormal". Es por eso que el simple intervalo de confianza z no será muy diferente a cualquier otra solución elegante, por ejemplo, bootstrap.
Michael M

1
@IhaveCandy Por favor vea mi comentario arriba, Michael Mayer está haciendo lo mismo.
JohnK

8

Otra alternativa estándar es calcular el IC con la prueba de Wilcoxon. En R

wilcox.test(your-data, conf.int = TRUE, conf.level = 0.95)

Desafortunadamente, le da el IC alrededor de la (pseudo) mediana, no la media, pero luego, si los datos son muy no normales, tal vez la mediana sea una medida más informativa.


2

Para datos logarítmicos normales, Olsson (2005) sugiere un 'método Cox modificado'

Xmi(X)=θIniciar sesión(θ)

Y¯=S22±treFS2norte+S4 42(norte-1)

Y=Iniciar sesión(X)YY¯YS2 . Para df, use n-1.

Una función R está debajo:

ModifiedCox <- function(x){
  n <- length(x)
  y <- log(x)
  y.m <- mean(y)
  y.var <- var(y)

  my.t <- qt(0.975, df = n-1)

  my.mean <- mean(x)
  upper <- y.m + y.var/2 + my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))
  lower <- y.m + y.var/2 - my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))

 return(list(upper = exp(upper), mean = my.mean, lower = exp(lower)))

}

Repitiendo el ejemplo del artículo de Olsson

CO.level <- c(12.5, 20, 4, 20, 25, 170, 15, 20, 15)

ModifiedCox(CO.level)
$upper
[1] 78.72254

$mean
[1] 33.5

$lower
[1] 12.30929

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.