跳转至

Efficient estimation and the cost of complete-case coarsening under monotone sequential MAR

作者: Keivan Bolouri
主题: 因果推断
相关性: 8/10
链接: https://arxiv.org/abs/2609.17778


一、领域脉络与小综述

  • 这个方向是什么:本文属于「因果推断 + 缺失数据」的交叉领域,核心问题是:当混杂变量存在缺失时,如何利用部分观测到的信息来估计平均处理效应(ATE),并刻画不同缺失数据处理策略(如完整病例分析、多重插补、加权估计)在效率和识别性上的代价。该子方向在理论上已相当成熟——半参数效率理论(Tsiatis, 2006)和 coarsening-at-random 框架(Gill et al., 1997)提供了标准工具,但针对「有序混杂变量 + 单调缺失」这一具体结构的精细效率比较,仍是一个活跃的研究前沿。

  • 发展脉络(history):

  • 奠基工作:Robins et al. (1994) 和 Gill et al. (1997) 建立了单调缺失/粗化随机(CAR)框架下的半参数效率理论,给出了逆概率加权和增强估计的基本形式。Tsiatis (2006) 的专著系统化了切空间与影响函数的工具,是本文方法论的直接基础。
  • 主要进展:Levis et al. (2025) 在完整病例缺失随机(CCMAR)假设下,建立了 ATE 的稳健高效估计器,其关键简化是将缺失模式压缩为单一完整病例指示符 S。Wen and McGee (2026) 则处理了不完全观测的暴露变量,使用了序贯观测概率和迭代投影构造影响函数与目标最大似然估计(TMLE)。Barnwell and Chaudhuri (2025) 在计量经济学语境下处理了单调 attrition 下的效率问题。
  • 当前 frontier:本文的位置在于——Levis et al. (2025) 的 CCMAR 框架虽然简洁,但丢弃了中间部分观测模式(R1=1, R2=0)中的信息;Wen and McGee (2026) 的序贯构造虽然更一般,但未专门比较「保留中间模式」与「压缩为完整病例」的效率差异。本文填补的正是这个缺口:在单调序贯 MAR 下,显式刻画完整病例粗化(complete-case coarsening)的效率损失,并区分「共同有效子模型下的效率损失」与「识别失败」两种不同情形。

  • 子线索聚类:

  • 半参数效率理论(Robins et al., 1994; Gill et al., 1997; Tsiatis, 2006):提供切空间分解、影响函数刻画、效率界推导的标准框架。本文的 Theorem 1 和 Lemma 1 完全在此框架内。
  • 缺失混杂变量的因果推断(Levis et al., 2025; Wen and McGee, 2026):处理缺失混杂变量/暴露下的 ATE 估计,核心工具是迭代投影和多重稳健性。本文的直接对话对象。
  • 实际估计器的比较研究(Benz et al., 2025; Williamson et al., 2026):通过模拟比较多种缺失数据处理方法,发现「效率界排序」与「有限样本表现」可能不一致——这正是本文 Section D 的动机来源。

  • 这个方向在追问的核心问题:

  • 效率问题:在给定缺失机制下,ATE 的半参数效率界是什么?如何构造达到该界的估计器?(本文 Theorem 1 给出序贯 MAR 下的答案)
  • 粗化代价问题:将部分观测模式压缩为完整病例指示符,会损失多少效率?损失何时为零?(本文 Theorem 3 给出精确刻画)
  • 识别问题:当粗化后的数据不再满足 CCMAR 时,估计器是否仍然一致?偏差有多大?(本文 Section 6 的序贯 MAR only 情形)
  • 有限样本问题:效率界的排序是否在有限样本下成立?估计 nuisance 的误差如何影响排序?(本文 Section D 的 Gaussian stress design)

  • ⚠️ 作者的 framing(必须明确标注成"这是作者的说法"):作者将缺口 frame 成「在单调序贯 MAR 下,完整病例粗化的代价可以被精确刻画为两个迭代投影的非负期望,且当中间混杂变量在第二阶段缺失处提供残余信息时,增益是严格的」。他淡化的竞争路线包括:(a) 多重插补方法——作者仅在引言中一笔带过,未与本文估计器做系统比较;(b) 非单调缺失模式——作者明确限定在单调缺失,但未讨论扩展到非单调情形的难度;(c) 加权估计的有限样本性质——作者承认 Gaussian stress design 中覆盖不足,但未深入探讨修正方法。什么明显该被引 / 该存在、却没出现在 intro 里?:作者引用了 Levis et al. (2025) 和 Wen and McGee (2026),但未引用近期关于「缺失数据下双重稳健估计的有限样本性质」的文献(如关于权重截断、协变量平衡的近期工作),也未引用关于「部分观测混杂变量」的其他识别策略(如代理变量方法)。这些可能是值得研究者去查的方向。

  • 张力:未见明显对立引用。但存在一个微妙的张力:作者在 Theorem 3 中证明效率损失非负,但在 Section D 的模拟中发现有限样本下效率排序可能反转——这并非逻辑矛盾(效率界是渐近的),但提示「效率界」与「实际表现」之间的 gap 值得关注。

