6 votos

¿Cómo realizar un histograma no equiespaciado en R?

Desde el R docs for hist :

El valor predeterminado de R con pausas equiespaciadas (también el valor predeterminado) es trazar el gráfico en las celdas definidas por los saltos. Así, la altura de un rectángulo es proporcional al número de puntos que caen en la celda, como es siempre que los saltos estén espaciados por igual.

El valor predeterminado con pausas no equiespaciadas es dar un gráfico de área uno, en el que el área de los rectángulos es la fracción de los puntos de datos que caen en las celdas.

Entonces ¿cómo consigo que hist trace pausas no equiespaciadas? Suena como si se va a calcular las pausas para terminar con el área uno, pero no veo las opciones.

Edita: Además, ¿cuáles son las formas recomendadas (en R) para hacer histogramas no equiespaciados? Un caso típico sería el de datos con picos, que provocan toda la acción en una o unas pocas celdas, sin importar cuántas se den como "pausas". Otro sería dos áreas de actividad separadas por una gran área de cero, lo que significa que no importa cuántas pausas, todo lo que se ve es plano, con dos enormes picos estrechos. O quizá peor, una zona de actividad, y luego otra zona de mucha menos actividad muy alejada que hace que el gráfico sea muy ancho y plano.

3 votos

Esta es una buena pregunta, pero parece que sólo se refiere a la forma de obtener R hacer algo, a diferencia de los aspectos estadísticos de los histogramas. Como tal, creo que encaja mejor en Stack Overflow que aquí.

1 votos

A mí tampoco me importaría saber cuáles son las mejores prácticas para los contenedores no equiespaciados, pero me parece impar cambiar la pregunta ahora.

2 votos

En absoluto, cámbiate. Debes asegurarte de que la pregunta refleja lo que quieres saber, para que puedas obtener la información que necesitas. A menudo, las preguntas se actualizan después de su publicación inicial para aclarar lo que realmente busca el remitente y facilitar respuestas más adecuadas. Además, CV sería el lugar adecuado para la pregunta, en caso de que quieras mantenerla aquí.

13voto

Hertanto Lie Puntos 965

Denby y Mallows 2009 enlace no cerrado proporcionan un buen enfoque llamado "histograma de corte diagonal", y proporcionan una función "dhist" en su material suplementario (disponible en el enlace anterior).

He aquí el resumen:

Al construir un histograma, es habitual que todas las barras sean iguales anchura. También se puede optar por que todas tengan la misma área. Estas dos opciones tienen ventajas e inconvenientes complementarios. El histograma de igual anchura se alisa en exceso en las regiones de alta densidad y es en las zonas de alta densidad, y no identifica bien los picos agudos. en las regiones de baja densidad, por lo que no identifica los valores atípicos. En describimos un enfoque de compromiso que evita ambos defectos. En Consideramos el histograma como un instrumento de exploración, más que como una estimación de una densidad. estimación de una densidad. Argumentamos que basarse en la asíntota del error cuadrático medio integrado conduce a recomendaciones inadecuadas para elegir el ancho de los intervalos

Y una figura que compara el a) cdf, b) histograma de área igual, c) histograma de anchura de bin igual y d) dhist:

enter image description here

Lorraine Denby, Colin Mallows. Revista de Estadística Computacional y Gráfica. 1 de marzo de 2009, 18(1): 21-31. doi:10.1198/jcgs.2009.0002.

6voto

Sean Hanley Puntos 2428

Observará que hay un argumento breaks como parte de la función hist() con el valor predeterminado "Sturges". También puede establecer sus propios breakpoints y utilizarlos en lugar del algoritmo sturges predeterminado de la siguiente manera:

breakpoints <- c(0, 1, 10, 11, 12)
hist(data, breaks=breakpoints)

Si lees hasta el final, también hay un par de ejemplos con rupturas no equidistantes.

Actualización: Puede que esto no sea una respuesta directa a tu pregunta, pero podrías utilizar un enfoque diferente (es decir, un gráfico) a un histograma. Personalmente, los histogramas no me parecen muy útiles. En su lugar, podría probar con un gráfico de densidad del núcleo , que creo que solucionaría los dos primeros casos que enumeras (no veo cómo puedes librarte del tercero). En R, el código sería: plot(density(data)) .

0 votos

Parece que no hay una forma predeterminada de obtener puntos de ruptura razonables que no sean equis (por ejemplo, de igual área). Gracias.

0 votos

.. sin computarlas mediante alguna otra función.

3voto

enthusiastic Puntos 8

Una solución fácil sería utilizar cuantiles como pausas:

x <- rnorm(100)
hist(x)
hist(x, breaks = quantile(x, 0:10 / 10))

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