Saltar al contenido principal
LibreTexts Español

6.3: Histogramas

  • Page ID
    151850
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Ahora que hemos domesticado (o posiblemente huido de) la bestia que es R parámetros gráficos, hablemos más en serio sobre algunos gráficos de la vida real que querrás dibujar. Comenzamos con el humilde histograma. Los histogramas son una de las formas más simples y útiles de visualización de datos. Tienen más sentido cuando tienes una escala de intervalo o ratio (por ejemplo, los datos afl.margins del Capítulo 5 y lo que quieres hacer es obtener una impresión general de los datos. La mayoría de ustedes probablemente sepan cómo funcionan los histogramas, ya que son muy utilizados, pero en aras de la integridad los describiré. Todo lo que haces es dividir los valores posibles en bins, y luego contar el número de observaciones que caen dentro de cada bin. Este conteo se conoce como la frecuencia del bin, y se muestra como una barra: en los datos de márgenes ganadores de AFL, hay 33 juegos en los que el margen ganador fue menor a 10 puntos, y es este hecho el que está representado por la altura de la barra más a la izquierda en la Figura 6.10. Dibujar este histograma en R es bastante sencillo. La función que necesitas usar se llama hist (), y tiene configuraciones predeterminadas bastante razonables. De hecho, la Figura 6.10 es exactamente lo que obtienes si solo escribes esto:

    > hist( afl.margins )   # panel a
    load("./rbook-master/data/aflsmall.Rdata")
    hist(afl.margins)   # panel a
    hist1a-1.png
    Figura 6.10: El histograma predeterminado que produce R

    Aunque esta imagen necesitaría mucha limpieza para hacer un buen gráfico de presentación (es decir, uno que incluirías en un reporte), sin embargo hace un trabajo bastante bueno al describir los datos. De hecho, la gran fortaleza de un histograma es que (usado correctamente) muestra toda la propagación de los datos, así que puedes tener una idea bastante clara de cómo se ve. La desventaja de los histogramas es que no son muy compactos: a diferencia de algunas de las otras parcelas de las que hablaré, es difícil meter 20-30 histogramas en una sola imagen sin abrumar al espectador. Y claro, si tus datos son de escala nominal (por ejemplo, los datos afl.finalistas) entonces los histogramas son inútiles.

    La sutileza principal que debes tener en cuenta al dibujar histogramas es determinar dónde deben ubicarse los descansos que separan los bins y (de manera relacionada) cuántos descansos debe haber. En la Figura 6.10, se puede ver que R ha tomado decisiones bastante sensatas por sí sola: los descansos están ubicados en 0, 10, 20,... 120, que es exactamente lo que habría hecho si me hubiera visto obligado a tomar una decisión yo mismo. Por otro lado, considere los dos histogramas de la Figura 6.11 y 6.12, los cuales produje usando los siguientes dos comandos:

    hist( x = afl.margins, breaks = 3 )      # panel b
    hist1b-1.png
    Figura 6.11: Un histograma con muy pocos bins
    hist( x = afl.margins, breaks = 0:116 )  # panel c
    hist1c-1.png
    Figura 6.12: Un histograma con demasiados bins

    En la Figura 6.12, las papeleras tienen solo 1 punto de ancho. Como resultado, aunque la trama es muy informativa (¡muestra todo el conjunto de datos sin pérdida de información en absoluto!) la trama es muy difícil de interpretar, y se siente bastante abarrotada. Por otro lado, la trama de la Figura 6.11 tiene un ancho de bin de 50 puntos, y tiene el problema contrario: es muy fácil “leer” esta trama, pero no transmite mucha información. Uno tiene la sensación de que este histograma se esconde demasiado. En resumen, la forma en que especificas los descansos tiene un gran efecto sobre cómo se ve el histograma, por lo que es importante asegurarse de elegir los descansos con sensatez. En general, R hace un trabajo bastante bueno al seleccionar los descansos por su cuenta, ya que hace uso de algunos trucos bastante inteligentes que los estadísticos han ideado para seleccionar automáticamente los bins adecuados para un histograma, pero sin embargo suele ser una buena idea jugar un poco con los descansos para ver qué pasa.

    Hay una cosa bastante importante que agregar respecto a cómo funciona el argumento breaks. Hay dos formas diferentes de especificar los descansos. Puede especificar cuántos descansos desea (que es lo que hice para el panel b cuando escribí descansos = 3) y dejar que R determine a dónde deben ir, o puede proporcionar un vector que le diga a R exactamente dónde deben colocarse los descansos (que es lo que hice para el panel c cuando roturas mecanografiadas = 0:116). El comportamiento de la función hist () es ligeramente diferente dependiendo de la versión que uses. Si todo lo que haces es decirle cuántos descansos quieres, R lo trata como una “sugerencia” no como una demanda. Asume que quieres “aproximadamente 3” descansos, pero si no piensa que esto se vería muy bonito en pantalla, elige un número diferente (pero similar). Lo hace por una razón sensata —trata de asegurarse de que los descansos se localicen en valores sensibles (como 10) en lugar de estúpidos (como 7.224414). Y la mayoría de las veces R tiene razón: generalmente, cuando un investigador humano dice “dame 3 descansos”, él o ella realmente quiere decir “dame aproximadamente 3 descansos, y no los pongas en lugares estúpidos”. Sin embargo, a veces R está completamente equivocado. A veces realmente te refieres a “exactamente 3 descansos”, y sabes exactamente a dónde quieres que vayan. Entonces hay que invocar “privilegio de persona real”, y ordenar a R que haga lo que está malditamente bien dicho. Para hacer eso, hay que ingresar el vector completo que le dice a R exactamente donde quiere los descansos. Si haces eso, R volverá a comportarse como la pequeña y agradable calculadora obediente que se supone que debe ser.

    Estilo visual de tu histograma

    Bien, entonces en este punto podemos dibujar un histograma básico, y podemos alterar el número e incluso la ubicación de los descansos. Sin embargo, el estilo visual de los histogramas mostrados en la Figura @ref (fig:hist1a; hist1b; hist1c) podría estar por mejorar. Podemos arreglar esto haciendo uso de algunos de los otros argumentos a la función hist (). La mayoría de las cosas que quizás quieras intentar hacer ya han sido cubiertas en la Sección 6.2, pero hay algunas cosas nuevas:

    • Líneas de sombreado: densidad, ángulo. Puede agregar líneas diagonales para sombrear las barras: el valor de densidad es un número que indica cuántas líneas por pulgada debe dibujar R (el valor predeterminado de NULL significa que no hay líneas), y el ángulo es un número que indica cuántos grados de horizontal deben dibujarse las líneas en ( por defecto es ángulo = 45 grados).
    • Específicas respecto a los colores: col, borde. También puedes cambiar los colores: en esta instancia el parámetro col establece el color del sombreado (ya sea las líneas de sombreado si hay alguna, o bien el color del interior de las barras si no las hay), y el argumento border establece el color de los bordes de las barras.
    • Etiquetado de las barras: etiquetas. También puede adjuntar etiquetas a cada una de las barras usando el argumento labels. La forma más sencilla de hacerlo es establecer etiquetas = VERDADERO, en cuyo caso R agregará un número justo encima de cada barra, siendo ese número el número exacto de observaciones en el bin. Alternativamente, puede elegir las etiquetas usted mismo, ingresando un vector de cadenas, por ejemplo, labels = c (“label 1", "label 2", "etc”)

    No en vano, esto no agota las posibilidades. Si escribes ayuda (“hist”) o? hist y eche un vistazo a la documentación de ayuda para histogramas, verá algunas opciones más. Un histograma que hace uso de las personalizaciones específicas del histograma así como de varias de las opciones que discutimos en la Sección?? se muestra en la Figura?? . El comando R que utilicé para dibujarlo es este:

    hist( x = afl.margins, 
          main = "2010 AFL margins", # title of the plot
          xlab = "Margin",           # set the x-axis label
          density = 10,              # draw shading lines: 10 per inch
          angle = 40,                # set the angle of the shading lines is 40 degrees
          border = "gray20",         # set the colour of the borders of the bars
          col = "gray80",            # set the colour of the shading lines
          labels = TRUE,             # add frequency labels to each bar
          ylim = c(0,40)             # change the scale of the y-axis
    )

    hist1d-1.png

    En general, este es un histograma mucho más agradable que los predeterminados.


    This page titled 6.3: Histogramas is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform.