¿Cómo puedo hacer un gráfico de barras con barras de error? | Stata FAQ
Supongamos que usted está observando los puntajes de escritura desglosados por raza y ses. Podría querer graficar la media y el intervalo de confianza para cada grupo usando un gráfico de barras con barras de error como se ilustra a continuación. Este FAQ muestra cómo puedes hacer un gráfico como éste, construyéndolo paso a paso.
Image barcap1
Primero, vamos a obtener el archivo de datos que vamos a utilizar.
use https://stats.idre.ucla.edu/stat/stata/notes/hsb2, clear
Ahora, vamos a utilizar el comando collapse para que la media y la desviación estándar sean byrace y ses.
collapse (mean) meanwrite= write (sd) sdwrite=write (count) n=write, by(race ses)
Ahora, hagamos los valores superior e inferior del intervalo de confianza.
generate hiwrite = meanwrite + invttail(n-1,0.025)*(sdwrite / sqrt(n))generate lowrite = meanwrite - invttail(n-1,0.025)*(sdwrite / sqrt(n))
Ahora estamos listos para hacer un gráfico de barras de los datos El comando bar graph hace un gráfico de barras bastante bueno.
graph bar meanwrite, over(race) over(ses)Image barcap2
Podemos hacer que el gráfico se vea un poco más bonito añadiendo la opción asyvars como se muestra a continuación.
graph bar meanwrite, over(race) over(ses) asyvarsImage barcap3
Pero este gráfico no tiene las barras de error. Desgraciadamente, por muy bonito que sea el comando graph bar, no permite barras de error. Sin embargo, podemos hacer un gráfico de dos vías que tiene barras de error como se muestra a continuación. Desgraciadamente, este gráfico no es tan atractivo como el gráfico de la barra gráfica.
graph twoway (bar meanwrite race) (rcap hiwrite lowrite race), by(ses)Image barcap4
Así que tenemos un dilema. El comando graph bar hará un bonito gráfico de barras, pero no soportará barras de error. El comando twoway bar hace barras de error encantadoras, pero no se parece al bonito gráfico que nos gustaba del comando graph bar. Sin embargo, podemos mejorar el comando de barra bidireccional para hacer una gráfica que se parezca a la del comando de barra gráfica y luego combinarla con barras de error. Aquí hay un proceso paso a paso.
Primero, haremos una variable sesrace que será una sola variable que contiene la información de ses y race. Observa cómo sesrace tiene un hueco entre los niveles de ses (en el 5 y en el 10).
generate sesrace = race if ses == 1replace sesrace = race+5 if ses == 2replace sesrace = race+10 if ses == 3sort sesracelist sesrace ses race, sepby(ses) +---------------------------------+ | sesrace ses race | |---------------------------------| 1. | 1 low hispanic | 2. | 2 low asian | 3. | 3 low african-amer | 4. | 4 low white | |---------------------------------| 5. | 6 middle hispanic | 6. | 7 middle asian | 7. | 8 middle african-amer | 8. | 9 middle white | |---------------------------------| 9. | 11 high hispanic | 10. | 12 high asian | 11. | 13 high african-amer | 12. | 14 high white | +---------------------------------+
Ahora, haremos un gráfico utilizando graph twoway. Fíjate que las barras están en tres grupos de cuatro barras. Los tres grupos corresponden a los tres niveles de ses y las cuatro barras dentro de cada grupo corresponden a los cuatro niveles de raza. Puedes relacionar esta agrupación con la forma en que construimos las razas anteriormente.
twoway (bar meanwrite sesrace)Image barcap5
Ahora podemos superponer las barras de error superponiendo un gráfico rcap
twoway (bar meanwrite sesrace) (rcap hiwrite lowrite sesrace)Image barcap6
Esto se parece a lo que queremos, pero se vería mejor si cada una de las barras de las cuatro razas diferentes fueran de diferentes colores. Podemos hacerlo superponiendo cuatro gráficos de barras separados, uno para cada grupo racial.
twoway (bar meanwrite sesrace if race==1) /// (bar meanwrite sesrace if race==2) /// (bar meanwrite sesrace if race==3) /// (bar meanwrite sesrace if race==4) /// (rcap hiwrite lowrite sesrace)Image barcap7Esto se ve mejor, pero usemos la leyenda para etiquetar mejor las barras.
twoway (bar meanwrite sesrace if race==1) /// (bar meanwrite sesrace if race==2) /// (bar meanwrite sesrace if race==3) /// (bar meanwrite sesrace if race==4) /// (rcap hiwrite lowrite sesrace), /// legend( order(1 "Hispanic" 2 "Asian" 3 "Black" 4 "White") )Image barcap8
La leyenda etiqueta bien las barras, pero quedaría más limpia si fuera una sola fila y el eje x del gráfico no transmitiera que los tres grupos de barras se corresponden con los tres grupos de ses. Podemos utilizar la opción xlabel() para remediarlo. También añadimos mejores títulos para los ejes x e y.
twoway (bar meanwrite sesrace if race==1) /// (bar meanwrite sesrace if race==2) /// (bar meanwrite sesrace if race==3) /// (bar meanwrite sesrace if race==4) /// (rcap hiwrite lowrite sesrace), /// legend(row(1) order(1 "Hispanic" 2 "Asian" 3 "Black" 4 "White") ) /// xlabel( 2.5 "Low" 7.5 "Middle" 12.5 "High", noticks) /// xtitle("Socio Economic Status") ytitle("Mean Writing Score")Image barcap9
Ahora tenemos un gráfico que se parece al tipo de gráfico que obtendríamos de graph bar pero afinando graph twoway bar para hacer este bonito gráfico, podríamos superponer la gráfica rbar para obtener las barras de error que deseamos.