gimme一个强大的估算器 - 使它成为双倍!

Jasmine Nettiksimmons和Molly Davies
- 旧金山,加利福尼亚州

在针脚manbetx万博体育app 官方下载修复时,当我们想要了解某些治疗或曝光的影响时,我们经常运行实验。但是,有一些问题我们无法通过实验回答,因为它的运作不可行,或者因为它不觉得客户 - 右。例如,我们不会通过实验需要造型师将特定数量字符或主题客户的记录写入实验库存条件。在这些情况下,我们依靠观察分析。这种环境中的关键挑战是治疗尚未被随机分配,这意味着我们可能有混淆的问题(对于更多关于因果结构,看到以前博客).我们的目标是学习真实的东西,尽可能精确;t测试并不能解决这个问题。

混淆挑战的一种常见方法是使用回归模型来估计治疗的效果,包括作为协变量的混血。不幸的是,对于回归估算器正确执行其工作,您必须正确地指定模型。如果未能正确指定模型(拼写错误),则可能觉得当您没有时,您可能会完全控制混淆器[1]
解决这个问题的另一种方法是做逆概率加权治疗,你把你的回归努力集中在学习治疗的概率上。这个建模任务也面临着同样的风险——不规范——而且效率不高。我们很少清楚地了解协变量、治疗/暴露和结果之间潜在的复杂关系,但我们中的许多人每天都进行单边模型说明。

输入:双重鲁棒估计。当涉及到正确指定暴露/治疗、协变量和结果之间的关系时,这类估计者明确承认我们的局限性。幸运的是(errr数学),这些方法给了我们一些回旋余地,可以犯一些错误,但仍然得出一致的估计量。如果你没有模型误用,这些估价器就会很有效[2].这篇文章的目标是展示双重强大估计器的优越性和使用它们的低开销。有关更多背景,请参阅我们的以前的帖子什么是一个好的估计员。

博士TL;

  • 一种模型用于估计治疗的条件概率(即倾向得分)
  • 另一个模型用于估计暴露/治疗和其他协变量如何与结果相关
  • 这些模型以特定的花式方式组合以产生目标参数的估计。了解这一点需要了解一堆关于影响功能和经验过程理论的一系列,我们许多我们许多人都不熟悉。我们将在这里站在巨人的肩膀上,让那个谎言。
  • 意外的是,为了得到一致的估计量,两个模型中只有一个需要正确指定[3]目标参数的。这就是“double robust”中的“double”的由来。注意,并不是所有使用两个这样的模型的估计过程都是双重稳健的。

我们将专注于一种叫做的方法有针对性的最大可能性估计(TMLE)出于此帖子的目的,但还有其他双重强大方法,包括增强反概率加权(AIPW)和广义随机森林(grf)。

在我们继续之前,一些快速符号的家务:

  • \(y \):结果

  • \(a \):二元曝光(在非随机曝光的情况下)或二进制处理(在实验的情况下)

  • \(W\):一组协变量,它们是\(Y\)的预测或潜在的混杂因素

  • (E\左(Y\中A, W\右)\):这是结果的条件期望\(Y\)给予\(A\)(治疗/暴露)和协变量\(W\)

  • \(P\left(A = 1 \mid W\ right)\):这是接受治疗/暴露的概率\(W\),也称为倾向评分。对于随机实验,这可能是已知的,并且与\(W\)无关。

  • 目标参数:这是您尝试估计的东西。在数据科学中,我们并不总是正式的这一点,但在平均治疗效果(吃)之后,我们通常隐含地隐含。术语吃对每个人都不熟悉,但如果您曾经运行过A / B测试并计算两个小区之间的平均结果差异,则避免所有相等,您估计了ATE!如果数据集中的每个人都被暴露,如果没有人被暴露,则可以被视为平均结果之间的差异。

一个模拟的例子

我们将进行一项模拟研究,比较ATE的三种不同估算器使用R:

  • 用t检验进行的手段的两个样本比较
  • 广义线性模型(GLM)
  • 目标最大似然估计,双鲁棒
好奇的猫
绘图1.估算器对模拟数据的比较,其中真正的ATE = 0.25和曝光是协变量的函数(即存在混杂)。我们将传统估算器(平均差异,错误地指定GLM,正确指定GLM正确指定GLM)进行了双重稳健的TMLE估计,在误操作的几种组合下。

我们将模拟一个数据生成过程,通过曝光,我们知道真实的ATE,并看看每个方法如何估计目标参数。在这个模拟中,真实的ATE = 0.25和治疗的概率是一些协变量的函数。结果是治疗和相同协变量的函数,这意味着存在混淆:

$$ \ begin {align} w_1&\ sim n \ left(0,1 \右)\\ w_2&\ sim n \ left(0,1 \右)\\ a&\ sim \ text {bernoulli} \ left(\ theta \右),\ text {where} \ theta = f \ left(w_1 + w_2 + w_1 * w_2 \右)\ left(0,0,0.2\右)\\ y&= 0.25 * a - w_1 - w_2 - w_1 * w_2 + \ epsilon \\ \ end {align} $$

上面的函数f(。)是一个简单的缩放函数映射到单位间隔的连续值(参见下面的仿真代码)[4]

如果我们以最幼稚的方式分析这一点,我们可能只是对曝光组之间的含量差异进行T检验(\左(a = 1 \右)\)和未曝光的群体\(\ left(a = 0 \右)\)。

mean_diff < - 意思(dat $ y [dat $ a == 1]) - 意思是(dat $ y [dat $ a == 0])ttest_out < -  t.test(x = dat $ y [dat $ a ==1],y = dat $ y [dat $ a == 0])

结果:-0.60(-0.74,-0.46)

呵!回想一下,真实的\(ATE = 0.25\)。我们对一个甚至没有正确符号的估计非常有信心!这是一个很好的例子,当混淆偏见的天真的估计。

好的,下一个,广义线性模型(GLM)。我们知道\(W_1\)和\(W_2\)是混杂因子。在主项回归模型\(Y\ sim a + W_1 + W_2)中,我们将\(a \)上的系数解释为\(a =1\)相对于\(a =0\)对\(Y\)的影响,并保持\(W_1\)和\(W_2\)不变。换句话说,它是ATE估计值。当我们缺乏关于\(Y\)和\(A\),\(W\)之间关系的功能形式的具体知识时,我们中的许多人都被训练以这种主术语模型开始。

glm_coef <- summary(glm_out)$coefficients glm_ci <- confint(glm_out)

结果:-0.23 (-0.34,-0.12)

我们刚才所做的不是一种难以常见的估计方法,但我们仍然是错误的(-0.23而不是0.25 !!),我们对我们的结果非常有信心(P <0.001)。这是模型拼写的结果。包含\(w_1 * w_2 \)交互的正确指定的glm将给予我们一个无偏估计。问题是,我们多久知道\(w_1 * w_2 \)是一个重要的互动?如果我们有更多的协变量,我们会感到舒适地指定了他们所有的互动吗?可能不是。对于那么重要,GLM甚至可以描述当我们离开玩具数据陆地时面临的真实关系?我们中的许多人在模型规范中受过训练,但这是它咬回来的位置。

好的,是时候带来双重鲁棒方法(TMLE)。当我们使用R包TMLE.,我们有机会更灵活地使用机器学习来估计倾向分数和结果模型SuperLearner包中。超级学习者使用广义叠加来创建不同子模型的最优加权组合。权重是交叉验证风险的函数。这些子模型可以包括不同的glm规范、样条和其他机器学习预测算法,如广义相加模型(GAMs)、弹性网回归等。大大减少了我们遭受模型错误说明的机会。

关于我们在TMLE函数中指定的内容有点注意:

  • \(y \):结果

  • \ \():接触/治疗

  • \(w \):我们打算使用的协变量的矩阵

  • Q.SL.library超级学习者将使用子模型(又名“学习者”)来估计结果模型,即\(E(Y \mid A, W) \)

  • g.SL.library超级学习者将使用子模型(又名“学习者”)来估计倾向得分,即\(P(A \mid W) \)

  • Qform:有机会指定结果模型的功能形式(可选)。如果指定了这一点,将不会使用超级学习者,而该规范将在GLM中使用。

  • GForm.:一个指定曝光模型功能形式的机会(可选)。如果指定了这一点,将不会使用超级学习者,而该规范将在GLM中使用。

  • \(V\):超级学习者可以使用的交叉验证折叠的数量

首先,假设我们使用SuperLearner估计结果模型\(左(Y~A,W\右)\),但是我们故意错误地指定暴露模型的函数形式,通过省略\(W_1\)和\(W_2\)之间的相互作用来检验双重鲁棒性。回想一下,为了得到一致的估计量,这些模型中只有一个需要正确指定:

tmle_incorrect_exposure_model < - tmle (Y = dat $ Y = dat美元,W = dat [c (W1, W2)], Q.SL.library = c(“SL。全球语言监测机构”、“SL.glm.interaction”、“SL.gam”、“SL.polymars”),gform = " ~ W1 + W2”#注:这是不正确的,也是一个函数W1 * W2, V = 10) tmle_incorrect_exposure_model_ATE = tml_incorrect_exposure_model估计吃psi tmle_incorrect_exposure_model_CI美元美元= tml_incorrect_exposure_model估计吃CI美元美元

繁荣。0.25(0.24,0.26)

Daaaaaaaang !首先,我们要注意的是,这个估计几乎完全等于0.25的真实值。第二,你看到置信区间了吗?与GLM置信区间相比(暂时忽略它完全缺乏有效性)。回想一下,尽管我们故意错误地指定了曝光模型,我们还是得到了这个很好的估计。

让我们尝试别的东西。在最后一个情况下,我们错过了曝光模型,但使用超级餐具员(可能)正确指定结果模型。让我们尝试反向,让我们使用SuperLearner希望正确地指定曝光模型,我们将故意拼写结果模型,再次省略互动。

tml_incorrect_outcome_model <- tml_incorrect_outcome_model (Y=dat$Y,A=dat$A,W=dat[, c("W1", "W2")] #注意:回忆正确的形式包含W1和W2的交互,g.SL.library=c("SL. library ", "SL. library ", "SL. library ")tml_incorrect_outcome_model_ate = tml_incorrect_outcome_model$estimate $ATE$CI . tml_incorrect_outcome_model$estimate $ATE$CI . tml_incorrect_outcome_model$estimate $ATE$CI . tml_incorrect_outcome_model$estimate $ATE$CI . tml_incorrect_outcome_model$estimate $ATE$CI

结果:0.26 (0.12,0.39)

这次的置信区间更大 - 但估计非常接近0.25的真正吃。

让我们看看我们让Superlearner照顾所有建模决策时会发生什么,以便我们希望有两个正确的(ISH)指定模型:

tmle_learn_both_models < - tmle (Y = dat $ Y = dat美元,W = dat [c (W1, W2)], Q.SL.library = c(“SL。全球语言监测机构”、“SL.glm.interaction”、“SL.gam”、“SL.polymars”),g.SL.library = c(“SL。/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

结果:0.25(0.24,0.26)

真的,美丽的东西。

在我们仍然用手指定GLMS结构的世界中,TMLE提供了一个很好的安全网。但是,这种方法真正的增压是在建模时利用各种花哨的预测器(非参数模型,机器学习方法等)的能力\(e \ mid a,w \右)\)和\(p \ left(a = 1 \ mid w \右)\)。这些方法甚至可能无法解释它,这使得它们挑战用于推断。但幸运的是,TMLE不需要他们的解释性,它只是需要他们的预测。因此,这些更细微的预测可以倾倒到TMLE中,并突出了从本地效率受益的目标参数的可能更好地估计。

我们已经证明,当我们担心混淆时,TMLE可以非常方便。但如果我们不是的话怎么办?如果我们使用随机治疗方法怎么办?It turns out we can still benefit from this methodology because in addition to being doubly robust, it’s also locally efficient which means making the best bias variance trade-off for the thing you actually care about, the target parameter, as opposed to making the best bias variance trade-off for the whole conditional expectation.

让我们对被随机的暴露进行相同的方法学比较(更常见的称为治疗)。在这种情况下,给定数据生成过程但使用TMLE和Superlearner的组合有效地估计并避免误操作导致较小的置信区间(图2),所以所有方法都是一致的估计器。再次,如果我们正确地指定了GLM中的功能形式,我们实际上也是如此,而不是比TMLE更好。所以使用TMLE不会伤害它可能有所帮助!

好奇的猫
图2.用随机处理的模拟数据进行估计,其中真正的ATE = 0.25。

签了我!

希望我们已经说服您,使用双重稳健估计技术在一致性和效率方面有主要优势。我们还演示了执行这些更高级方法的开销是最小的。

r中存在现有的包(TMLE.)及Python (z).如果您想更好地了解TMLE的机制,我们强烈推荐这一点纸很容易理解在不依赖于包基础架构的情况下,通过计算“用手”。

以下是我们在Stitch Fix中使用这种方法的一些场景:manbetx万博体育app 官方下载

  • 在观察数据中估算一些曝光的曝光,我们担心混淆和潜在复杂的互动(这是我们讨论的第一个案例)。我们看到,当现实简单时,我们可能会与GLM一起做,我们指导了模型规格。但为什么冒风险?
  • 估计治疗的ATE是随机分配的,但不是一致随机分配,P(A =1)不是恒定的所有观察。我们可以指定已知的倾向分数,甚至学习它们!我们要做一些奇特的事情,为什么不做双倍健壮呢?
  • 估计均匀随机分配的治疗的喷雾(简单的A / B测试)。尽管在这种情况下,但在解决治疗概率的情况下没有必要做任何特殊的事情,我们仍然可以从随机示例中看到的当地效率中受益。这为我们提供了更好的力量!

什物

还有一些东西可能会派上用场!

假设你碰巧知道确切的倾向得分\(p \ left(一个\ mid w \右)\)因为你运行了控制治疗概率的实验(无论是固定还是依赖于\(w \)))。您可以使用参数提供该信息g1W而不是为倾向评分提供模型规范或SuperLearner库列表。

tmle_known_propensity_scores < - tmle (Y = dat $ Y = dat美元,W = dat [c (W1, W2)], Q.SL.library = c(“SL。glm", "SL.glm.interaction", "SL.gam", "SL.polymars"),g1W = dat$pA,,V=10)

假设你的观察不是独立的,而是以某种方式聚集在主题中。你可以指定project_id.为了纠正这个依赖关系,让你的标准错误不会过于乐观:

tmle_dependent_obs < - tmle (Y = dat $ Y = dat美元,W = dat [c (W1, W2)], Q.SL.library = c(“SL。全球语言监测机构”、“SL.glm.interaction”、“SL.gam”、“SL.polymars”),g.SL.library = c(“SL。),id = dat$subject_id,V=10)

资源:

代码

库(tmle)库(SuperLearner)图书馆(gam)图书馆(polspline)库(ggplot2 ) # --------------------------- # 模拟功能  #---------------------------- # 函数约束概率boundx < -函数(x, new_minnew_max) {old_min < - min (x) old_max < - max (x) stretch_me < - (new_max-new_min) / (old_max-old_min) stretch_me * (x-old_min) + new_min} #观测数据生成过程simple_simdat < -函数(证交所,n, true_ate) {set.seed(交易所)W1 < - rnorm (n) W2 < - rnorm (n) pA < - boundx (W1 + W2 + W1 * W2, new_min = 0.05, new_max = 0.95) < - rbinom (n, 1,pA)ε< - rnorm (n, 0。2)Y < - true_ate * - W1 - W2 - 2 * W1 * W2 +εdata.frame (W1 = W1 W2 = W2, pA = pA = A, Y = Y)} #随机数据生成过程simple_random_simdat < -函数(证交所,n, true_ate) {set.seed(交易所)W1 < - rnorm (n) W2 < - rnorm (n) pA < -样本(c(0, 1),大小= n,取代= TRUE) <——rbinom (n, 1, pA)ε< rnorm (n, 0,2) Y <- true *A - W1 - W2 - 2*W1*W2 + epsilon data.frame(W1=W1, W2=W2, pA=pA, A=A, Y=Y)}

可提供完整的代码github

这篇文章是由布莱恩Bischof,Timothy Brathwaite,Eric Colson,Sven Schmit和Dave Spiegel的审核。

[1]↩你甚至可以通过包含治疗的下游特征来诱发偏见。这就是为什么理解因果结构很重要。如果你包含了错误的东西,双倍稳健的估计值也不能帮你解决这个问题。
[2]↩即使在拼写中,这些方法仍可能比您的花园品种回归模型更有效
[3]↩回想一下,一致性估计量是随着n无限增大而越来越接近目标参数的估计量
[4]↩注意,我们明确地将P(A = 1)与0和1分隔开(参见模拟代码)。在现实世界中,这是一个你必须愿意做的假设;治疗分配是不确定的。
这篇文章! 帖子在linkedin
多线程

来吧我们!

我们是一个多元化的团队,致力于打造伟大的产品,我们希望您的帮助。你想和优秀的同行一起开发优秀的产品吗?加入我们吧!