二、最核心、最简单的例子 / 数学问题

第一步:把符号、模型、可观测数据交代清楚

  • 符号:
  • 可观测变量:\(Z_0 = (W, A, Y)\),其中 \(W\) 为完全观测的基线混杂向量,\(A \in \{0,1\}\) 为处理变量,\(Y\) 为结局。\(Z_1 = (Z_0, L_1)\),\(Z_2 = (Z_1, L_2)\),其中 \(L_1, L_2\) 为两个有序的部分观测混杂变量。
  • 缺失指示符:\(R_1\) 指示 \(L_1\) 是否观测;\(C_2\) 指示在 \(R_1=1\) 的条件下 \(L_2\) 是否观测;\(R_2 = R_1 C_2\) 为完整病例指示符。可能的模式为 \((R_1, R_2) \in \{(0,0), (1,0), (1,1)\}\),排除了 \(L_2\) 单独观测的模式。
  • 观测数据:\(O = (Z_0, R_1, R_1 L_1, R_2, R_2 L_2)\)。
  • 因果参数:\(\psi = E\{Y(1) - Y(0)\}\),即 ATE。\(e(v) = P(A=1 \mid V=v)\) 为倾向得分,\(\mu_a(v) = E(Y \mid A=a, V=v)\) 为条件结局回归,\(V = (W, L_1, L_2)\)。
  • 缺失机制参数:\(\pi_1(Z_0) = P(R_1=1 \mid Z_0)\),\(\pi_2(Z_1) = P(C_2=1 \mid R_1=1, Z_1)\)。
  • 迭代投影:\(Q_1(Z_1) = E\{G(Z_2) \mid Z_1\}\),\(Q_0(Z_0) = E\{G(Z_2) \mid Z_0\}\),其中 \(G(Z_2)\) 是完整数据影响函数(式 6)。
  • 估计量:\(\hat{\psi}_{\text{seq}}\) 为序贯 MAR 下的交叉拟合一步估计量(式 11-12),\(\hat{\psi}_{\text{cc}}\) 为完整病例粗化后的估计量。

  • 模型:

  • 因果模型:潜在结局 \(Y(a)\),一致性 \(Y = Y(A)\),条件可交换性 \(Y(a) \perp\!\!\!\perp A \mid V\),处理正性 \(0 < e(V) < 1\)。
  • 缺失模型:单调序贯 MAR(Assumption 2):\(R_1 \perp\!\!\!\perp (L_1, L_2) \mid Z_0\),\(C_2 \perp\!\!\!\perp L_2 \mid (Z_1, R_1=1)\)。即第一阶段的缺失只依赖于 \(Z_0\),第二阶段的缺失只依赖于 \(Z_1\)(已观测到的 \(L_1\))。
  • 共同有效子模型(Assumption 3):额外要求 \(\pi_2(Z_1) = \pi_2(Z_0)\),即第二阶段缺失概率不依赖于 \(L_1\)。此时 CCMAR 成立,两种估计量识别同一目标。

  • 可观测数据:研究者实际观测到的是 \(n\) 个 i.i.d. 样本 \(\{O_i\}_{i=1}^n\)。每个样本包含 \(Z_0\)(完全观测)、\(R_1\)、以及当 \(R_1=1\) 时的 \(L_1\) 和 \(R_2\)、当 \(R_2=1\) 时的 \(L_2\)。关键点:\(L_1\) 在 \(R_1=0\) 时完全缺失,\(L_2\) 在 \(R_2=0\) 时完全缺失;但 \(L_1\) 在 \(R_1=1, R_2=0\) 时是可观测的,这正是序贯 MAR 与 CCMAR 的差别所在——CCMAR 丢弃了这部分信息。

第二步:讲最小内核

本文的最小内核可以归结为一个两阶段缺失下的效率比较问题。考虑最简单的设定:没有 \(W\),\(A\) 和 \(Y\) 完全观测,\(L_1, L_2\) 为两个标量混杂变量,单调缺失。

核心问题:假设我们有两种估计 ATE 的策略: - 策略 A(序贯 MAR):保留所有部分观测模式,利用 \(R_1=1, R_2=0\) 的样本中 \(L_1\) 的信息,通过迭代投影构造影响函数(式 8)。 - 策略 B(完整病例粗化):将数据压缩为完整病例指示符 \(S = R_2\),丢弃 \(R_1=1, R_2=0\) 的样本中 \(L_1\) 的信息,在 CCMAR 假设下构造影响函数(式 17)。

关键命题:在共同有效子模型(Assumption 3)下,两种策略都一致估计 \(\psi\),但策略 A 的效率不低于策略 B。效率损失由下式给出(Theorem 3):

\[\text{Var}(D_{\text{cc}}) - \text{Var}(D_{\text{seq}}) = E\left[\frac{1 - \pi_2(Z_0)}{\pi_1(Z_0)\pi_2(Z_0)} \{Q_1(Z_1) - Q_0(Z_0)\}^2\right] \geq 0\]

为什么成立:这个等式的结构非常清晰。\(Q_1(Z_1) - Q_0(Z_0)\) 度量的是 \(L_1\) 在给定 \(Z_0\) 后对完整数据影响函数的残余预测信息。如果 \(L_1\) 在 \(Z_0\) 之外不提供任何关于 \(G\) 的信息(即 \(Q_1 = Q_0\)),则粗化无损失。否则,损失正比于这个残余信息的平方,乘以权重 \((1-\pi_2)/(\pi_1\pi_2)\)——这个权重反映了「第二阶段缺失但第一阶段未缺失」的样本比例。当 \(\pi_2\) 接近 1(第二阶段几乎不缺失)时,损失趋近于零;当 \(\pi_2\) 很小(第二阶段大量缺失)时,损失可能很大。

证明的直觉:证明分为两步。第一步(Lemma 1)证明序贯 MAR 模型的切空间可以正交分解为五个子空间,对应 \(Z_0\)、\(R_1\)、\(Z_1\)、\(R_2\)、\(Z_2\) 各自的得分方向。第二步(Theorem 3)利用正交分解,将完整病例粗化估计量的影响函数 \(D_{\text{cc}}\) 分解为 \(D_{\text{seq}}\) 加上一个与 \(D_{\text{seq}}\) 正交的增量,这个增量正是 \(R_1/\pi_1 \cdot (C_2/\pi_2 - 1) \cdot (Q_1 - Q_0)\)。由于正交性,方差直接相加,效率损失就是增量的方差。

最小内核的启示:这个结果告诉我们,「保留部分观测模式」的价值完全取决于中间变量 \(L_1\) 对影响函数的残余预测能力。如果 \(L_1\) 是弱预测因子,粗化的代价很小;如果 \(L_1\) 是强预测因子(例如,它是结局的主要驱动因素),粗化可能带来显著的效率损失。更重要的是,当 Assumption 3 不成立时(即 \(\pi_2\) 依赖于 \(L_1\)),粗化不仅损失效率,还可能导致识别失败——此时两种估计量根本不在同一个模型下,比较效率没有意义。

三、这篇论文做了什么

三句话: 1. 研究了什么问题:在单调序贯 MAR 下,对两个有序且部分观测的混杂变量进行完整病例粗化(即丢弃中间部分观测模式),对 ATE 估计的效率与识别性有何影响? 2. 核心工具 / 方法:将 coarsening-at-random 框架特化到因果影响函数上,通过切空间正交分解建立序贯 MAR 下的规范梯度(Theorem 1),并推导粗化前后影响函数的精确漂移恒等式(Theorem 3)。 3. 主要结论:在共同有效子模型下,粗化的效率损失等于一个非负期望,其大小由中间变量 \(L_1\) 对影响函数的残余预测信息 \((Q_1 - Q_0)^2\) 和第二阶段缺失率 \((1-\pi_2)/(\pi_1\pi_2)\) 共同决定;当 \(\pi_2\) 依赖于 \(L_1\) 时,粗化可能导致识别失败而非单纯效率损失。

