Firthlogit, marginale Effekte und Interaktionen
Verfasst: Mi 9. Jun 2021, 12:58
Hallo,
ich habe veruscht, eine logistische Regression mit einem Interaktionseffekt zu rechnen, was leider aufgrund von Separation nicht funktionierte:
Um das zu korrigieren, habe ich das Modell mit dem Befehl firthlogit gerechnet, was auch funktioniert hat:
Nun möchte ich daraus gerne die marginalen Effekte berechnet haben. Dafür habe ich den margins-Befehl mit der Option expression(invlogit(predict(xb))) verwendet (die notwendige Option habe ich u.a. in diesem Forenthread gefunden). Das Ergebnis sieht folgendermaßen aus:
Interpretieren würde ich das Ganz folgendermaßen:
Der marginale Effekt von health_lim auf care_benefits beträgt für Befragte mit einer Pflegeperson aus der engen Familie (Referenzkategorie) 0,009.
Der marginale Effekt von health_lim auf care_benefits beträgt für Befragte mit einer Pflegeperson aus der weiteren Familie -0,017.
Der marginale Effekt von health_lim auf care_benefits beträgt für Befragte mit einer Pflegeperson, die nicht aus der Familie stammt, -0,015.
Ist diese Interpretation korrekt? Und grundsätzlich: Ist das Vorgehen korrekt? Würdet ihr ein anderes Vorgehen wählen?
Vielen Dank für Rückmeldungen!
ich habe veruscht, eine logistische Regression mit einem Interaktionseffekt zu rechnen, was leider aufgrund von Separation nicht funktionierte:
- Code: Alles auswählen
. logit care_benefits c.health_lim##i.onecareperson_3 if valid==1 & onecarepersononly==1
note: 2.onecareperson_3 != 0 predicts failure perfectly
2.onecareperson_3 dropped and 65 obs not used
note: 3.onecareperson_3#c.health_lim != 0 predicts failure perfectly
3.onecareperson_3#c.health_lim dropped and 32 obs not used
note: 2.onecareperson_3#c.health_lim omitted because of collinearity
Iteration 0: log likelihood = -47.883416
Iteration 1: log likelihood = -39.596133
Iteration 2: log likelihood = -35.881327
Iteration 3: log likelihood = -35.798874
Iteration 4: log likelihood = -35.798488
Iteration 5: log likelihood = -35.798488
Logistic regression Number of obs = 320
LR chi2(2) = 24.17
Prob > chi2 = 0.0000
Log likelihood = -35.798488 Pseudo R2 = 0.2524
----------------------------------------------------------------------------------------------
care_benefits | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-----------------------------+----------------------------------------------------------------
health_lim | .3637094 .085982 4.23 0.000 .1951877 .532231
|
onecareperson_3 |
wider family | 0 (empty)
not family | -.3931463 1.182315 -0.33 0.739 -2.710441 1.924148
|
onecareperson_3#c.health_lim |
wider family | 0 (empty)
not family | 0 (omitted)
|
_cons | -4.360444 .6238969 -6.99 0.000 -5.583259 -3.137628
----------------------------------------------------------------------------------------------
Um das zu korrigieren, habe ich das Modell mit dem Befehl firthlogit gerechnet, was auch funktioniert hat:
- Code: Alles auswählen
. firthlogit care_benefits c.health_lim##i.onecareperson_3 if valid==1 & onecarepersononly==1
initial: penalized log likelihood = -45.352147
rescale: penalized log likelihood = -45.352147
Iteration 0: penalized log likelihood = -45.352147
Iteration 1: penalized log likelihood = -32.617258
Iteration 2: penalized log likelihood = -31.545871
Iteration 3: penalized log likelihood = -31.462159
Iteration 4: penalized log likelihood = -31.4621
Iteration 5: penalized log likelihood = -31.4621
Number of obs = 417
Wald chi2(5) = 27.73
Penalized log likelihood = -31.4621 Prob > chi2 = 0.0000
----------------------------------------------------------------------------------------------
care_benefits | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-----------------------------+----------------------------------------------------------------
health_lim | .3502754 .0817553 4.28 0.000 .190038 .5105129
|
onecareperson_3 |
wider family | -.6839636 1.635612 -0.42 0.676 -3.889704 2.521777
not family | -.4077488 1.045765 -0.39 0.697 -2.457411 1.641913
|
onecareperson_3#c.health_lim |
wider family | -.0106092 .3302318 -0.03 0.974 -.6578516 .6366332
not family | -.0372747 .3046006 -0.12 0.903 -.634281 .5597315
|
_cons | -4.206488 .5869453 -7.17 0.000 -5.356879 -3.056096
----------------------------------------------------------------------------------------------
Nun möchte ich daraus gerne die marginalen Effekte berechnet haben. Dafür habe ich den margins-Befehl mit der Option expression(invlogit(predict(xb))) verwendet (die notwendige Option habe ich u.a. in diesem Forenthread gefunden). Das Ergebnis sieht folgendermaßen aus:
- Code: Alles auswählen
. margins, dydx(*) expression(invlogit(predict(xb)))
Average marginal effects Number of obs = 417
Model VCE : OIM
Expression : invlogit(predict(xb))
dy/dx w.r.t. : health_lim 2.onecareperson_3 3.onecareperson_3
---------------------------------------------------------------------------------
| Delta-method
| dy/dx Std. Err. z P>|z| [95% Conf. Interval]
----------------+----------------------------------------------------------------
health_lim | .0091291 .002512 3.63 0.000 .0042057 .0140525
|
onecareperson_3 |
wider family | -.0174202 .0227347 -0.77 0.444 -.0619794 .0271389
not family | -.014628 .0252153 -0.58 0.562 -.0640492 .0347931
---------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.
Interpretieren würde ich das Ganz folgendermaßen:
Der marginale Effekt von health_lim auf care_benefits beträgt für Befragte mit einer Pflegeperson aus der engen Familie (Referenzkategorie) 0,009.
Der marginale Effekt von health_lim auf care_benefits beträgt für Befragte mit einer Pflegeperson aus der weiteren Familie -0,017.
Der marginale Effekt von health_lim auf care_benefits beträgt für Befragte mit einer Pflegeperson, die nicht aus der Familie stammt, -0,015.
Ist diese Interpretation korrekt? Und grundsätzlich: Ist das Vorgehen korrekt? Würdet ihr ein anderes Vorgehen wählen?
Vielen Dank für Rückmeldungen!