使用inferences进行自助法时,avg_comparisons参数触发断言错误的咨询
问题解析与解决方案
错误原因
这个断言错误的核心是数据类型不匹配:当你在avg_comparisons中指定transform='exp'后,返回结果的transform元属性会被存储为列表格式,但inferences函数在处理自助法(bootstrapping)时,要求transform参数必须是'exp'/'ln'这类原子标量,或是一个函数,不接受列表类型,因此触发了参数检查失败。
解决方法
有两种可靠的实现方式:
方法1:将transform移至inferences中(推荐)
遵循包的设计逻辑,让avg_comparisons先计算未转换的对数比率统计量,再由inferences在自助抽样的全过程中应用指数转换,代码如下:
library(tidyverse) library(marginaleffects) set.seed(0) n <- 500 trt <- rep(0:1, each=500) x <- rnorm(n) y <- 2*x + 1 + 0.5*trt + rnorm(n, 0, 0.3) d <- data.frame(x, trt, y) fit <- lm(y~trt + x, data=d) avg_comparisons( fit, variables = 'trt', comparison = 'lnratioavg' ) %>% inferences(method='boot', transform='exp')
方法2:修正结果的transform属性
如果必须在avg_comparisons中提前应用转换,可以手动将结果的transform属性从列表改为原子标量'exp',再传入inferences:
library(tidyverse) library(marginaleffects) set.seed(0) n <- 500 trt <- rep(0:1, each=500) x <- rnorm(n) y <- 2*x + 1 + 0.5*trt + rnorm(n, 0, 0.3) d <- data.frame(x, trt, y) fit <- lm(y~trt + x, data=d) # 先计算带转换的结果 result <- avg_comparisons( fit, variables = 'trt', comparison = 'lnratioavg', transform = 'exp' ) # 修正transform属性类型 attr(result, 'transform') <- 'exp' # 执行自助法推断 inferences(result, method='boot')
注意:方法1更符合自助法的统计逻辑——对每个自助样本先计算原始统计量再转换,结果的可靠性更高;方法2仅作为特殊场景下的临时修复方案。
内容的提问来源于stack exchange,提问作者Demetri Pananos
相关产品推荐
相关产品推荐

