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
esttab reg1 // (ausgeblendet)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
esttab reg1 // Tabelle mit Standard-Einstellungen (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
esttab reg1, b se(%9.3f) label // Formatierung, SE statt t + Variablen Labels (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.
esttab reg1, b se(%9.3f) stats(N r2 ll F) // Modellkennzahlen angeben (volle Liste oben bei ereturn list) (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
coeflabel(zpalter "Alter" _cons "Konstante") // Koeffizienten links labeln (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)) ///
coeflabel(zpalter "Alter" _cons "Konstante") ///
mtitles("1. Modell") ///
nonumbers ///
title(Tabellentitel) /// Titel für die Tabelle
addnotes("erste Anmerkung" "zweite Anmerkung darunter") // Notizen ganz untenTabellentitel
----------------------------
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)) ///
coeflabel(zpalter "Alter" _cons "Konstante") ///
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)) ///
coeflabel(zpalter "Alter" _cons "Konstante") ///
title(Modelltitel) ///
addnotes("erste Anmerkung" "zweite Anmerkung darunter")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:
esttab reg1,b se(%9.3f) ci(%9.3f) p(%9.3f) ///
wide ///
stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
coeflabel(zpalter "Alter" _cons "Konstante") ///
star(+ 0.10 * 0.05 ** 0.01 *** 0.001 **** 0.0001) ///
title(Modelltitel) ///
addnotes("erste Anmerkung" "zweite Anmerkung darunter")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:
esttab reg1, cells("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 (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:
esttab reg1, cells("b se(fmt(%9.3f)) ci_l(fmt(%9.2f)) ci_u(fmt(%9.2f)) p(fmt(%9.3f))") ///
collabels("B" "SE" "u.KI" "o.KI" "p") // labels (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) ///
coeflabel(1.S1 "Maenner" 2.S1 "Frauen" _cons "Konstante") (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) ///
coeflabel(_IS1_2 "Frauen" _cons "Konstante") (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) ///
coeflabel(_IS1_2 "Frauen" _cons "Konstante") ///
refcat(_IS1_2 "Männer") (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) ///
coeflabel(_IS1_2 "Frauen" _cons "Konstante") ///
refcat(_IS1_2 "Männer", label("Referenzkategorie") below) 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 globals die Kontrollvariablen angeben und anschließend die Modelle nacheinander schätzen lassen.
glo mod1 " "
glo mod2 "c.zpalter"
glo mod3 "c.zpalter##c.zpalter"
glo mod4 "c.zpalter##c.zpalter i.m1202"
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) ///
coeflabel(_IS1_2 "Frauen" zpalter "Alter" ///
c.zpalter#c.zpalter "Alter²" ///
_Im1202_2 "dual/schul. Abs." ///
_Im1202_3 "Meister/Techniker" ///
_Im1202_4 "Hochschule/Uni" ///
_cons "Konstante") ///
refcat(_IS1_2 "Männer" ///
_Im1202_2 "kein Abs.") ///
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():
esttab regm*, b se(%9.3f) keep(_IS1_2)
esttab regm*, b se(%9.3f) keep(_IS1_2 zpalter) // mehrere mit Leerzeichen (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 notes dann als Zeile Kontrollvariablen in der Tabelle angezeigt. Mit modelwidth() können wir die Breite der Spalten steuern.
glo mod1 " "
glo mod2 "c.zpalter"
glo mod3 "c.zpalter##c.zpalter"
glo mod4 "c.zpalter##c.zpalter i.m1202"
forval i = 1/4 {
xi: reg F518_SUF i.S1 ${mod`i'}
est store regm`i'
estadd local note "${mod`i'}"
}
esttab regm*, b se(%9.3f) keep(_IS1_2) scalars("note Kontrollvariablen")
esttab regm*, b se(%9.3f) keep(_IS1_2) scalars("note Kontrollvariablen") ///
modelwidth(25) ///
coeflabel(_IS1_2 "Frauen") ///
refcat(_IS1_2 "Männer") (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'
loc 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")
estadd local note "`note'"
}
esttab regm*, b se(%9.3f) keep(_IS1_2) scalars("note Kontrollvariablen") ///
modelwidth(25) ///
varwidth(17) ///
coeflabel(_IS1_2 "Frauen") ///
refcat(_IS1_2 "Männer") ///
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
estadd local note "Alter & Alter^2"
reg F518_SUF c.zpalter##c.zpalter i.m1202 if S1 == `s'
est store reg_`s'_2
estadd local note "Alter & Alter^2, Ausbildung"
}
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 ///
mgroups("Männer" "Frauen", pattern(1 0 1 0))
esttab reg_*, r2 ///
mgroups("" "Männer" "Frauen", pattern(1 1 0 1 )) 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 " "
glo mod2 "c.zpalter"
glo mod3 "c.zpalter##c.zpalter"
glo mod4 "c.zpalter##c.zpalter i.m1202"
forvalues s = 1/2 {
xi: reg F518_SUF c.zpalter##c.zpalter if S1 == `s'
est store reg_`s'_1
estadd local note "Alter & Alter^2"
xi: reg F518_SUF c.zpalter##c.zpalter i.m1202 if S1 == `s'
est store reg_`s'_2
estadd local note "Alter & Alter^2, Ausbildung"
}
esttab reg_* , ///
b se(%9.3f) ///
nomtitle ///
coeflabel(_IS1_2 "Frauen" zpalter "Alter" ///
c.zpalter#c.zpalter "Alter²" ///
_Im1202_2 "dual/schul. Abs." ///
_Im1202_3 "Meister/Techniker" ///
_Im1202_4 "Hochschule/Uni" ///
_cons "Konstante") ///
stats(r2 N, fmt(%9.3f %9.0g) labels(R² Observations)) ///
refcat(_Im1202_2 "kein Abs.") ///
mgroups("Männer" "Frauen", pattern(1 0 1 0)) ///
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_SUFals abhängiger undazals unabhängiger Variable.
reg F518_SUF az- Speichern Sie die Ergebnisse mit
estimates storeund 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_SUFals abhängiger undmigals unabhängiger Variable. Inmig01steht dann0für keinen Migrationshintergrund und1fü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
xiso, 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 " "
glo mod2 "c.zpalter"
glo mod3 "c.zpalter##c.zpalter"
glo mod4 "c.zpalter##c.zpalter i.m1202"
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=0undmig01=1mit den Kontrollvariablen aus Übung 3. Passen Sie also die Schleife von oben an, sodass jeweils zwei Modelle für die Gruppenmig01=0undmig01=1geschätzt werden:
forvalues m = 0/1 {
xi: reg F518_SUF c.zpalter##c.zpalter if mig01 == `m'
est store reg_`s'_1
estadd local note "Alter & Alter^2"
xi: reg F518_SUF c.zpalter##c.zpalter i.m1202 if mig01 == `m'
est store reg_`s'_2
estadd local note "Alter & Alter^2, Ausbildung"
}
esttab reg_*- Fügen Sie jetzt Gruppenlabels ein und labeln Sie die Tabelle entsprechend der kennengelernten Optionen.