Como posso fazer um gráfico de barras com barras de erro? | Stata FAQ
Diga que estava a olhar para escrever notas repartidas por raça e ses. Poderá querer fazer um gráfico da média e do intervalo de confiança para cada grupo utilizando um gráfico de barras com barras de erro, como ilustrado abaixo. Esta FAQ mostra como se pode fazer um gráfico como este, construindo-o passo a passo.
Image barcap1
Primeiro, vamos obter o ficheiro de dados que vamos utilizar.
use https://stats.idre.ucla.edu/stat/stata/notes/hsb2, clear
Agora, vamos usar o comando de colapso para fazer a média e o desvio padrão byrace e ses.
collapse (mean) meanwrite= write (sd) sdwrite=write (count) n=write, by(race ses)
Agora, vamos fazer os valores superior e inferior do intervalo de confiança.
generate hiwrite = meanwrite + invttail(n-1,0.025)*(sdwrite / sqrt(n))generate lowrite = meanwrite - invttail(n-1,0.025)*(sdwrite / sqrt(n))
Agora estamos prontos para fazer um gráfico de barras dos dados O comando do gráfico de barras faz um bonito gráfico de barras.
graph bar meanwrite, over(race) over(ses)Image barcap2
Podemos tornar o gráfico um pouco mais bonito adicionando a opção asyvars como se mostra abaixo.
graph bar meanwrite, over(race) over(ses) asyvarsImage barcap3
Mas, este gráfico não tem as barras de erro. Infelizmente, tão agradável como o comando da barra de erro do gráfico, não permite barras de erro. No entanto, podemos fazer um gráfico de dois sentidos que tem barras de erro como se mostra a seguir. Infelizmente, este gráfico não é tão atractivo como o gráfico da barra do gráfico.
graph twoway (bar meanwrite race) (rcap hiwrite lowrite race), by(ses)
Então, temos um enigma. O comando da barra gráfica fará um gráfico de barras encantador, mas não suportará barras de erro. O comando de barras de dois sentidos faz barras de erro encantadoras, mas não se assemelha ao gráfico agradável que gostamos do comando de barras de erro do gráfico. Contudo, podemos aperfeiçoar o comando de barra de dois sentidos para fazer um gráfico que se assemelhe ao comando da barra gráfica e depois combiná-lo com barras de erro. Aqui está um processo passo a passo.
P>Primeiro, faremos uma variável sesrace que será uma única variável que conterá as ses e a informação da raça. Note como sesrace tem um intervalo entre os níveis de ses (a 5 e 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 | +---------------------------------+
Agora, faremos um gráfico usando o gráfico twoway. Notar como as barras estão em três grupos de quatro barras. Os três grupos correspondem aos três níveis de ses e as quatro barras dentro de cada grupo correspondem aos quatro níveis de raça. Pode relacionar este agrupamento com a forma como construímos as corridas acima.
twoway (bar meanwrite sesrace)
Agora podemos sobrepor as barras de erro por sobreposição um gráfico rcap
twoway (bar meanwrite sesrace) (rcap hiwrite lowrite sesrace)Image barcap6
Este tipo de aspecto parece-se com o que nós queremos, mas seria mais bonito se cada uma das barras para as quatro raças diferentes fosse de cores diferentes. Podemos fazer isto sobrepondo quatro gráficos de barras separadas, um 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 barcap7Isto parece melhor, mas vamos usar a legenda para rotular melhor as 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
A legenda etiqueta bem as barras, mas teria um aspecto mais limpo se fosse apenas uma fila e o eixo x do gráfico não transmitisse que os três grupos de barras correspondem aos três grupos de ses. Podemos utilizar a opção xlabel() para remediar isso. Adicionamos também melhores títulos para os eixos 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
Agora temos um gráfico que se parece com o tipo de gráfico que obteríamos a partir da barra do gráfico, mas finalizando a barra do gráfico de dois em dois dias para fazer este bonito gráfico, podíamos então sobrepor o gráfico rbar para obter as barras de erro que desejávamos.