Evaluar la distribución aproximada de datos en base a un histograma

111

Supongamos que quiero ver si mis datos son exponenciales en función de un histograma (es decir, sesgado a la derecha).

Dependiendo de cómo agrupe o agrupe los datos, puedo obtener histogramas muy diferentes.

Un conjunto de histogramas hará que parezca que los datos son exponenciales. Otro conjunto hará parecer que los datos no son exponenciales. ¿Cómo hago para determinar las distribuciones de histogramas bien definidas?

guestoeijreor
fuente
20
¿Por qué no olvidarse de los histogramas, porque los problemas que describe están bien establecidos y considera herramientas alternativas como los gráficos qq y las pruebas de bondad de ajuste?
whuber

Respuestas:

163

La dificultad con el uso de histogramas para inferir la forma

Si bien los histogramas son a menudo útiles y a veces útiles, pueden ser engañosos. Su apariencia puede cambiar bastante con los cambios en la ubicación de los límites del contenedor.

Este problema se conoce desde hace mucho tiempo *, aunque tal vez no tan ampliamente como debería ser: rara vez se lo menciona en las discusiones de nivel primario (aunque hay excepciones).

* por ejemplo, Paul Rubin [1] lo expresó de esta manera: " es bien sabido que cambiar los puntos finales en un histograma puede alterar significativamente su apariencia ". .

Creo que es un tema que debería debatirse más ampliamente al introducir histogramas. Daré algunos ejemplos y discusión.

¿Por qué debe tener cuidado de no confiar en un solo histograma de un conjunto de datos?

Eche un vistazo a estos cuatro histogramas:

Cuatro histogramas

Son cuatro histogramas de aspecto muy diferente.

Si pega los siguientes datos en (estoy usando R aquí):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

Entonces puedes generarlos tú mismo:

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

Ahora mira esta tabla de tiras:

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 gráficos de tiras

(Si aún no es evidente, ver lo que sucede cuando se resta de datos de Annie de cada conjunto: head(matrix(x-Annie,nrow=40)))

Los datos simplemente se han desplazado a la izquierda cada 0.25.

Sin embargo, las impresiones que obtenemos de los histogramas (inclinación derecha, uniforme, inclinación izquierda y bimodal) fueron completamente diferentes. Nuestra impresión se regió por completo por la ubicación del primer origen del contenedor en relación con el mínimo.

Entonces, no solo 'exponencial' vs 'no-realmente-exponencial' sino 'sesgado a la derecha' versus 'sesgo a la izquierda' o 'bimodal' vs 'uniforme' simplemente moviéndose donde comienzan sus contenedores.


Editar: si varía el ancho del contenedor, puede hacer que sucedan cosas como esta:

Skew vs bell

10.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

Ingenioso, ¿eh?

Sí, esos datos se generaron deliberadamente para hacer eso ... pero la lección es clara: lo que cree que ve en un histograma puede no ser una impresión particularmente precisa de los datos.

¿Qué podemos hacer?

Los histogramas son ampliamente utilizados, frecuentemente convenientes de obtener y, a veces, esperados. ¿Qué podemos hacer para evitar o mitigar estos problemas?

Como Nick Cox señala en un comentario a una pregunta relacionada : la regla general siempre debe ser que los detalles robustos a las variaciones en el ancho y el origen del contenedor probablemente sean genuinos; Es probable que los detalles frágiles a tales sean espurios o triviales .

Por lo menos, siempre debe hacer histogramas en varios anchos de bandeja u orígenes de bandeja diferentes, o preferiblemente en ambos.

Alternativamente, verifique una estimación de densidad del kernel en un ancho de banda no demasiado ancho.

Otro enfoque que reduce la arbitrariedad de los histogramas son los histogramas desplazados promediados ,

Histograma desplazado promediado

(ese es uno de ese conjunto de datos más reciente) pero si haces ese esfuerzo, creo que también podrías usar una estimación de densidad del núcleo.

Si estoy haciendo un histograma (los uso a pesar de ser muy consciente del problema), casi siempre prefiero usar muchos más bins de los que suelen ofrecer los valores predeterminados del programa y muy a menudo me gusta hacer varios histogramas con diferentes anchuras de bin. (y, ocasionalmente, origen). Si son razonablemente consistentes en la impresión, no es probable que tenga este problema, y ​​si no son consistentes, debe mirar con más cuidado, tal vez intente una estimación de densidad del núcleo, un CDF empírico, un gráfico QQ o algo así. similar.

