Hoe kan ik een staafdiagram met foutbalken maken? | Stata FAQ
Zoals u nu schrijfscores bekijkt, uitgesplitst naar ras en ses. Misschien wilt u een grafiek maken van het gemiddelde en het betrouwbaarheidsinterval voor elke groep met behulp van een staafdiagram met foutenbalken, zoals hieronder wordt geïllustreerd. Deze FAQ laat zien hoe u zo’n grafiek kunt maken, stap voor stap.
Image barcap1
Eerst krijgen we het gegevensbestand dat we zullen gebruiken.
use https://stats.idre.ucla.edu/stat/stata/notes/hsb2, clear
Nu gaan we het commando collapse gebruiken om het gemiddelde en de standaardafwijking byrace en ses te maken.
collapse (mean) meanwrite= write (sd) sdwrite=write (count) n=write, by(race ses)
Nu maken we de bovenste en onderste waarden van het betrouwbaarheidsinterval.
generate hiwrite = meanwrite + invttail(n-1,0.025)*(sdwrite / sqrt(n))generate lowrite = meanwrite - invttail(n-1,0.025)*(sdwrite / sqrt(n))
Nu zijn we klaar om een staafdiagram van de gegevens te maken Met het commando staafdiagram kunnen we een mooi staafdiagram maken.
graph bar meanwrite, over(race) over(ses)Image barcap2
We kunnen de grafiek er nog wat mooier uit laten zien door de optie asyvars toe te voegen, zoals hieronder te zien is.
graph bar meanwrite, over(race) over(ses) asyvarsImage barcap3
Maar, deze grafiek heeft niet de foutbalken in zich. Helaas, hoe leuk het commando grafiekbalk ook is, het staat geen foutbalken toe. We kunnen echter wel een tweeweggrafiek maken met foutbalken, zoals hieronder. Helaas is deze grafiek niet zo mooi als de grafiek uit grafiekbalk.
graph twoway (bar meanwrite race) (rcap hiwrite lowrite race), by(ses)Image barcap4
Dus, we hebben een raadsel. Het commando staafgrafiek maakt een mooie staafgrafiek, maar ondersteunt geen foutbalken. De tweerichtingsbalkopdracht maakt mooie foutbalken, maar lijkt niet op de mooie grafiek die we graag zien met de grafiekbalkopdracht. We kunnen het twoway bar commando echter verfijnen om een grafiek te maken die lijkt op het graph bar commando en die dan combineren met error bars.
Eerst maken we een variabele sesrace die een enkele variabele is die de ses- en race-informatie bevat. Merk op dat sesrace een gat heeft tussen de niveaus van ses (bij 5 en 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 | +---------------------------------+
Nu maken we een grafiek met behulp van graph twoway. Merk op hoe de balken in drie groepen van vier balken staan. De drie groepen komen overeen met de drie ses-niveaus en de vier staafjes binnen elke groep komen overeen met de vier rassenniveaus. U kunt deze groepering relateren aan de manier waarop we de rassen hierboven hebben opgebouwd.
twoway (bar meanwrite sesrace)Image barcap5
We kunnen nu de foutenbalken over elkaar leggen door een rcap grafiek
twoway (bar meanwrite sesrace) (rcap hiwrite lowrite sesrace)Image barcap6
Dit lijkt een beetje op wat we willen, maar het zou mooier zijn als de balken voor de vier verschillende rassen verschillende kleuren hadden. We kunnen dit doen door vier afzonderlijke staafdiagrammen over elkaar te leggen, een voor elke rassengroep.
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 barcap7Dit ziet er al beter uit, maar laten we de legenda gebruiken om de staafjes beter te labelen.
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
De legenda labelt de balken mooi, maar zou er netter uitzien als het maar één rij was en de x-as van de grafiek niet uitstraalt dat de drie groepen balken overeenkomen met de drie groepen ses. We kunnen de optie xlabel() gebruiken om dat te verhelpen. We voegen ook betere titels toe voor de x- en y-as.
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
Nu hebben we een grafiek die lijkt op het soort grafiek dat we zouden krijgen van grafiek staaf maar door het verfijnen van grafiek tweerichtings staaf om deze mooie grafiek te maken, kunnen we dan de rbar-grafiek overlappen om de gewenste foutbalken te krijgen.