6 Regressionstabellen
6.1 regression
Regressionstabellen sind wohl der Klassiker des Tabellenexports.
Das grundsätzliche Vorgehen für das Erstellen von Regressionstabellen mit esttab
ist etwas anders als bei den Deskriptionstabellen:
reg F518_SUF c.zpalter // einfaches Regressionsmodell
estimates store reg1 // Ergebnisse speichern
// (ausgeblendet) esttab reg1
Mit ereturn list
bekommen wir alle abrufbaren Informationen angezeigt:
Source | SS df MS Number of obs = 16,543
-------------+---------------------------------- F(1, 16541) = 105.36
Model | 1.3092e+09 1 1.3092e+09 Prob > F = 0.0000
Residual | 2.0555e+11 16,541 12426773 R-squared = 0.0063
-------------+---------------------------------- Adj R-squared = 0.0063
Total | 2.0686e+11 16,542 12505168 Root MSE = 3525.2
------------------------------------------------------------------------------
F518_SUF | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
zpalter | 24.62253 2.398848 10.26 0.000 19.92053 29.32453
_cons | 2381.28 115.577 20.60 0.000 2154.736 2607.823
------------------------------------------------------------------------------
scalars:
e(rank) = 2
e(ll_0) = -158642.9792418738
e(ll) = -158590.4618746699
e(r2_a) = .0062690083366028
e(rss) = 205551251614.9366
e(mss) = 1309236899.97876
e(rmse) = 3525.162828161657
e(r2) = .0063290815436915
e(F) = 105.3561454498825
e(df_r) = 16541
e(df_m) = 1
e(N) = 16543
macros:
e(cmdline) : "regress F518_SUF c.zpalter"
e(title) : "Linear regression"
e(marginsok) : "XB default"
e(vce) : "ols"
e(depvar) : "F518_SUF"
e(cmd) : "regress"
e(properties) : "b V"
e(predict) : "regres_p"
e(model) : "ols"
e(estat_cmd) : "regress_estat"
matrices:
e(b) : 1 x 2
e(V) : 2 x 2
functions:
e(sample)
Mit est dir
bekommen wir übrigens eine Übersicht über alle Ergebnisse. Mit restore name
können wir ein Modell “aktivieren”. Mit est drop _all
können wir alle estimates löschen.
Alle unter e()
abgespeicherten Informationen können wir direkt in unsere esttab
einfügen. Los geht’s:
6.2 Eine Tabelle, ein Modell
// Tabelle mit Standard-Einstellungen esttab reg1
(1)
F518_SUF
----------------------------
zpalter 24.62***
(10.26)
_cons 2381.3***
(20.60)
----------------------------
N 16543
----------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Das ist noch sehr basic. U.a. sind häufig statt der t-Werte die Standardfehler in Klammern genannt. Grundsätzlich können wir folgende Kennzahlen anfordern: + b
Regressionskoeffizienten + se
Standardfehler + t
t-Werte + p
p-Werte + ci
95%-Konfidenzintervalle + beta
standardisierte Koeffizienten
label // Formatierung, SE statt t + Variablen Labels esttab reg1, b se(%9.3f)
(1)
Wie hoch i~h
------------------------------------
Alter der Zielp 24.62***
(2.399)
Constant 2381.3***
(115.577)
------------------------------------
Observations 16543
------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Außerdem wollen wir in der Regel nicht nur die Fallzahl, sondern auch weitere Informationen zum Modell angeben. Dabei können wir auf die Liste, die wir vorhin bei ereturn list
gesehen haben, zurückgreifen.
stats(N r2 ll F) // Modellkennzahlen angeben (volle Liste oben bei ereturn list) esttab reg1, b se(%9.3f)
(1)
F518_SUF
----------------------------
zpalter 24.62***
(2.399)
_cons 2381.3***
(115.577)
----------------------------
N 16543
r2 0.00633
ll -158590.5
F 105.4
----------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Diese Informationen können wir natürlich auch labeln und formatieren wie wir es schon kennengelernt haben. Auch coeflabel
funktioniert hier so wie bei tabstat
zuvor:
///
esttab reg1, b se(%9.3f) stats(r2 r2_a N, fmt(%9.4f %9.4f %9.0fc) labels("R²" "adj. R²" "Observations")) /// N und R² labeln
"Alter" _cons "Konstante") // Koeffizienten links labeln coeflabel(zpalter
(1)
F518_SUF
----------------------------
Alter 24.62***
(2.399)
Konstante 2381.3***
(115.577)
----------------------------
R² 0.0063
adj. R² 0.0063
Observations 16,543
----------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Außerdem können wir mit mtitles
die Beschrifung anpassen und mit nonumbers
die Zahl oben ausblenden. Mit title
können wir einen Tabellentitel und mit note
eine Notiz unten hinzufügen. Wenn wir mehrere Zeilen möchten, dann geben wir einfach "Text in 1. Zeile" "Text in 2. Zeile"
an:
///
esttab reg1, b se(%9.3f) stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
"Alter" _cons "Konstante") ///
coeflabel(zpalter "1. Modell") ///
mtitles(///
nonumbers title(Tabellentitel) /// Titel für die Tabelle
"erste Anmerkung" "zweite Anmerkung darunter") // Notizen ganz unten addnotes(
Tabellentitel
----------------------------
1. Modell
----------------------------
Alter 24.62***
(2.399)
Konstante 2381.3***
(115.577)
----------------------------
R² 0.006
Observations 16543
----------------------------
Standard errors in parentheses
erste Anmerkung
zweite Anmerkung darunter
* p<0.05, ** p<0.01, *** p<0.001
Auch Signifikanzsterne anpassen, mit star()
///
esttab reg1, b se(%9.3f) stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
"Alter" _cons "Konstante") ///
coeflabel(zpalter star(+ 0.10 * 0.05 ** 0.01 *** 0.001 **** 0.0001)
(1)
F518_SUF
-----------------------------
Alter 24.62****
(2.399)
Konstante 2381.3****
(115.577)
-----------------------------
R² 0.006
Observations 16543
-----------------------------
Standard errors in parentheses
+ p<0.10, * p<0.05, ** p<0.01, *** p<0.001, **** p<0.0001
Die Klammern können wir mit noparentheses
unterdrücken oder mit brackets
auf []
ändern.
6.2.1 Neben- statt untereinander
Dafür steht uns wide
zur Verfügung:
///
esttab reg1, b se(%9.3f) wide ///
stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
"Alter" _cons "Konstante") ///
coeflabel(zpalter title(Modelltitel) ///
"erste Anmerkung" "zweite Anmerkung darunter") addnotes(
Modelltitel
-----------------------------------------
(1)
F518_SUF
-----------------------------------------
Alter 24.62*** (2.399)
Konstante 2381.3*** (115.577)
-----------------------------------------
R² 0.006
Observations 16543
-----------------------------------------
Standard errors in parentheses
erste Anmerkung
zweite Anmerkung darunter
* p<0.05, ** p<0.01, *** p<0.001
Leider funktioniert das nicht für mehr als zwei Kennzahlen:
ci(%9.3f) p(%9.3f) ///
esttab reg1,b se(%9.3f) wide ///
stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
"Alter" _cons "Konstante") ///
coeflabel(zpalter star(+ 0.10 * 0.05 ** 0.01 *** 0.001 **** 0.0001) ///
title(Modelltitel) ///
"erste Anmerkung" "zweite Anmerkung darunter") addnotes(
only one allowed of z, se, p, ci, and aux()
r(198);
end of do-file
r(198);
Hier müssen wir dann auf cells()
und ""
zurückgreifen. Mit ci_l
und ci_u
statt ci
bekommen wir außerdem die untere und obere KI-Grenze in separaten Spalten angezeigt, was das Ganze etwas übersichtlicher macht:
"b se(fmt(%9.3f)) ci(fmt(%9.2f)) p(fmt(%9.3f))")
esttab reg1, cells("b se(fmt(%9.3f)) ci_l(fmt(%9.2f)) ci_u(fmt(%9.2f)) p(fmt(%9.3f))") // Übersichtlicher: KIs aufteilen in zwei Spalten esttab reg1, cells(
(1)
F518_SUF
b se ci95 p
----------------------------------------------------------------
zpalter 24.62253 2.399 19.92,29.32 0.000
_cons 2381.28 115.577 2154.74,2607.82 0.000
----------------------------------------------------------------
N 16543
----------------------------------------------------------------
-----------------------------------------------------------------------------
(1)
F518_SUF
b se min95 max95 p
-----------------------------------------------------------------------------
zpalter 24.62253 2.399 19.92 29.32 0.000
_cons 2381.28 115.577 2154.74 2607.82 0.000
-----------------------------------------------------------------------------
N 16543
-----------------------------------------------------------------------------
Auch das können wir labeln - mit collabels
:
"b se(fmt(%9.3f)) ci_l(fmt(%9.2f)) ci_u(fmt(%9.2f)) p(fmt(%9.3f))") ///
esttab reg1, cells("B" "SE" "u.KI" "o.KI" "p") // labels collabels(
(1)
F518_SUF
B SE u.KI o.KI p
-----------------------------------------------------------------------------
zpalter 24.62253 2.399 19.92 29.32 0.000
_cons 2381.28 115.577 2154.74 2607.82 0.000
-----------------------------------------------------------------------------
N 16543
-----------------------------------------------------------------------------
6.3 kategoriale unabhängige Variable
Für kategoriale unabhängige Variablen stellt sich noch die Herausforderung, dass wir die Referenzkategorie richtig angeben möchten.
reg F518_SUF i.S1
estimates store reg2
///
esttab reg2, b se(%9.3f) "Maenner" 2.S1 "Frauen" _cons "Konstante") coeflabel(1.S1
(1)
F518_SUF
----------------------------
Maenner 0
(.)
Frauen -1431.8***
(53.630)
Konstante 4232.7***
(37.515)
----------------------------
N 16635
----------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Um Referenzkategorie in der Tabelle kennzuzeichnen, muss die Regression mit xi:
erstellt werden. Der Koeffizienten für S1
= 2 ist dann _IS1_2
:
xi: reg F518_SUF i.S1
estimates store reg2b
///
esttab reg2b, b se(%9.3f) "Frauen" _cons "Konstante") coeflabel(_IS1_2
(1)
F518_SUF
----------------------------
Frauen -1431.8***
(53.630)
Konstante 4232.7***
(37.515)
----------------------------
N 16635
----------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Mit refcat()
können wir jetzt eine Zeile in die Tabelle einfüge. Dazu geben wir die Variable an, überhalb derer die Zeile eingefügt werden soll (hier also _IS1_2
) und den Text, der links in der Beschriftung angezeigt werden soll:
///
esttab reg2b, b se(%9.3f) "Frauen" _cons "Konstante") ///
coeflabel(_IS1_2 "Männer") refcat(_IS1_2
(1)
F518_SUF
----------------------------
Männer ref.
Frauen -1431.8***
(53.630)
Konstante 4232.7***
(37.515)
----------------------------
N 16635
----------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Mit label("Referenzkategorie")
können wir ref.
ersetzen. Mit below
wird die Zeile unter der angegebenen Variable eingefügt.
///
esttab reg2b, b se(%9.3f) "Frauen" _cons "Konstante") ///
coeflabel(_IS1_2 "Männer", label("Referenzkategorie") below) refcat(_IS1_2
6.4 mehrere Regressionsmodelle nebeneinander
Häufig haben wir aber mehrere Regressionsmodelle, die aufeinander aufbauen und sich alle auf die gleiche abhängige Variable beziehen. Für eine Übersicht werden solche Modelle häufig nebeneinander gestellt in einer Tabelle gezeigt. Auch das geht mit esttab
.
Wir können nämlich mit estimates store
(est store
) auch mehrere Modelle speichern und dann namentlich aufrufen.
Dafür könnnen wir auch “wild cards” verwenden - also *
als Platzhalter für “alles oder nichts” und ?
für “irgendein Zeichen”. Mit est dir
bekommen wir eine Liste alle gespeicherten Ergebnisse ausgegeben. estimates clear
löst alle Ergebnisse, est drop name
nur das Modell name
.
Genestete Modelle lassen sich mit einer Schleife elegant erstellen. Wir können dafür in global
s die Kontrollvariablen angeben und anschließend die Modelle nacheinander schätzen lassen.
" "
glo mod1 "c.zpalter"
glo mod2 "c.zpalter##c.zpalter"
glo mod3 "c.zpalter##c.zpalter i.m1202"
glo mod4
forval i = 1/4 {xi: reg F518_SUF i.S1 ${mod`i'}
est store regm`i'
} esttab regm*, b se(%9.3f)
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
_IS1_2 -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
zpalter 28.45*** 146.5*** 130.8***
(2.350) (17.208) (16.839)
c.zpalter#~r -1.317*** -1.193***
(0.190) (0.186)
_Im1202_2 470.2***
(119.627)
_Im1202_3 1114.5***
(143.641)
_Im1202_4 2322.9***
(120.657)
_cons 4232.7*** 2922.0*** 467.3 -334.3
(37.515) (114.755) (372.647) (364.132)
----------------------------------------------------------------------------
N 16635 16543 16543 16521
----------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Auch hier lohnt sich aber natürlich etwas label-Arbeit:
///
esttab regm*, b se(%9.3f) "Frauen" zpalter "Alter" ///
coeflabel(_IS1_2 "Alter²" ///
c.zpalter#c.zpalter "dual/schul. Abs." ///
_Im1202_2 "Meister/Techniker" ///
_Im1202_3 "Hochschule/Uni" ///
_Im1202_4 _cons "Konstante") ///
"Männer" ///
refcat(_IS1_2 "kein Abs.") ///
_Im1202_2 ///
nomtitle stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
varwidth(20)
(1) (2) (3) (4)
------------------------------------------------------------------------------------
Männer ref. ref. ref. ref.
Frauen -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
Alter 28.45*** 146.5*** 130.8***
(2.350) (17.208) (16.839)
Alter² -1.317*** -1.193***
(0.190) (0.186)
kein Abs. ref.
dual/schul. Abs. 470.2***
(119.627)
Meister/Techniker 1114.5***
(143.641)
Hochschule/Uni 2322.9***
(120.657)
Konstante 4232.7*** 2922.0*** 467.3 -334.3
(37.515) (114.755) (372.647) (364.132)
------------------------------------------------------------------------------------
R² 0.041 0.049 0.052 0.117
Observations 16635 16543 16543 16521
------------------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
6.5 Nur ein Koeffizient
Manchmal möchten wir die Tabelle etwas entrümpeln und nur den interessierenden Koeffizienten behalten, das geht mit keep()
:
keep(_IS1_2)
esttab regm*, b se(%9.3f) keep(_IS1_2 zpalter) // mehrere mit Leerzeichen esttab regm*, b se(%9.3f)
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
_IS1_2 -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
----------------------------------------------------------------------------
N 16635 16543 16543 16521
----------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
----------------------------------------------------------------------------
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
_IS1_2 -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
zpalter 28.45*** 146.5*** 130.8***
(2.350) (17.208) (16.839)
----------------------------------------------------------------------------
N 16635 16543 16543 16521
----------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Allerdings fehlt hier jetzt die Information, welche Kontrollvariablen jeweils im Modell waren. Da kann uns estadd local
weiter helfen. Damit können wir einen Text zu jedem estimate
hinzufügen und den dann unten in der Tabelle ausgeben lassen. Wir erweitern unsere Schleife also und lassen sie nochmal laufen. Mit scalars("note Kontrollvariablen")
werden die vorher abgelegten note
s dann als Zeile Kontrollvariablen
in der Tabelle angezeigt. Mit modelwidth()
können wir die Breite der Spalten steuern.
" "
glo mod1 "c.zpalter"
glo mod2 "c.zpalter##c.zpalter"
glo mod3 "c.zpalter##c.zpalter i.m1202"
glo mod4
forval i = 1/4 {xi: reg F518_SUF i.S1 ${mod`i'}
est store regm`i'
local note "${mod`i'}"
estadd
}keep(_IS1_2) scalars("note Kontrollvariablen")
esttab regm*, b se(%9.3f) keep(_IS1_2) scalars("note Kontrollvariablen") ///
esttab regm*, b se(%9.3f) ///
modelwidth(25) "Frauen") ///
coeflabel(_IS1_2 "Männer") refcat(_IS1_2
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
_IS1_2 -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
----------------------------------------------------------------------------
N 16635 16543 16543 16521
Kontrollva~n c.zpalter c.zpalter##c.zpalter c.zpalter##c.zpalter i.m1202
----------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
--------------------------------------------------------------------------------------------------------------------------------
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
--------------------------------------------------------------------------------------------------------------------------------
Männer ref. ref. ref. ref.
Frauen -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
--------------------------------------------------------------------------------------------------------------------------------
N 16635 16543 16543 16521
Kontrollva~n c.zpalter c.zpalter##c.zpalter c.zpalter##c.zpalter i.m1202
--------------------------------------------------------------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Mit der regex
-Funktion ustrregexra("","Suchtext", "Ersetztext")
können wir aus den Variablenangaben auch noch sprechendere Bezeichnungen machen. Die Option quietly
vor dem reg
-Befehl unterdrückt die Standard-Regressionstabelle von Stata.
forval i = 1/4 {quietly xi: reg F518_SUF i.S1 ${mod`i'}
est store regm`i'
note "${mod`i'}"
loc note = ustrregexra("`note'","^\s", "-") // ^\s = "an Anfang Leerzeichen"
loc note = ustrregexra("`note'","c.zpalter##c.zpalter", "Alter & Alter^2")
loc note = ustrregexra("`note'","c.zpalter", "Alter")
loc note = ustrregexra("`note'"," i.m1202", ", Ausbildung")
loc local note "`note'"
estadd
}
keep(_IS1_2) scalars("note Kontrollvariablen") ///
esttab regm*, b se(%9.3f) ///
modelwidth(25) ///
varwidth(17) "Frauen") ///
coeflabel(_IS1_2 "Männer") ///
refcat(_IS1_2 nomtitle
(1) (2) (3) (4)
-------------------------------------------------------------------------------------------------------------------------------------
Männer ref. ref. ref. ref.
Frauen -1431.8*** -1471.7*** -1496.8*** -1458.5***
(53.630) (53.722) (53.768) (52.124)
-------------------------------------------------------------------------------------------------------------------------------------
N 16635 16543 16543 16521
Kontrollvariablen - Alter Alter & Alter^2 Alter & Alter^2, Ausbildung
-------------------------------------------------------------------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
6.6 mehrere Modellgruppen
Manchmal möchten wir auch getrennte Modelle nebeneinander stellen. Auch das geht natürlich. Hier also eine Schleife über die Werte 1
und 2
von S1
, also getrennte Modelle für Männer und Frauen durch die Bedingung if S1 == s
am Ende des reg
-Befehls:
forvalues s = 1/2 {
reg F518_SUF c.zpalter##c.zpalter if S1 == `s'
est store reg_`s'_1
local note "Alter & Alter^2"
estadd
reg F518_SUF c.zpalter##c.zpalter i.m1202 if S1 == `s'
est store reg_`s'_2
local note "Alter & Alter^2, Ausbildung"
estadd
} esttab reg_*
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
zpalter 213.0*** 192.2*** 42.43 33.35
(8.44) (7.78) (1.88) (1.51)
c.zpalter#~r -1.930*** -1.810*** -0.326 -0.217
(-6.90) (-6.63) (-1.31) (-0.89)
1.m1202 0 0
(.) (.)
2.m1202 390.5* 524.5***
(2.12) (3.56)
3.m1202 1172.5*** 1020.9***
(5.45) (5.55)
4.m1202 2549.6*** 2046.7***
(13.72) (13.76)
_cons -1210.6* -1824.9*** 1560.8** 606.5
(-2.22) (-3.43) (3.15) (1.25)
----------------------------------------------------------------------------
N 8451 8442 8092 8079
----------------------------------------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
Mit mgroups
können wir dann mehrere Spalten überschreiben. pattern
gibt dabei die Gruppierung an: 1
steht für “(nächstes) Label”, 0
für “unter vorheriges einordnen”.
///
esttab reg_*, r2 "Männer" "Frauen", pattern(1 0 1 0))
mgroups(///
esttab reg_*, r2 "" "Männer" "Frauen", pattern(1 1 0 1 )) mgroups(
Männer Frauen
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
zpalter 213.0*** 192.2*** 42.43 33.35
(8.44) (7.78) (1.88) (1.51)
c.zpalter#~r -1.930*** -1.810*** -0.326 -0.217
(-6.90) (-6.63) (-1.31) (-0.89)
1.m1202 0 0
(.) (.)
2.m1202 390.5* 524.5***
(2.12) (3.56)
3.m1202 1172.5*** 1020.9***
(5.45) (5.55)
4.m1202 2549.6*** 2046.7***
(13.72) (13.76)
_cons -1210.6* -1824.9*** 1560.8** 606.5
(-2.22) (-3.43) (3.15) (1.25)
----------------------------------------------------------------------------
N 8451 8442 8092 8079
R-sq 0.021 0.089 0.003 0.072
----------------------------------------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
----------------------------------------------------------------------------
Männer Frauen
(1) (2) (3) (4)
F518_SUF F518_SUF F518_SUF F518_SUF
----------------------------------------------------------------------------
zpalter 213.0*** 192.2*** 42.43 33.35
(8.44) (7.78) (1.88) (1.51)
c.zpalter#~r -1.930*** -1.810*** -0.326 -0.217
(-6.90) (-6.63) (-1.31) (-0.89)
1.m1202 0 0
(.) (.)
2.m1202 390.5* 524.5***
(2.12) (3.56)
3.m1202 1172.5*** 1020.9***
(5.45) (5.55)
4.m1202 2549.6*** 2046.7***
(13.72) (13.76)
_cons -1210.6* -1824.9*** 1560.8** 606.5
(-2.22) (-3.43) (3.15) (1.25)
----------------------------------------------------------------------------
N 8451 8442 8092 8079
R-sq 0.021 0.089 0.003 0.072
----------------------------------------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
6.7 Einmal mit allem
All diese Formatierungen sind natürlich kombinierbar:
" "
glo mod1 "c.zpalter"
glo mod2 "c.zpalter##c.zpalter"
glo mod3 "c.zpalter##c.zpalter i.m1202"
glo mod4
forvalues s = 1/2 {
xi: reg F518_SUF c.zpalter##c.zpalter if S1 == `s'
est store reg_`s'_1
local note "Alter & Alter^2"
estadd
xi: reg F518_SUF c.zpalter##c.zpalter i.m1202 if S1 == `s'
est store reg_`s'_2
local note "Alter & Alter^2, Ausbildung"
estadd
}
///
esttab reg_* , ///
b se(%9.3f) ///
nomtitle "Frauen" zpalter "Alter" ///
coeflabel(_IS1_2 "Alter²" ///
c.zpalter#c.zpalter "dual/schul. Abs." ///
_Im1202_2 "Meister/Techniker" ///
_Im1202_3 "Hochschule/Uni" ///
_Im1202_4 _cons "Konstante") ///
stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
"kein Abs.") ///
refcat(_Im1202_2 "Männer" "Frauen", pattern(1 0 1 0)) ///
mgroups( varwidth(20)
Männer Frauen
(1) (2) (3) (4)
------------------------------------------------------------------------------------
Alter 213.0*** 192.2*** 42.43 33.35
(25.236) (24.688) (22.611) (22.120)
Alter² -1.930*** -1.810*** -0.326 -0.217
(0.280) (0.273) (0.249) (0.243)
dual/schul. Abs. 390.5* 524.5***
(183.930) (147.488)
Meister/Techniker 1172.5*** 1020.9***
(215.289) (183.784)
Hochschule/Uni 2549.6*** 2046.7***
(185.774) (148.792)
Konstante -1210.6* -1824.9*** 1560.8** 606.5
(544.709) (532.431) (494.799) (483.370)
------------------------------------------------------------------------------------
R² 0.021 0.089 0.003 0.072
Observations 8451 8442 8092 8079
------------------------------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
6.8 Übungen
6.8.1 Übung
- Erstellen Sie ein bivariates Regressionsmodell mit
F518_SUF
als abhängiger undaz
als unabhängiger Variable.
reg F518_SUF az
- Speichern Sie die Ergebnisse mit
estimates store
und erstellen Sie eine Tabelle mitesttab
- Wie können Sie die Standardfehler statt der t-Werte anzeigen lassen?
- Lassen Sie sich auch das R² und die Fallzahl ausgeben.
- Labeln Sie die Variablen links in der Tabelle.
- Verändern Sie das Signifikanzniveau
- Lassen Sie sich den Koeffizienten, den SE, die 95%-KI-Grenzen, den t-Wert und den p-Wert für die Variable und die Konstante neben- statt untereinander anzeigen.
6.8.2 Übung
- Erstellen Sie ein bivariates Regressionsmodell mit
F518_SUF
als abhängiger undmig
als unabhängiger Variable. Inmig01
steht dann0
für keinen Migrationshintergrund und1
für Migrationshintergrund (siehe auch01_init.do
):
gen mig01 = Mig != 0 if !missing(Mig)
reg F518_SUF i.mig01
- Erstellen Sie das Modell mit Hilfe von
xi
so, dass Sie die Referenzkategorie beschriften können. - FÜgen Sie die Beschriftung für die Referenzkategorie ein.
6.8.3 Übung
- Erstellen Sie ein Regressionsmodell, welches schrittweise mehrere Variablen aufnimmt:
est dir // liste alle gespeicherten Ergebnisse
estimates clear
" "
glo mod1 "c.zpalter"
glo mod2 "c.zpalter##c.zpalter"
glo mod3 "c.zpalter##c.zpalter i.m1202"
glo mod4
forval i = 1/4 {xi: reg az i.S1 ${mod`i'}
est store regmx`i'
}
est dir
esttab regmx*, b se(%9.3f)
- Stellen Sie die Ergebnisse in einer Tabelle nebeneinander dar.
- Labeln Sie Variablen und wie oben gezeigt und verändern Sie die labels
6.8.4 Übung
- Verwenden Sie die Modellserie von gerade eben (Übung 3), behalten Sie aber den Koeffizienten für das Geschlecht in ihrer Tabelle.
- Wie müssen Sie die Schleife für die Modellserie aus Übung 3 anpassen, um die Kontrollvariablen in einer Zeile unten einzufügen?
6.8.5 Übung
- Schätzen Sie getrennte Modelle für
mig01=0
undmig01=1
mit den Kontrollvariablen aus Übung 3. Passen Sie also die Schleife von oben an, sodass jeweils zwei Modelle für die Gruppenmig01=0
undmig01=1
geschätzt werden:
forvalues m = 0/1 {
xi: reg F518_SUF c.zpalter##c.zpalter if mig01 == `m'
est store reg_`s'_1
local note "Alter & Alter^2"
estadd
xi: reg F518_SUF c.zpalter##c.zpalter i.m1202 if mig01 == `m'
est store reg_`s'_2
local note "Alter & Alter^2, Ausbildung"
estadd
} esttab reg_*
- Fügen Sie jetzt Gruppenlabels ein und labeln Sie die Tabelle entsprechend der kennengelernten Optionen.