"margins" 如何计算线性模型中的边际效应?
How does "margins" calculate marginal effects in linear models?
我有一个线性模型(lm
对象)并使用 margins
来计算回归量的边际效应。据我了解,如果回归量在模型中只有一次,这相当于部分效果。 "kids" 也是如此。
library("car")
library("plm")
data("LaborSupply", package = "plm")
# Regression
lm1 <- lm(lnwg ~ kids + age + I(age^2), data = LaborSupply)
# kids is once in the model
summary(lm1) # partial effect of kids -2.182e-02
summary(margins(lm1)) # equals marginal effect -0.0218
输出:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.218e+00 1.228e-01 9.921 < 2e-16 ***
kids -2.182e-02 5.398e-03 -4.043 5.36e-05 ***
age 6.704e-02 6.392e-03 10.488 < 2e-16 ***
I(age^2) -7.465e-04 7.936e-05 -9.406 < 2e-16 ***
factor AME SE z p lower upper
age 0.0089 0.0007 12.0683 0.0000 0.0075 0.0104
kids -0.0218 0.0054 -4.0426 0.0001 -0.0324 -0.0112
但为什么年龄的边际效应不等于:
6.704e-02 + 2*-7.465e-04 = 0.065547
我的意思是,它不应该等于我的模型公式中的偏导数吗?
你说得对,它应该是项的偏导数,但请记住,如果你将公式 w.r.t 微分到年龄,你会得到:
beta1 + 2*(beta2)*age
其中 beta1 是年龄系数,beta2 是从模型中获得的年龄^2 系数。
这意味着年龄的边际效应会随着年龄的变化而变化。使用边际包,他们会return你所有年龄值的边际效应的平均值,相当于:
lm1 <- lm(lnwg ~ kids + age + I(age^2), data = LaborSupply)
mean(coefficients(lm1)[3] + 2*LaborSupply$age*coefficients(lm1)[4])
[1] 0.008938904
要看得更清楚,请执行以下操作:
lm2 <- lm(lnwg ~ age + I(age^2), data = LaborSupply)
margins(lm2)
Average marginal effects
lm(formula = lnwg ~ age + I(age^2), data = LaborSupply)
age
0.009625
系数不同(因为我们没有包括孩子),但您会在输出中看到上面 returned 的消息。
我有一个线性模型(lm
对象)并使用 margins
来计算回归量的边际效应。据我了解,如果回归量在模型中只有一次,这相当于部分效果。 "kids" 也是如此。
library("car")
library("plm")
data("LaborSupply", package = "plm")
# Regression
lm1 <- lm(lnwg ~ kids + age + I(age^2), data = LaborSupply)
# kids is once in the model
summary(lm1) # partial effect of kids -2.182e-02
summary(margins(lm1)) # equals marginal effect -0.0218
输出:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.218e+00 1.228e-01 9.921 < 2e-16 ***
kids -2.182e-02 5.398e-03 -4.043 5.36e-05 ***
age 6.704e-02 6.392e-03 10.488 < 2e-16 ***
I(age^2) -7.465e-04 7.936e-05 -9.406 < 2e-16 ***
factor AME SE z p lower upper
age 0.0089 0.0007 12.0683 0.0000 0.0075 0.0104
kids -0.0218 0.0054 -4.0426 0.0001 -0.0324 -0.0112
但为什么年龄的边际效应不等于:
6.704e-02 + 2*-7.465e-04 = 0.065547
我的意思是,它不应该等于我的模型公式中的偏导数吗?
你说得对,它应该是项的偏导数,但请记住,如果你将公式 w.r.t 微分到年龄,你会得到:
beta1 + 2*(beta2)*age
其中 beta1 是年龄系数,beta2 是从模型中获得的年龄^2 系数。
这意味着年龄的边际效应会随着年龄的变化而变化。使用边际包,他们会return你所有年龄值的边际效应的平均值,相当于:
lm1 <- lm(lnwg ~ kids + age + I(age^2), data = LaborSupply)
mean(coefficients(lm1)[3] + 2*LaborSupply$age*coefficients(lm1)[4])
[1] 0.008938904
要看得更清楚,请执行以下操作:
lm2 <- lm(lnwg ~ age + I(age^2), data = LaborSupply)
margins(lm2)
Average marginal effects
lm(formula = lnwg ~ age + I(age^2), data = LaborSupply)
age
0.009625
系数不同(因为我们没有包括孩子),但您会在输出中看到上面 returned 的消息。