关键设定与假设: - Assumption 1(因果识别):一致性、条件可交换性、处理正性。这是 ATE 识别的标准条件,与 Levis et al. (2025) 相同。 - Assumption 2(单调序贯 MAR):\(R_1 \perp\!\!\!\perp (L_1, L_2) \mid Z_0\),\(C_2 \perp\!\!\!\perp L_2 \mid (Z_1, R_1=1)\)。这是本文的核心假设,比 CCMAR 更弱——它允许第二阶段的缺失依赖于已观测的 \(L_1\)。 - Assumption 3(共同有效子模型):\(\pi_2(Z_1) = \pi_2(Z_0)\)。这是 CCMAR 在单调缺失下的特例,也是效率比较有意义的前提。 - 技术条件:\(D_F \in L^2(P)\),\(\pi_1, \pi_2\) 有正下界。这些是影响函数理论和交叉拟合估计的标准条件。

主要结果: - Theorem 1(规范梯度):在 Assumption 1-2 下,ATE 的有效影响函数为式 (8) 的 \(D_{\text{seq}}\)。这是一个三层的迭代投影结构:\(Q_0\) 是 \(G\) 对 \(Z_0\) 的投影,\(Q_1\) 是 \(G\) 对 \(Z_1\) 的投影,最终影响函数是 \(Q_0\) 加上两个逆概率加权的增量项。该结果与 Wen and McGee (2026) 的构造一致,但本文给出了自包含的切空间证明。 - Theorem 3(效率损失):在 Assumption 1-3 下,\(D_{\text{cc}} - D_{\text{seq}}\) 与 \(D_{\text{seq}}\) 正交,且方差差由式 (19) 给出。这个结果将「粗化的代价」分解为可解释的组成部分。 - Corollary 2(严格增益条件):效率增益严格为正当且仅当 \(P\{\pi_2(Z_0) < 1 \text{ 且 } Q_1(Z_1) \neq Q_0(Z_0)\} > 0\)。这个条件非常直观:既要有第二阶段缺失(\(\pi_2 < 1\)),又要有残余预测信息(\(Q_1 \neq Q_0\))。 - Corollary 1(序贯多重稳健性):估计方程在 8 种 nuisance 配置组合下无偏,这是多重稳健性(multiple robustness)在序贯缺失下的自然推广。

