我有代码,它使用Stata中的边距命令,并且我试图在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是一个虚拟变量,它与二次项和正常相互作用相互作用。
有没有人知道我做错了什么,或者有没有办法解决这个问题?
发布于 2020-11-25 19:03:27
您的模型规范有点混乱。例如,vs*hp引入了3个变量:( i) vs,ii) hp和iii)交互和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(),因为如果没有足够的小心处理,常常会导致这样的错误(尽管有时无法避免)。祝好运!
https://stackoverflow.com/questions/65009031
复制相似问题