1

我的目标是创建边际效应和类似于“边际效应”下这篇文章中所做的情节:https ://www.drbanderson.com/myresources/interpretinglogisticregressionpartii/

由于我无法提供实际模型或实际数据(数据很敏感),因此我将提供一个通用示例。

我使用 glm 函数创建了以下模型:

model = glm(y ~ as.factor(x1) + x2 + I(x2^2) + x3 + as.factor(x4):as.factor(x5), data = dataFrame,family="binomial")

x2 是一个连续变量,我想计算另一个连续变量 x3 的平均值以及 x1、x4 和 x5 的预定义值的边际效应。为了进一步简化,假设 x1 是早上、下午或晚上的分类(因此在 logit 模型中产生两个系数),x4 是左或右的分类,x5 是上或下的分类(因此 x4:x5产生左和上、左和下、右和上的系数结果,右和下排除交互作用)。

与帖子中所做的类似,我运行以下代码:

x2.inc <- seq(min(dataFrame$x2), max(dataFrame$x2), by = .1) 

得到一个 x2 值的序列来评估边际效应。最后,我尝试运行 margins 命令:

x2.margins.df <- as.data.frame(summary(margins(model, at = list(x2 = x2.inc, x3 = mean(dataFrame$x3), x1 = 'morning', x4 = 'left', x5 = 'right'))))

但是,运行它会产生以下错误:

Error in attributes(.Data) <- c(attributes(.Data), attrib) : 
  'names' attribute [1] must be the same length as the vector [0]

给定 a) 我的模型中 x2 的二次性质,以及 b) 模型中项的交互,关于如何成功运行 margins 命令的任何想法?

附带说明:我知道如果我愿意,我可以手动计算这些东西。但是,为了减少代码和易于重现,我想让这种方法起作用。感谢您的帮助!

4

1 回答 1

0

的自述文件margins说:

https://cran.r-project.org/web/packages/margins/readme/README.html

它支持logit模型。那么为什么要手动实现一些东西呢?

library("car")
library("plm")
data("LaborSupply", package = "plm")

model <- glm(disab ~ kids*age + kids*I(age^2), data = LaborSupply, family="binomial")
summary(margins(model))
于 2020-01-21T09:00:00.920 回答