证明路线与技术技巧: - 整体路线: 1. 切空间分解(Lemma 1):证明序贯 MAR 模型的切空间 \(T\) 可以正交分解为 \(T_0 \oplus T_{\pi_1} \oplus T_1 \oplus T_{\pi_2} \oplus T_2\),其中 \(T_0\) 对应 \(Z_0\) 的得分,\(T_{\pi_1}\) 对应 \(R_1\) 的得分,\(T_1\) 对应 \(Z_1\) 的得分,\(T_{\pi_2}\) 对应 \(R_2\) 的得分,\(T_2\) 对应 \(Z_2\) 的得分。这个分解是 coarsening-at-random 理论的标准结果(Robins et al., 1994; Gill et al., 1997),本文将其特化到两阶段单调缺失。 2. 影响函数验证(Theorem 1):构造候选影响函数 \(D_{\text{seq}}\),验证它属于切空间(即可以被观测数据的得分表示),并且沿每个切空间方向的导数等于 \(\psi\) 的导数。由于切空间分解是正交的,只需逐项验证。 3. 漂移恒等式(Theorem 3):在共同有效子模型下,比较 \(D_{\text{cc}}\) 和 \(D_{\text{seq}}\)。关键观察是 \(D_{\text{cc}}\) 可以写成 \(D_{\text{seq}}\) 加上一个增量项 \(U = \frac{R_1}{\pi_1}(\frac{C_2}{\pi_2} - 1)(Q_1 - Q_0)\)。利用条件期望性质证明 \(U \perp D_{\text{seq}}\),然后由勾股定理得到方差差。 4. 模拟验证:通过 Gaussian stress design 和 bounded-propensity design 验证理论结果,并揭示有限样本下的偏离。

  • 关键跳跃点:
  • Lemma 1 的完备性证明:证明五个子空间张成整个 \(L^2_0(P_O)\) 是技术难点。作者通过构造性地将任意 \(f \in L^2_0(P_O)\) 分解为五个分量,并验证每个分量属于对应的子空间。这个构造依赖于单调缺失的结构——在 \(R_1=0\) 的模式下,\(L_1, L_2\) 都不可观测,因此 \(f\) 只能依赖 \(Z_0\);在 \(R_1=1, R_2=0\) 的模式下,\(L_1\) 可观测但 \(L_2\) 不可观测,因此 \(f\) 可以依赖 \(Z_1\);在 \(R_2=1\) 的模式下,\(f\) 可以依赖 \(Z_2\)。这个分解是单调缺失特有的,非单调缺失下会更复杂。
  • Theorem 3 的正交性验证:证明 \(U \perp D_{\text{seq}}\) 需要仔细的条件期望计算。关键步骤是:\(E\{U \cdot \frac{R_1}{\pi_1}(Q_1 - Q_0)\} = E\{\frac{1-\pi_2}{\pi_1\pi_2}(Q_1 - Q_0)^2\}\),以及 \(E\{U \cdot \frac{R_2}{\pi_1\pi_2}(G - Q_1)\} = 0\)(因为 \(E(G - Q_1 | Z_1) = 0\))。这些计算在 Appendix B 中给出。
  • 边界情形:Remark 2 讨论了 \(\pi_2 \equiv 1\) 和 \(\pi_1 \equiv 1\) 的退化情形。当 \(\pi_2 \equiv 1\) 时,\(T_{\pi_2}\) 消失,影响函数简化为两阶段形式;当 \(\pi_1 \equiv 1\) 时,\(T_{\pi_1}\) 消失,但 \(T_1\) 仍然存在。这些边界情形的处理展示了作者对理论的精细把握。

  • 技术技巧点名:

  • 切空间正交分解:用于刻画模型的信息结构,是半参数效率理论的核心工具。
  • 迭代投影:\(Q_0 = E(G|Z_0)\),\(Q_1 = E(G|Z_1)\),用于构造影响函数的低维分量。
  • 逆概率加权:\(\frac{R_1}{\pi_1}\) 和 \(\frac{R_2}{\pi_1\pi_2}\) 用于校正缺失机制。
  • 交叉拟合:用于估计 nuisance 函数,避免过拟合偏差。
  • 勾股定理:用于分解方差,将效率损失表示为增量项的方差。
  • 确定性求积:用于精确计算效率界,避免蒙特卡洛误差。

真实例子与应用: - Gaussian stress design(Section 6.1-6.3):无 \(W\),\(A \sim \text{Bernoulli}(0.5)\),\(Y|A=0 \sim \text{Beta}(2,4)\),\(Y|A=1 \sim \text{Beta}(4,2)\),\(L_1 | A,Y \sim \text{Bernoulli}\{\text{expit}(-0.6 + 0.25A + 0.25Y + 0.1AY)\}\),\(L_2 | A,Y,L_1 \sim N(A + Y + 2.5L_1Y, 1.25^2)\)。ATE 精确值为 0.2558505161。这个设计的特点是 \(L_2\) 的方差较大,且 \(L_1\) 与 \(Y\) 有交互作用,使得 \(Q_1 \neq Q_0\) 的可能性较大。模拟结果显示:在共同有效子模型下,序贯估计量的方差比粗化估计量低约 4-5%;在序贯 MAR only 下,粗化估计量出现显著偏差(-0.033),覆盖率降至 45.7%。 - bounded-propensity design(Section 6.4):\(L_1 \sim \text{Bernoulli}(0.5)\),\(L_2 \sim \text{Uniform}(-1,1)\),\(A | L_1, L_2 \sim \text{Bernoulli}\{\text{expit}(-0.3 + 0.6L_1 + 0.7L_2)\}\),\(Y | A, L_1, L_2 \sim \text{Beta}\{8\mu_A, 8(1-\mu_A)\}\),其中 \(\mu_a = 0.25 + 0.15a + 0.10L_1 + 0.05L_2\)。ATE 精确为 0.15。这个设计满足均匀正性,用于评估估计 nuisance 时的有限样本表现。结果显示:在共同有效子模型下,序贯估计量的覆盖率略优于粗化估计量(95.4-96.4% vs 87.5-91.4%);在序贯 MAR only 下,粗化估计量的偏差随样本量增大而持续(不消失),而序贯估计量保持无偏。

