18.6 Tvorba pěkně formátovaných výsledků s balíkem stargazer
Pro porovnání výsledků odhadů je užitečné srovnat si je vedle sebe do tabulky, jakou znáte z empirických článků. Tento úkol umí splnit balík Marka Hlaváče stargazer
.
Stargazer dokáže vytvářet a do ASCII, HTML a LaTeXu exportovat:
- regresní tabulky
- tabulky popisných statistik
- exportovat vstupní
data.frame
bez další transformace (to je užitečné například pro export korelačních tabulek)
Balik stargazer
obsahuje jedinou funkci stargazer()
, ktera ma velke mnozstvi parametru - srozumitelny tutorial najdete napriklad zde: http://jakeruss.com/cheatsheets/stargazer.html
Vstupem do funkce může být:
- jeden nebo více odhadnutých modelů různých tříd (viz seznam v helpu)
- data.framy, vektory nebo matice pro tvorbu popisných statistik nebo přímý export
Vstupy mohou být vloženy jednotlivě nebo jako list
, popřípadě list
v listu
.
18.6.1 Tabulka s popisnými statistikami
Tvorbu tabulky s popisnými statistikami je možné ilustrovat na minimalistickém příkladu. Vstupem je v tomto případě data.frame
. Klíčovým parametrem je summary = TRUE
, který říká stargazeru
, že má vytvořit popisné statistiky. V případě FALSE
by exportoval vstupní tabulku tak jak je.
Parametr type
udává formát, do kterého stargazer
exportuje. Možná nastavení jsou html
, text
a latex
(default). Zde nevyužitým parametrem je out
– do něj se vkládá jméno výstupního souboru.
Statistic | N | Mean | St. Dev. | Min | Pctl(25) | Pctl(75) | Max |
Age | 10,384 | 26.069 | 5.441 | 13 | 22 | 29 | 71 |
Height | 9,823 | 1.769 | 0.113 | 1.320 | 1.690 | 1.850 | 2.210 |
Weight | 9,104 | 72.853 | 16.067 | 36.000 | 61.000 | 81.000 | 218.000 |
Gold | 10,384 | 0.017 | 0.136 | 0 | 0 | 0 | 2 |
Silver | 10,384 | 0.017 | 0.133 | 0 | 0 | 0 | 2 |
Bronze | 10,384 | 0.018 | 0.136 | 0 | 0 | 0 | 2 |
Total | 10,384 | 0.052 | 0.250 | 0 | 0 | 0 | 5 |
V základním nastavení stargazer
vrací počet pozorování, průměr, směrodatnou odchylku, minimum a maximum. Výčet statistik, stejná jako formátování tabulky, lze měnit pomocí parametrů funkce stargazer()
.
Pozor, stargazer neumí zpracovat tibble! Tabulka oly12
je tibble:
Výstup bude vypadat následovně:
Statistic | N | Mean | St. Dev. | Min | Pctl(25) | Pctl(75) | Max |
Pro správnou funkci je potřeba tabulku odtibblovat – například pomocí as.data.frame(oly12)
.
18.6.2 Tabulka s regresními modely
Pokud jsou vstupem stagazeru odhadnuté modely nebo jejich list, potom stargazer
automaticky vytvoří regresní tabulku. Pro ilustraci můžeme použít list Spec_models
.
Pro vytvoření regresní tabulky ze Spec_models
je vhodné použít další z mnoha parametrů funkce stargazer()
. Jeden z modelů ve Spec_models
obsahuje velké množství fixních efektů. Jejich odhady nás v podstatě nezajímají, ale jejich výpis by tabulku zvětšil do obrovských rozměrů. Použijeme proto parametr omit
, který umožňuje potlačit výpis parametrů, jejichž jména odpovídají zadanému regulárnímu výrazu.
V parametru omit.labels
je možné nastavit jméno, které se má použít pro signalizaci přítomnosti nevytisknutých proměnných v regresi.
stargazer(
Spec_models,
type = pandoc.output.format(),
omit = "factor\\(Country\\)",
omit.labels = "Country FE"
)
Dependent variable: | |||
Weight | |||
(1) | (2) | (3) | |
Height | 94.635*** | 78.902*** | 94.887*** |
(1.141) | (1.814) | (1.234) | |
Age | 0.410*** | 0.392*** | 0.491*** |
(0.110) | (0.109) | (0.110) | |
I(Age2) | -0.004** | -0.004** | -0.005*** |
(0.002) | (0.002) | (0.002) | |
SexM | 5.592*** | -39.474*** | 5.502*** |
(0.256) | (4.065) | (0.266) | |
Height:SexM | 25.695*** | ||
(2.313) | |||
Constant | -106.013*** | -78.891*** | -112.691*** |
(2.385) | (3.402) | (6.240) | |
Country FE | No | No | No |
Observations | 9,038 | 9,038 | 9,038 |
R2 | 0.603 | 0.608 | 0.628 |
Adjusted R2 | 0.603 | 0.608 | 0.620 |
Residual Std. Error | 10.126 (df = 9033) | 10.058 (df = 9032) | 9.909 (df = 8837) |
F Statistic | 3,430.928*** (df = 4; 9033) | 2,806.601*** (df = 5; 9032) | 74.631*** (df = 200; 8837) |
Note: | p<0.1; p<0.05; p<0.01 |
Za povšimnutí stojí, že stargazer
defaultně používá jinou hvězdičkovou konvenci, než je tomu ve zbytku R. Ve v tabulce vytvořené stargazerem vidíte stejnou konvenci, na kterou jste zvyklí z Gretlu. R defaultně hvězdičkami více šetří – viz summary
výše.
Stargazer poskytuje extrémně užitečnou funkcionalitu, nicméně celkově se jedná o dost nemoderní balík s velmi složitým kódem, který je náchylný k chybám a divnému chování.
Výše ukázané tabulky neobsahují robustní chyby. Protože z testů víme, že rezidua jsou heteroskedastická, musíme je do tabulek dostat.
V defaultním nastavení stargazer
získává odhad standardních chyb vnitřním voláním summary
. Uživatel však může vložit vlastní odhady robustních chyb do argumentu se
. Ten očekává list
numerických vektorů. (V nápovědě k parametru se
je v aktuální verzi chyba.)
Postup je následující:
- Nejprve vytvoříme funkci
get.se
, která odhadne robustní chyby a vrátí je jako vektor. - Pomocí
lapply
aplikujeme funkciget.se
na všechny modely v listuSpec_models
. - Výsledný list vektorů vložíme do parametru
se
stargazeru
.
Zároveň totéž provedeme pro p-hodnoty.
get.se <- function(x) coeftest(x, vcov. = vcovHC) %>%
tidy %>%
pull(std.error)
get.pval <- function(x) coeftest(x, vcov. = vcovHC) %>%
tidy %>%
pull(p.value)
se.list <- lapply(Spec_models, get.se)
pval.list <- lapply(Spec_models, get.pval)
stargazer(
Spec_models,
type = pandoc.output.format(),
omit = "Country",
omit.labels = "Country FE",
se = se.list,
p = pval.list
)
Dependent variable: | |||
Weight | |||
(1) | (2) | (3) | |
Height | 94.635*** | 78.902*** | 94.887 |
(1.212) | (1.682) | ||
Age | 0.410*** | 0.392*** | 0.491 |
(0.092) | (0.091) | ||
I(Age2) | -0.004*** | -0.004** | -0.005 |
(0.002) | (0.002) | ||
SexM | 5.592*** | -39.474*** | 5.502 |
(0.244) | (4.125) | ||
Height:SexM | 25.695*** | ||
(2.352) | |||
Constant | -106.013*** | -78.891*** | -112.691 |
(2.453) | (3.149) | ||
Country FE | No | No | No |
Observations | 9,038 | 9,038 | 9,038 |
R2 | 0.603 | 0.608 | 0.628 |
Adjusted R2 | 0.603 | 0.608 | 0.620 |
Residual Std. Error | 10.126 (df = 9033) | 10.058 (df = 9032) | 9.909 (df = 8837) |
F Statistic | 3,430.928*** (df = 4; 9033) | 2,806.601*** (df = 5; 9032) | 74.631*** (df = 200; 8837) |
Note: | p<0.1; p<0.05; p<0.01 |
Pokud bychom chtěli vytvořit regresní tabulku z modelů odhadnutých pro jednotlivé sporty, můžeme využít toho, že data.frame
je ve své podstatě list
:
Burns, Patrick. 2011. "The R Inferno." http://www.burns-stat.com/pages/Tutor/R_inferno.pdf.
Grolemund, Garrett, and Hadley Wickham. 2011. "Dates and Times Made Easy with Lubridate." Journal of Statistical Software 40 (3): 1-25. https://www.jstatsoft.org/article/view/v040i03.
Peng, Roger D. 2016. R Programming for Data Science. LeanPub. https://bookdown.org/rdpeng/rprogdatascience/.
Spector, Phil. 2008. Data Manipulation with R. 1st ed. Use R! Springer.
Wickham, Hadley. 2014. Advanced R. 1st ed. Boca Raton, Florida, USA: Chapman; Hall/CRC. http://adv-r.had.co.nz/.
Wickham, Hadley, and Garrett Grolemund. 2017. R forData Science. 1st ed. Sebastopol, California, USA: O'Reilly. http://r4ds.had.co.nz/.