You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问avg_comparisons的by参数是否计算分层特定因果风险比?

问题描述

我正在分析刚完成的AB测试数据,结果变量y是二元变量,需要按第三变量g分层。考虑到干预效果可能随g变化,我拟合了带稳健协方差估计的Poisson回归:

library(tidyverse)
library(sandwich)
library(marginaleffects)

fit <- glm(y ~ treatment * g, data=model_data, family=poisson, offset=log(n_users))

为了获取分层特定的因果风险比(行业内称为“lift”),我使用了avg_comparisons函数:

avg_comparisons(fit, 
                variables = 'treatment',
                newdata = model_data,
                transform_pre = 'lnratioavg', 
                transform_post = exp, 
                by=c('g'),
                vcov = 'HC')

目前结果和按g分组手动计算的lift一致,但我想确认:

  1. 传入by=c('g')是否确实在计算分层特定的风险比?
  2. 这个方法有没有什么潜在的问题需要注意?

我可以提供数据集和最小工作示例。


回答

1. by=c('g')的有效性确认

是的,你使用by=c('g')的方式确实在计算分层特定的因果风险比。

avg_comparisons的by参数会将数据集按指定变量拆分,在每个g的子组内独立计算处理效应:

  • 搭配transform_pre = 'lnratioavg',函数会在每个分层内先计算处理组与对照组的对数风险比(即ln(E[y|treatment=1, g] / E[y|treatment=0, g]))
  • 再通过transform_post = exp将对数转换为风险比(也就是你所说的lift)。

由于你的模型包含treatment * g交互项,模型本身已经估计了组特异性的处理效应,by参数进一步在对应分层内平均这些效应,最终得到的就是每个g层单独的风险比——这和你手动分组计算结果一致的现象也验证了这一点。

2. 潜在问题与注意事项

  • 过度离散检查:二元变量的方差是p(1-p),而Poisson模型假设方差等于均值。当事件概率p不小时,数据容易出现过度离散。虽然你用了HC稳健协方差缓解方差估计偏差,但仍建议用DHARMa等工具做残差分析,验证Poisson模型的适配性,必要时可替换为负二项回归。
  • Offset变量的合理性:offset=log(n_users)是将模型目标设定为事件率(y/n_users)的对数线性关系。要确保n_users是每个观测对应的真实暴露基数,且在各g层的处理组与对照组间分布均衡,否则可能引入混杂偏倚。
  • 分层样本量限制:如果某个g分层的样本量过小,估计出的风险比会因方差过大而不稳定。建议提前检查各分层的样本量及处理组/对照组的比例,避免对样本量不足的层做推断。
  • SUTVA假设验证:需确保AB测试满足稳定单位干预值假设(SUTVA)——即单个单位的处理不会影响其他单位的结果,且每个单位只有一种处理状态。若g分层存在集群效应(如同一组内用户相互影响),需改用集群稳健协方差(例如vcov = ~cluster_id)。

内容的提问来源于stack exchange,提问作者Demetri Pananos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:53