🔎 结论是否比证明窄: - Theorem 1 的证明:作者声称给出了「自包含的切空间证明」,但实际上 Lemma 1 的完备性证明依赖于 coarsening-at-random 的一般理论(引用了 Robins et al., 1994; Gill et al., 1997),并非完全自包含。不过,对于熟悉该理论的读者,这个引用是合理的。 - Theorem 3 的适用范围:效率损失公式 (19) 是在 Assumption 3(共同有效子模型)下证明的。作者在 Section 5 末尾明确指出,当 \(\pi_2\) 依赖于 \(L_1\) 时,粗化估计量可能不一致,此时「效率比较」没有意义。但作者没有给出这个情形下粗化估计量的偏差界或修正方法——这是一个明确的局限。 - 模拟的有限性:作者在 Section 6.5 和 Section D 中承认,Gaussian stress design 中序贯估计量的覆盖率不足(83.8-89.6%),且未提供修正方法。作者将这一现象归因于 nuisance 估计误差和权重极端值,但未给出理论解释或实用建议。 - 「增益是严格的」的表述:Corollary 2 的严格性条件需要 \(P\{\pi_2(Z_0) < 1 \text{ 且 } Q_1(Z_1) \neq Q_0(Z_0)\} > 0\)。作者在 Remark 2 中讨论了 \(\pi_2 \equiv 1\) 的退化情形,但未讨论 \(Q_1 = Q_0\) 的情形(即 \(L_1\) 无残余预测信息时)。这个情形在实际中可能比 \(\pi_2 \equiv 1\) 更常见。

四、开放问题

  1. 非单调缺失的扩展:本文的切空间分解和影响函数构造依赖于单调缺失结构。对于非单调缺失(如 \(L_2\) 可观测但 \(L_1\) 缺失的模式),切空间分解会更复杂,效率损失公式的形式也可能不同。作者在 Discussion 中未提及这一扩展,但这是自然的下一步。(扎根于 Lemma 1 的证明结构)

  2. 有限样本覆盖率的修正:Gaussian stress design 中序贯估计量的覆盖率不足(83.8-89.6%),作者将其归因于 nuisance 估计误差,但未提供修正方法。一个可能的方向是使用偏差校正或 bootstrap 方法改进方差估计。(扎根于 Section 6.5 和 Section D 的模拟结果)

  3. 粗化估计量的偏差界:当 \(\pi_2\) 依赖于 \(L_1\) 时,粗化估计量不一致,但作者未给出偏差的显式表达式或上界。推导这个偏差界可以帮助实践者判断何时可以使用粗化方法。(扎根于 Section 5 末尾的讨论)

  4. 多个中间变量的推广:本文只考虑了两个有序混杂变量。当有 \(K\) 个有序混杂变量时,影响函数的迭代投影结构会变成 \(K\) 层,效率损失公式会涉及 \(K\) 个迭代投影。这个推广在理论上是否直接?(扎根于 Theorem 1 的迭代结构)

  5. 与多重插补的比较:作者在引言中提到了多重插补,但未与本文方法做系统比较。一个值得研究的问题是:在单调序贯 MAR 下,多重插补(特别是顺序回归插补)的效率是否达到半参数效率界?如果达不到,差距有多大?(扎根于引言中对 Seaman and White, 2014 的引用)

  6. 实际数据应用:本文所有模拟均为合成数据。一个自然的后续工作是寻找具有单调缺失结构的真实数据集(如纵向队列研究中的随访缺失),验证本文方法的实际表现。(扎根于 Discussion 中「所有数据均为合成」的说明)


提示:若要确认上述某条是否是真 gap,建议去读以下近期文献的引言部分(约 5 篇):(a) 关于非单调缺失下因果推断的近期工作;(b) 关于缺失数据下双重稳健估计有限样本性质的近期工作;(c) 关于多重插补效率的近期工作。如果这些文献的引言都指向同一个未解决问题,那大概率是真 gap;如果各说各话,则可能是伪 gap。


Maintained by 陈星宇 · Homepage · Source on GitHub

评论