Si bien los histogramas a veces pueden ser engañosos, los diagramas de caja son aún más propensos a tales problemas; con un diagrama de caja ni siquiera tienes la capacidad de decir "usar más contenedores". Vea los cuatro conjuntos de datos muy diferentes en esta publicación , todos con diagramas de caja simétricos e idénticos, a pesar de que uno de los conjuntos de datos es bastante sesgado.

[1]: Rubin, Paul (2014) "Histogram Abuse!",
Publicación de blog, O en un mundo OB ,
enlace del 23 de enero de 2014 ... (enlace alternativo)

Glen_b
fuente
1
Prácticamente cada gráfico de necesidad agrupa datos como este. ¿Los contenedores son lo suficientemente pequeños (el ancho de un píxel a lo largo del eje) que no importa?
AJMansfield
1
@AJMansfield Esto es un poco como decir "cada distribución es discreta", aunque es literalmente cierto, oculta el problema relevante. Un número típico de contenedores en un estimador agrupado es mucho más pequeño que un número típico de píxeles ... y con cualquier gráfico que haga uso de suavizado, el número 'efectivo' de píxeles es mayor (en eso es posible distinguir diferencias de posiciones entre píxeles)
Glen_b
2
El problema fundamental es que los histogramas dependen en gran medida del tamaño del contenedor. Es difícil determinar esto a priori.
29

Una densidad de kernel o un diagrama de línea de registro puede ser una mejor opción en comparación con un histograma. Todavía hay algunas opciones que se pueden configurar con estos métodos, pero son menos volubles que los histogramas. También hay qqplots. Una buena herramienta para ver si los datos están lo suficientemente cerca de una distribución teórica se detalla en:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

La versión corta de la idea (aún lea el documento para más detalles) es que genera datos a partir de la distribución nula y crea varias parcelas, una de las cuales son los datos originales / reales y el resto se simula a partir de la distribución teórica. Luego presenta las tramas a alguien (posiblemente usted mismo) que no ha visto los datos originales y ve si pueden elegir los datos reales. Si no pueden identificar los datos reales, entonces no tiene evidencia contra el nulo.

La vis.testfunción en el paquete TeachingDemos para R ayuda a implementar una forma de esta prueba.

Aquí hay un ejemplo rápido. Una de las gráficas a continuación es de 25 puntos generados a partir de una distribución con 10 grados de libertad, los otros 8 se generan a partir de una distribución normal con la misma media y varianza.

ingrese la descripción de la imagen aquí

La vis.testfunción creó este gráfico y luego le pide al usuario que elija cuál de los gráficos cree que es diferente, luego repite el proceso 2 veces más (3 en total).

Greg Snow
fuente
@ScottStafford, agregué una copia de la trama anterior. Éste usa qqplots pero la función también generará histogramas o podrían programarse gráficos de densidad.
Greg Snow
28

Las gráficas de distribución acumulada [ MATLAB , R ], donde se grafica la fracción de valores de datos menores o iguales a un rango de valores, son, con mucho, la mejor manera de ver las distribuciones de datos empíricos. Aquí, por ejemplo, están los ECDF de estos datos , producidos en R:

Las tramas de ECDF de Alice, Brian, Chris y Zoe

Esto se puede generar con la siguiente entrada R (con los datos anteriores):

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

Como puede ver, es visualmente obvio que estas cuatro distribuciones son simplemente traducciones entre sí. En general, los beneficios de los ECDF para visualizar distribuciones empíricas de datos son:

  1. Simplemente presentan los datos tal como realmente ocurren sin otra transformación que la acumulación, por lo que no hay posibilidad de engañarse accidentalmente, como ocurre con los histogramas y las estimaciones de densidad del núcleo, debido a cómo está procesando los datos.
  2. Proporcionan un sentido visual claro de la distribución de los datos, ya que cada punto está protegido por todos los datos anteriores y posteriores. Compare esto con las visualizaciones de densidad no acumulativa, donde la precisión de cada densidad es naturalmente no amortiguada y, por lo tanto, debe estimarse por agrupamiento (histogramas) o suavizado (KDE).
  3. Funcionan igualmente bien independientemente de si los datos siguen una distribución paramétrica agradable, alguna mezcla o una distribución no paramétrica desordenada.

