估计logit模型R中二进制和连续系数的平均边际效应

Estimating the average marginal effect of binary and continuous coefficients in logit model R

我希望利用全国健康访谈调查的数据,使用逻辑回归分析各种人口统计因素对预测的高血压概率的平均边际效应。澄清一下,平均边际效应是指我想计算每个 X 的均值的边际效应(如 STATA 输出)。

我的问题是我同时拥有二进制和连续自变量,但根据我的阅读,以它们的平均值评估二进制变量没有意义,因为它要么是 0 要么是 1。我不知道如何进行回归 运行 ,我可以在其中评估连续变量的均值,而不是二元变量。这是我目前的代码。


#Here I create a data frame of the means of the continuous variables 
mean_df=df %>% select(c(AGE,BMICALC,FAMSIZE,YEARSONJOB,HOURSWRK)) %>% summarise_all(mean)


#here is my regression, variables here not in the line of code above are binary 
logit_margin_diabetes <- glm(DIABETES~scale(AGE)+scale(IMMIGRANT)+scale(HOURSWRK)+scale(BELOW_TWICE_POVERTY)
+scale(BMICALC)+scale(FEMALE)+scale(FAMSIZE)+scale(EDUC_1)+scale(EDUC_2)+scale(EDUC_3)+
scale(EDUC_4)+scale(SMOKE)+scale(MARRIED)+scale(HISP)+scale(AFR_AM)+scale(WHITE), data = df,family="binomial")

#This is the stage where I want to apply the logit so it is evaluated at the means of the continuous variables. But I don't know what to do about the binary variables 
marg_mean<-margins(logit_margin_diabetes,data=mean_df)
summary(marg_mean)

抱歉,我很难生成 MRE,因为我不知道 R 中的数据集具有此类信息。但是,如果有人可以提供任何建议,将不胜感激!谢谢

这是根据下面的评论修改后的输出。但我希望输出也显示 SE、AME 和 p 值

margins(logit_margin, at=list(AGE=35.93349,BMICALC=26.90704, FAMSIZE=2.495413, YEARSONJOB=4.538336,
                                        HOURSWRK=32.53768,IMMIGRANT=1,
                                        BELOW_TWICE_POVERTY=1, FEMALE=1,
                                       EDUC_1=1,EDUC_2=1,EDUC_3=1,EDUC_4=1,
                                        SMOKE=1,MARRIED=1,HISP=1,
                                        AFR_AM=1,WHITE=1))
summary(marg_mean)

这是我在 运行ning summary(marg_mean)

后看到的新输出的照片

如果您将变量声明为因子,margins 包会自动处理此问题。请参阅 subsetting section of the vignette or you can inspect the source code 以了解边际效应计算为因子变量的差异。

请注意,margins 的默认设置是计算“平均边际效应”,而不是“平均边际效应”。 IMO,默认设置在大多数情况下是最好的,但如果你坚持考虑“合成”平均观察,使用 margins 函数的 at 参数很容易做到。

代码示例。在第一种情况下,vs 被视为连续变量。在第二个中,vs 被视为二进制变量。

library(margins)

mod1 <- glm(am ~ hp + vs, data=mtcars, family=binomial)
mod2 <- glm(am ~ hp + factor(vs), data=mtcars, family=binomial)

margins(mod1)
#> Average marginal effects
#> glm(formula = am ~ hp + vs, family = binomial, data = mtcars)
#>        hp       vs
#>  -0.00203 -0.03193

margins(mod2)
#> Average marginal effects
#> glm(formula = am ~ hp + factor(vs), family = binomial, data = mtcars)
#>        hp      vs1
#>  -0.00203 -0.03154

编辑:这是 at 参数的示例:

margins(mod1, at=list(hp=200, vs=0))