如何用marginaleffects计算一阶与二阶差异(含标准误)
使用
marginaleffects计算一阶差异与二阶差异 1. 一阶差异(First Difference)
无需提前计算predictions,直接用comparisons()函数即可完成组间对比,同时自动输出标准误、p值等统计量,格式与你提供的pred数据框一致。
线性回归示例
library(marginaleffects) mod <- lm(mpg ~ hp * factor(cyl), data = mtcars) # 计算每个hp值下,cyl=8与cyl=4的一阶差异 fd <- comparisons( mod, variables = list(cyl = c("8", "4")), # 指定对比的两组 newdata = datagrid(hp = seq(80, 110, 10)) # 固定hp的取值 ) # 查看结果,包含predicted差异、std.error、p.value等列 fd
逻辑回归适配
切换为逻辑回归模型时,comparisons()会自动适配响应尺度(概率)或链接尺度(对数几率),只需修改模型类型:
# 构建二分类因变量的逻辑回归模型 mod_logit <- glm(am ~ hp * factor(cyl), data = mtcars, family = binomial) # 计算概率尺度下的一阶差异 fd_logit <- comparisons( mod_logit, variables = list(cyl = c("8", "4")), newdata = datagrid(hp = seq(80, 110, 10)), type = "response" # 可选,默认就是响应尺度 ) fd_logit
2. 二阶差异(Second Difference)
二阶差异是一阶差异之间的差值,对应交互项的边际效应,可通过hypotheses()对一阶差异结果做线性假设检验,或直接用comparisons()的交叉对比功能实现。
方法一:基于一阶差异构建假设
# 先获取一阶差异结果 fd <- comparisons( mod, variables = list(cyl = c("8", "4")), newdata = datagrid(hp = seq(80, 110, 10)) ) # 假设:hp=110时的一阶差异 - hp=80时的一阶差异 = 二阶差异 hyp <- hypotheses(fd, "b4 - b1 = 0") # 结果中的estimate即为二阶差异,同时包含标准误、p值等统计量 hyp
方法二:直接用comparisons()交叉对比
更简洁的方式,通过cross=TRUE直接计算"差异的差异":
second_diff <- comparisons( mod, variables = list(cyl = c("8", "4"), hp = c(110, 80)), cross = TRUE # 启用交叉对比,计算(cyl8-cyl4)在不同hp下的差值 ) second_diff
逻辑回归适配
逻辑回归下用法完全一致,只需替换模型并指定所需尺度:
second_diff_logit <- comparisons( mod_logit, variables = list(cyl = c("8", "4"), hp = c(110, 80)), cross = TRUE, type = "response" ) second_diff_logit
内容的提问来源于stack exchange,提问作者Maël
相关产品推荐
相关产品推荐

