我正在使用 R 计算以下模型的线性回归,并在特定点 (20,30,40,50,55) 找到年龄对披萨的边际影响。
mod6.22c <- lm(pizza ~ age + income + age*income +
I((age*age)*income), data = piz4)
我遇到的问题是在使用 margins 命令时,R 看不到使用I((age x age) x income)插入到 lm 中的交互项。仅当交互项采用variable1 x variable1的形式时,margins 命令才会产生准确的平均边际效应。我也无法在表table$newvariable <- table$variable1^2中创建新变量,因为边距命令不会将newvariable标识为与variable1相关。
到目前为止,这一直很好,我的交互项只是二次或 xy 交互,但现在我需要使用模型中包含的交互项AGE^2xINCOME计算平均边际效应,但我似乎可以使汇总 lm 输出正确的唯一方法是使用 I(age^2*(income)) 或在我的表中创建一个新变量。如前所述,margins 命令无法读取 I(age^2*(income)),如果我创建一个新变量,margins 命令无法识别变量是相关的,并且产生的平均边际效应不正确.
我收到的错误:
> summary(margins(mod6.22c, at = list(age= c(20,30,40,50,55)),
variables = "income"))
Error in names(classes) <- clean_terms(names(classes)) :
'names' attribute [4] must be the same length as the vector [3]
我提前感谢任何帮助。
数据总结: Pizza 是每年在 Pizza 上的支出,female,hs,college 和 grad 是虚拟变量,年收入是千美元,年龄是岁。
> head(piz4)
pizza female hs college grad income age agesq
1 109 1 0 0 0 19.5 25 625
2 0 1 0 0 0 39.0 45 2025
3 0 1 0 0 0 15.6 20 400
4 108 1 0 0 0 26.0 28 784
5 220 1 1 0 0 19.5 25 625
6 189 1 1 0 0 39.0 35 1225
使用的库:
library(data.table)
library(dplyr)
library(margins)
tldr
这有效:
mod6.22 <- lm(pizza ~ 年龄 + 收入 + 年龄 * 收入,数据 = piz4)
**summary(margins(mod6.22, at = list(age= c(20,30,40,50,55)), variables = "income"))**
factor age AME SE z p lower upper
income 20.0000 4.5151 1.5204 2.9697 0.0030 1.5352 7.4950
income 30.0000 3.2827 0.9049 3.6276 0.0003 1.5091 5.0563
income 40.0000 2.0503 0.4651 4.4087 0.0000 1.1388 2.9618
income 50.0000 0.8179 0.7100 1.1520 0.2493 -0.5736 2.2095
income 55.0000 0.2017 0.9909 0.2036 0.8387 -1.7403 2.1438
这不起作用:
mod6.22c <- lm(pizza ~ age + income + age*income + I((age * age)*income), data = piz4)
**summary(margins(mod6.22c, at = list(age= c(20,30,40,50,55)), variables = "income"))**
Error in names(classes) <- clean_terms(names(classes)) :
'names' attribute [4] must be the same length as the vector [3]
如何获得利润来读取我的交互变量 I((age*age)*income)?