首页 > 解决方案 > 使用二次项和交互项的边距包错误

问题描述

我有在 Stata 中使用 margins 命令的代码,我正在尝试使用此处cran上的“margins”包在 R 中复制它。

我不断收到错误:

marg1<-margins(reg2)  

名称(类)<- clean_terms(名称(类))中的错误:“名称”属性 [18] 必须与向量 [16] 的长度相同”

一个最小的可重现示例如下所示:

install.packages(margins)
library(margins)
mod1 <- lm(log(mpg) ~ vs + cyl + hp + vs*hp + I(vs*hp*hp) + wt + I(hp*hp), data = mtcars)
(marg1 <- margins(mod1))
summary(marg1)

我需要 vs 是一个与二次项和正态交互交互的虚拟变量。

有谁知道我做错了什么或者是否有办法解决这个问题?

标签: rmarginsestimation

解决方案


您的模型规格有点混乱。例如,vs*hp 引入了 3 个变量:i) vs、ii) hp 和 iii) 交互 vs 和 hp。结果, hp 在您提供的公式中出现了两次。您可以大量简化!试试这个例如(我认为这是你想要的):

mtcars$hp2 = mtcars$hp^2
mod1 <- lm(log(mpg) ~ cyl + wt + vs*hp + vs*hp2, data = mtcars)
summary(mod1) # With this you can check that the model you specified is what you want
(marg1 <- margins(mod1)) # The error disappeared. 
summary(marg1)

一般来说,我建议您在公式规范中避免使用 I(),因为如果处理不当,它通常会导致此类错误(尽管有时无法避免)。祝你好运!


推荐阅读