El único truco es aprender a leer correctamente los ECDF: las áreas inclinadas poco profundas significan una distribución escasa, las áreas inclinadas empinadas significan una distribución densa. Sin embargo, una vez que se acostumbra a leerlos, son una herramienta maravillosa para observar las distribuciones de datos empíricos.

StefanKarpinski
fuente
¿Hay alguna documentación disponible para leer CDF? por ejemplo, ¿qué pasa si mi distribución de cdf como usted ha mostrado anteriormente, entonces cómo podemos clasificarla / estimarla en distribución cuadriculada, normal u otra basada en miradas
stats101
2

Sugerencia: los histogramas generalmente solo asignan los datos del eje x que ocurrieron en el punto medio del contenedor y omiten las medidas de ubicación del eje x de mayor precisión. El efecto que esto tiene sobre los derivados del ajuste puede ser bastante grande. Tomemos un ejemplo trivial. Supongamos que tomamos la derivación clásica de un delta de Dirac pero la modificamos para que comencemos con una distribución de Cauchy en una ubicación mediana arbitraria con una escala finita (ancho medio completo máximo). Luego tomamos el límite a medida que la escala llega a cero. Si usamos la definición clásica de un histograma y no cambiamos los tamaños de los contenedores, no capturaremos ni la ubicación ni la escala. Sin embargo, si usamos una ubicación mediana dentro de contenedores de incluso de ancho fijo, siempre capturaremos la ubicación, si no la escala, cuando la escala es pequeña en relación con el ancho del contenedor.

Para los valores de ajuste donde los datos están sesgados, el uso de puntos medios de bin fijos desplazará el eje x todo el segmento de la curva en esa región, lo que creo que se relaciona con la pregunta anterior.

histo gracioson=8en cada categoría de histograma, y ​​solo se muestran como el valor medio del eje x de cada bin. Como cada contenedor de histograma tiene un valor de 8, todas las distribuciones se ven uniformes, y tuve que compensarlas verticalmente para mostrarlas. La pantalla no es la respuesta correcta, pero no carece de información. Nos dice correctamente que hay un desplazamiento del eje x entre los grupos. También nos dice que la distribución real parece estar ligeramente en forma de U. ¿Por qué? Tenga en cuenta que la distancia entre los valores medios está más separada en los centros y más cerca en los bordes. Entonces, para hacer de esto una mejor representación, debemos tomar prestadas muestras enteras y cantidades fraccionarias de cada muestra de límite de bin para hacer que todos los valores de bin promedio en el eje x sean equidistantes. Arreglar esto y mostrarlo correctamente requeriría un poco de programación. Pero, puede ser solo una forma de hacer histogramas para que realmente muestren los datos subyacentes en algún formato lógico. La forma seguirá cambiando si cambiamos el número total de contenedores que cubren el rango de los datos, pero la idea es resolver algunos de los problemas creados por binning arbitrariamente.

PASO 2 Entonces, comencemos a pedir prestado entre contenedores para tratar de hacer que los medios estén más espaciados de manera uniforme.ingrese la descripción de la imagen aquí

Ahora, podemos ver la forma de los histogramas que comienzan a surgir. Pero la diferencia entre medias no es perfecta ya que solo tenemos un número entero de muestras para intercambiar entre contenedores. Para eliminar la restricción de valores enteros en el eje y y completar el proceso de hacer valores medios equidistantes en el eje x, tenemos que comenzar a compartir fracciones de una muestra entre contenedores.

Paso 3 El intercambio de valores y partes de valores. histo3

Como se puede ver, compartir partes de un valor en un límite de contenedor puede mejorar la uniformidad de la distancia entre los valores medios. Logré hacer esto con tres decimales con los datos proporcionados. Sin embargo, no puedo, no creo, hacer que la distancia entre los valores medios sea exactamente igual en general, ya que la tosquedad de los datos no lo permitirá.

Sin embargo, se pueden hacer otras cosas como usar la estimación de densidad del núcleo .

Aquí vemos los datos de Annie como una densidad de kernel limitada utilizando suavizaciones gaussianas de 0.1, 0.2 y 0.4. Los otros sujetos tendrán funciones cambiadas del mismo tipo, siempre que uno haga lo mismo que yo, es decir, use los límites inferior y superior de cada conjunto de datos. Entonces, esto ya no es un histograma, sino un PDF, y cumple la misma función que un histograma sin algunas de las verrugas.

kernelsmooth

Carl
fuente