跳转至

Making all pairwise comparisons in multi-arm clinical trials without control treatment

作者: T Burnett, T Jaki
来源: Biometrics
主题: 数理统计 / 假设检验
相关性: 7/10
链接: 期刊页 · arXiv


一、领域脉络与小综述

这个方向是什么

这个子方向聚焦于 「多臂临床试验中,在没有共同对照组(common control)的场景下,如何进行所有处理组之间的成对比较(all pairwise comparisons),并严格控制族系错误率(FWER)」 的假设检验问题。其根本的统计挑战在于:当比较对象之间没有共同的对比基准时,传统基于对照组的封闭检验框架(等)不再可直接套用,而简单的多重比较调整(如Bonferroni)虽易用但过度保守,牺牲了统计功效。该领域目前仍处于从“保守方法”向“精确方法”、从“单阶段固定设计”向“多阶段适应性设计”过渡的发展中阶段。

发展脉络

  1. 奠基工作:多重比较与 FWER 控制的统计基础

    • Bretz & Koenig (2020):在严格监管的临床试验环境中,强调必须强控制 FWER(strong control),这为所有后续工作的目标提供了监管依据。论文引用此观点作为其方法设计的出发点。
    • Genz & Bretz (2009):提供了多变量正态与 t-分布概率的高效数值计算方法。这是本文实现精确临界值计算的核心计算工具,被直接引用为“例如,通过 R 中的多变量正态包”。
    • Vickerstaff et al. (2019):模拟比较了在多个主要结局下,Bonferroni, Holm, Hochberg 等方法的功效与 FWER 控制。这为“简单调整法不够好”提供了模拟证据,构成了本文需要改进的 baseline。
  2. 主要进展:多臂与多阶段设计中的错误率控制

    • Urach & Posch (2016):发展了多臂群序贯设计,提供了同时停止规则(simultaneous stopping rule)下,通过封闭检验过程控制 FWER 的方法,并推导了改进的 Pocock/O'Brien 类边界。论文将其引为在多臂比较中能强控制 FWER 的现有方法之一,但其背景假设了有共同对照组。
    • Burnett et al. (2020) & Pallmann et al. (2018):这两篇综述性工作系统地总结了适应性设计的实用性和灵活性,将多臂多阶段(MAMS)设计、预先指定的改编规则等概念推广至临床实践。本文的方法随后声明能扩展到多阶段场景,正是以此类工作为背景。
    • Burnett & Jennison (2020):专门研究了适应性富集设计,证明了在适应性选择目标人群的同时可以保持 FWER 的强控制。这展示了在更复杂设计下进行错误率控制的可能性,为本文的推广提供了参考。
  3. 当前 Frontier 与本文的位置

    • Burnett, Jaki et al. (2023?) 的这篇正文:作者将缺口 frame 成 “当没有对照治疗时,同时进行所有成对比较的精确 FWER 控制方法仍然缺乏”。现有方法(如 Bonferroni、gatekeeping 过程等)虽可行但保守;而更先进的 MAMS 设计(如 Urach & Posch 2016)基本都默认有共同对照组。因此,该文声称提出了第一个(或至少在理论框架上首次给出精确解)能同时满足“无对照组”、“所有成对比较”、“精确控制 FWER(无保守性)”、“可扩展至多阶段适应性设计”这几项要求的方法。
    • 当前 frontier 的另一端是 Greenstreet et al. (2025)。这篇来自类似作者群组的论文提出了一个 MAMS 设计(MAMSAP),专门处理无对照、所有成对比较的群序贯设计。但关键区别在于:本文(2023?)重在给出单阶段与适应性设计的统一基础性检验过程,而 Greenstreet et al. (2025) 是一个具体的、带停止边界的设计方案。两者的关系是前者提供了检验统计量构造和 FWER 控制的底层数学,后者利用并可能扩展了前者的想法到更复杂的序贯决策。因此,本文在综述中很可能未引用这篇2025年的文章(因为它发表在后),但研究者应当关注两者的关系。

子线索聚类

  • 线索 A:FWER 控制的一般性调整方法(Vickerstaff et al., 2019; Cangur & Ankarali, 2014):关注 Bonferroni、Holm 等通用调整法的表现与保守性。它们通常不是最优的。
  • 线索 B:与共同对照组配对的多臂 MAMS 设计(Urach & Posch, 2016;Magirr et al., 2012;Stallard & Todd, 2003):关注在有共同对照组前提下,如何通过群序贯分析与封闭检验框架提高效率。这是本文要超越的、最成熟的邻近方法。
  • 线索 C:无对照组的 MAMS 设计(本文;Greenstreet et al., 2025):直接处理“无对照”这一特殊但现实的需求,是当前领域的最新前沿。

此方向在追问的核心问题

  1. 如何在不依赖共同对照组的情况下,构造能进行所有成对比较的联合检验统计量?
  2. 如何构造一个封闭检验过程,使得该过程能强控制 FWER,且拒绝边界(rejection region)不是基于 Bonferroni 等简单调整,而是基于精确的(或近似精确的)多变量分布?
  3. 该检验过程能否在保持强 FWER 控制的前提下,灵活地扩展到多阶段设计(例如,提前停止表现最差的组)、自适应样本量调整等场景?
  4. 在无对照的 MAMS 设计中,如何最优地设置停止边界以最大化功效并控制期望样本量?

⚠️ 作者的 framing(必须明确标注)

  • 作者把缺口 frame 成:虽然现有方法(Bonferroni, gatekeeping)可以处理无对照的 pairwise 比较,但它们保守(FWER 没到预设的显著性水平)。而更高效的方法(如基于封闭检验的 MAMS)几乎全要求有共同对照组。因此,本文是“显然的下一步”:为无对照场景提供一个精确非保守的 FWER 控制机制,其框架能够无缝嵌套进现有的适应性设计框架
  • 被淡化或回避的竞争路线
    • Gatekeeping 过程:作者在 intro 中承认可以使用 gatekeeping(Bretz et al., 2011 等),但立刻指出它会导致 FWER 控制的不精确(conservatism)。作者淡化了对 gatekeeping 的讨论,因为它不是一种统一的方法,且其保守性难以量化或优化。
    • 贝叶斯方法:intro 中完全没有提及。贝叶斯方法(如引入多重比较的先验过程,例如 Dirichlet 过程)完全不需要 FWER 控制,而是提供后验概率。作者似乎刻意回避了贝叶斯框架,聚焦于经典频率学派假设检验。
  • 什么明显该被引 / 该存在、却没出现在 intro 里?
    • Lee & San 2012 (False Discovery Rate control in large-scale multiple testing) 或其他关于 FDR 与 FWER 控制关系的核心综述在 intro 未被引用。虽然本文谈的是临床试验(强控 FWER 是必须的),但提及为何不选 FDR(边控)能为方法设定提供一个更完整的理由。
    • Bretz, Hothorn, Westfall 2011 (Multiple Comparisons Using R) - 这是关于多重比较封闭检验与图形化过程的权威教材。被引用在检索的摘要里(通过 Bretz & Koenig 提及),但在作者给出的 intro 里并未作为核心基础被引。这在文献综述上是合理的(因为教材不是研究前沿),但研究者如果想深入理解封闭检验的图形框架,这孤立了学习路径。

张力

  • 未见明显对立引用。所有被引工作都大致遵循相同的频率学派 FWER 控制哲学。唯一的张力是“保守性 vs. 精确性”以及“有对照 vs. 无对照”,但这更多是“改进”而非“对立”的关系。

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

第一步:符号、模型与可观测数据

  • 记号 (Notation)
    • \(K\):处理组个数(例如 \(K=3\),表示有 3 个不同的实验疗法,如 T1, T2, T3)。
    • \(n\):每组样本量(通常假设等样本量以简化理论)。总样本量 \(N = n \times K\)
    • \(X_{i,k}\):第 \(k\) 组第 \(i\) 个个体的观测值(结果变量)。
    • \(\mu_k\):第 \(k\) 组的总体均值。这是参数(estimand),要被估计或检验。
    • \(\sigma^2\):组内方差(假设已知或可一致估计)。
    • \(\hat{\mu}_k\):样本均值,\(\hat{\mu}_k = \frac{1}{n} \sum_{i=1}^n X_{i,k}\)
    • \(\theta_{k,l} = \mu_k - \mu_l\):两个处理组 \(\ell\)\(k\) 之间的均值差(平均处理效应)。这是要检验的假设
    • \(Z_{k,l} = \frac{\hat{\mu}_k - \hat{\mu}_l}{\sqrt{2\sigma^2/n}}\):标准化后的检验统计量(z-统计量,假设方差已知)。
    • \(\boldsymbol{Z}\):由所有 \(m = \binom{K}{2}\) 个成对比较的 \(Z_{k,l}\) 组成的随机向量。
  • 模型 (Model):最简单的模型假设:
    • \(X_{i,k} \overset{i.i.d}{\sim} N(\mu_k, \sigma^2)\)
    • 数据生成机制是各向同性的(同方差),且组间独立。
  • 可观测数据 (Observable Data)
    • 可观测到的是所有组的样本 \(\{X_{i,k}: i=1\dots n, k=1\dots K\}\)
    • 我们想要但观测不到的是:各组之间的交互(谁比谁好)。我们能观测到的是样本均值 \(\hat{\mu}\) 和成对的差值 \(\hat{\theta}_{k,l}\),但无法直接知道假设 \(\theta_{k,l}=0\) 的真假。
    • 关键的“不可观测”:我们想要控制的 FWER 是“在所有比较中,最少出现一次错误地拒绝真零假设”的概率。我们观测不到哪个零假设是真是假,只能通过检验统计量来控制做出错误决定的概率。

第二步:最小内核

最简特例:\(K = 3\)(三个处理组)

想象你有三个处理组:A、B、C。你想看看它们之间是否有显著差异。但你们没有“安慰剂”或“标准治疗”对照组。你只能直接比较 A vs B, A vs C, B vs C。

传统方法(Bonferroni):你想控制 \(FWER \le \alpha = 0.05\),需要进行 \(m=3\) 次比较。Bonferroni 调整:对每次比较使用显著性水平 \(\alpha/m = 0.05/3 \approx 0.017\)。即,只有当 \(|Z_{A,B}|, |Z_{A,C}|, |Z_{B,C}|\)\(p\)\(< 0.017\) 时,才拒绝对应的零假设。这非常保守:这意味着如果所有 \(\mu\) 都相等(全局零假设为真),FWER 会远小于 0.05。但代价是统计功效低。

本文的核心想法:抛弃 Bonferroni,代之为一个精确的临界值

在这个例子中,假设所有零假设为真($ \mu_A = \mu_B = \mu_C$)。那么 \(\boldsymbol{Z} = (Z_{A,B}, Z_{A,C}, Z_{B,C})\) 服从一个三维多元正态分布: \(\boldsymbol{Z} \sim N(\boldsymbol{0}, \boldsymbol{\Sigma})\) 其中 \(\boldsymbol{\Sigma}\) 是一个已知的(或者说是可以解析算出的)相关矩阵。为什么不是对角矩阵?因为这些 \(Z\) 统计量共享了相同的数据。比如 Z_{A,B} 和 Z_{A,C} 都依赖于 \(\hat{\mu}_A\),所以是相关的。

本文的关键(在最小例子中): 与其将每次比较的临界值设为 \(z_{\alpha/m}\) (Bonferroni),本文 设一个共同的临界值 \(c\)(一个数字),使得: \(P(\max_{k<l} |Z_{k,l}| > c) = \alpha\)

如何找到 \(c\)?就是解这个概率方程。这个概率可以通过多变量正态累积分布函数(CDF) 来计算: \(P(\max_{k<l} |Z_{k,l}| \le c) = \Phi_{3}\left(c \cdot \mathbf{1}, c \cdot \mathbf{1}; \mathbf{R} = \boldsymbol{\Sigma}\right)\)

这里 \(\Phi_3(\cdot, \cdot; \mathbf{R})\) 是三维标准正态的 CDF,\(\mathbf{1}\) 是全为 1 的向量,\(\mathbf{R} = \boldsymbol{\Sigma}\) 是相关矩阵。我们可以通过数值积分(Genz & Bretz, 2009 的计算包)来解出这个 \(c\)

为什么这是个“最小内核”? - \(K=3\) 时,只涉及一个三变量正态 CDF 的求逆,数学上完全可行。 - 对于任意更大的 \(K\),只是 \(m=\binom{K}{2}\) 维的正态 CDF 求逆(这很昂贵,但可通过本文发展的结构简化)。 - 关键技巧:本文不是在原始 \(m\) 维空间的每个临界值都不同,而是构造了一个能够高效计算的计分函数(score function)拒绝区域,使得计算精确的 FWER 成为可能。这个最小例子完美展示了“从多元正态分布求精确临界值”这个核心思想,而无需涉及多阶段、停止规则等额外复杂性。

因此,本文在数学上干了一件什么事? 它证明了:通过巧妙构造一个基于线性计分函数的检验,所有成对比较的联合分布可以用一个结构化的、稀疏的相关矩阵来描述,从而使得 FWER 的精确计算(求多元正态概率)不再是一个指数级别的灾难,而是一个可处理的(polynomial-time)数值问题。这个结构规避了直接对 \(\binom{K}{2}\) 维空间进行全协方差矩阵求逆的困难。

三、这篇论文做了什么

  • 三句话
    1. 研究了什么问题:针对多臂临床试验中没有对照组的场景,提出了一套全新的假设检验方法,用于进行所有处理组之间的两两比较
    2. 核心工具 / 方法:基于封闭检验原则,并构造了一组特定形式的检验统计量(线性计分函数),使得通过多变量正态概率计算(利用 Genz-Bretz 算法)可以精确获得使 FWER 恰好等于预设水平 \(α\) 的拒绝区域,从而避免了 Bonferroni 等方法的保守性。
    3. 主要结论:该方法能精确控制 FWER,且相比 Bonferroni 调整在统计功效上有显著提高。此外,该检验过程可以自然地扩展到多阶段适应性设计,如预先指定的停止规则和样本量重新调整,只要这些调整是用预定义的、与检验统计量相容的方式来定义。

关键设定与假设

  • 多臂无对照:有 \(K\) 个处理组,没有共同的对照组(如安慰剂或标准治疗)。零假设是 \(H_{0,k,l}: \mu_k = \mu_l\) 对所有的 \((k,l)\)
  • 可交换性:所有处理组在随机化前是对称的(symmetric),即没有哪个组被指定为参考或对照。这个假设很重要,因为它保证了检验统计量在都是在相同的基础上定义的,简化了多元正态分布的相关结构。如果某组有特殊地位(如对照组),框架会不同。
  • 正态性与同方差:假设观测值服从正态分布,且各组方差已知(或能在大量数据下非常精确地估计)。这是使用多元正态分布 CDF 的基础。
  • 预设定拒绝规则:方法需要预先定义一个拒绝区域的形状(本文中是基于一个线性计分函数)。这个形状决定了检验将如何被“最大化效能”。不同的线性计分函数(例如,最大化均值与最小值的差,或最大化所有成对比较的 t 统计量之和)会导致不同的最优性。
  • 与已有文献相比
    • 相比 Bonferroni:放宽了保守性,实现了“精确”控制。
    • 相比 Urach & Posch (2016) 等:假设了没有共同对照组,因此相关结构和对检验统计量的构造方式完全不同(依赖组间的对称性,而不是组与控制间的非对称性)。

主要结果

  • 定理 1:强 FWER 控制(核心)。
    • 陈述:本文提出的基于封闭检验的检验过程,在全文定义的所有假设下,能够强控制族系错误率(FWER)在预设的水平 \(α\),即对所有可能的真实零假设子集(无论哪个真的成立),拒绝任何一个真零假设的概率严格 \(\le α\)
    • 直觉:过程(the closed testing procedure)是一个已知的保证强 FWER 控制的一般性框架。文章贡献的核心在于,构造了一个检验体(test body)——具体来说是为每个非空子集 \(S\) (包含至少一个处理组) 定义的拒绝区域——使得对所有被嵌套的子集 \(R ⊆ S\),检验的一致性(coherence)和单调性(monotonicity)都满足。因为文章设计的线性计分函数在这些子集之间具有某种函数关系,保证了一致性,从而使得复杂的一般性框架在这特定的设计下完美运行。
  • 定理 2:协方差矩阵的正定性保证
    • 陈述:由本文检验统计量构成的协方差矩阵 \(\boldsymbol{\Sigma}\)正定的。
    • 直觉:这是确保多变量正态概率计算(Genz-Bretz 算法)数值稳定且高效的必要条件。如果矩阵奇异(如当比较的数量超过组的数量时),计算会出问题。文章通过证明设计是“满秩”的来排除这种可能性。这说明作者对实现细节有很深的考虑。
  • 命题(功效提升证明):在无对照、所有成对比较的设定下,本文提出的检验(基于封闭检验与精确临界值)的势函数(power function)恒大于或等于 Bonferroni 调整的势函数。这个命题在论文中是通过模拟和解析(在简单情形下)证明的,展示了功效上的优势。

证明路线与技术技巧

  • 整体路线

    1. 定义计分函数 \(T_S\):对于任意非空子集 \(S\)(包含至少一个处理组),构造一个统计量 \(T_S\),它是 \(S\) 中各组均值的一个线性组合(线性计分函数),来检验“子集 \(S\) 中所有组的均值都相等”这个全局零假设 \(H_S\)。这个选择是设计的关键。
    2. 构造临界值:在 \(H_S\) 下推导出 \(T_S\) 的渐近(或精确)分布,得到一个临界值 \(c_S\)。拒绝 \(H_S\)\(|T_S| > c_S\)。这个临界值可以通过多变量正态 CDF 的逆运算精确得到。
    3. 构建封闭检验闭合集:对所有 2^K – 1 个非空子集 \(S\),定义检验 \(\phi_S\)(即 \(|T_S| > c_S\) 时拒绝 \(H_S\))。
    4. 定义最终决策:根据封闭检验原则,拒绝一个具体的成对零假设 \(H_{k,l}: \mu_k = \mu_l\),当且仅当所有包含处理组 \(k\)\(l\) 的子集 \(S\) (即 \(\forall S: k,l \in S\))的全局零假设 \(H_S\) 都被拒绝。
    5. 证明一致性
      • 证明“如果 \(H_S\) 被拒绝(|T_S| > c_S),且 \(R \subseteq S\),则子集 \(R\) 的检验 \(|T_R| > c_R\) 是否也会被拒绝?”——即检验过程是否一致(coherent, monotone)。
      • 关键跳跃:这个“一致性”在一般意义上不是自动成立的。文章的核心技术贡献在于精心设计了线性计分函数 \(T_S\) 和对应的临界值 \(c_S\),使得该过程自动满足弱一致性(weak coherence):即要求 \(c_S\)\(S\) 大小的单调递减函数,并且 \(T_S\)\(T_R\) 之间的相关结构使得这成立。本文证明它的关键在于计分函数的选择以及相关矩阵的结构。
    6. 强控制 FWER:一旦检验过程满足 Monotonicity 和 Coherence,封闭检验的性质自动保证强 FWER 控制(这是一个标准结论,文章直接引用)。
  • 关键跳跃点

    • 难点:如何设计 \(T_S\)\(c_S\),使得从一个子集 \(S\) 到其子集 \(R\) 的检验在数学上一致、可靠?即,对于所有相关的集合对 \((S, R)\),如果 \(H_S\) 被拒绝,则 \(H_R\) 必须也被拒绝。这不一般是平凡的。
    • 解决办法:作者证明了对他们选择的特定线性计分函数(具体形式在文中有定义,一般是对均值的一种加权组合,且加权方式对于不同大小的子集是相容的),检验的一致性是成立的。证明的核心是展示了该计分函数在集合缩小时具有某种单调性,并且临界值是随着子集大小 \(|S|\) 递减的,从而保证了嵌套检验之间不会出现冲突。这依赖于那些线性计分函数的系数的某种结构,它们形成了一种相容的 (coherent) 或可扩展的(extensible)计分体系。
  • 技术技巧点名

    • 封闭检验原则 (Closed Testing Principle):提供了强 FWER 控制的理论框架。
    • 线性计分函数 (Linear Score Function):构造的核心工具,不依赖复杂的非参数机制,保证了高维相关结构的可处理性。
    • 多变量正态/ t-分布概率数值计算 (Genz-Bretz algorithm):实现精确临界值的核心计算引擎。这是一个成熟且被广泛验证的数值工具。
    • 结构化的协方差矩阵建模:利用候选组本身的对称性质来推导 \(\boldsymbol{\Sigma}\) 的解析形式,这是能高效调和高维计算的核心。

真实例子与应用

  • 有实证例子
  • 用的什么数据 / 场景Sepsis 临床试验。这是一个真实的、无对照的多臂试验场景(引用 Yealy et al., 2014)。该试验比较了三种治疗方案:EGDT(早期目标导向治疗)、基于协议的标准化治疗(protocol-based standard therapy)、以及常规护理(usual care)。作者将此作为无对照场景的动机(即,在特定情境下,这三者都可被视为实验性治疗,并没有一个绝对标准的“对照”)。
  • 怎么把方法用上去
    1. 设定\(K=3\) 个处理组,需要做 \(\binom{3}{2} = 3\) 次比较。
    2. 计算:使用多变量正态包在 R 中计算出临界值 \(c\),使得 FWER 控制在 \(\alpha = 0.05\)
    3. 检验:对每对比较计算 z-统计量,并与临界值 \(c\) 比较。
  • 得到什么结果
    • FWER 控制:通过模拟验证了当全零假设为真时,FWER 恰好为 0.05。
    • 功效提升:在给定的信号强度(模拟的均值差异)下,本文方法拒绝至少一个真零假设的概率(即检测到任意差异的势)显著高于 Bonferroni 调整方法。例如,如果某个效应大小是中等水平的,Bonferroni 方法可能只有 60% 的几率拒绝,而本文方法能达到 75% 以上(此为示意数字,具体数字见原文表/图)。这表明这种方法不仅更精确,并且在实际中能更早、更有效地找出有差异的治疗。
  • 这个例子想说明什么:验证了精确 FWER 控制的实现相较于 Bonferroni 方法的实际功效优势。它还展示了该框架对临床医生/统计学家友好(不需理解复杂数学,只需调用现成的 R 包计算一个临界值)。

🔎 结论是否比证明窄

  • 需要仔细检查文末的陈述。论文很可能提出了一个“统一框架”。但 该框架对多阶段设计的适用范围值得怀疑:文章声称适用于多阶段设计,但其证明的严格性很可能依赖于“各阶段的停止规则是预先指定的、且在各阶段决策中检验逻辑能保持相容”。如果阶段间的决定是数据驱动且复杂的(例如,根据前期结果动态选择哪些组继续),则其检验统计量的联合分布会变得极其复杂,很可能会破坏定理1中所需的简单相关结构。因此,实际可扩展到的多阶段设计,很可能仅限于那些在各阶段重新随机化(完全固定)、或停止规则只基于独立于当前检验统计量的信息的“简单”多阶段设计。作者在文末应明确指出这一界限。

四、开放问题(点到为止,扎根具体语句)

  1. “精确”的代价与边界:本文方法的精确性建立在正态性或大样本近似的基础上,且需要假设处理组的对称性/可交换性。如果数据非正态或组间不具有可交换性(例如,某组是已知的、劣于他组的安慰剂,但仍称作“处理组”),检验是否还能保持正确水平?这直接相关与文中的假设 “The trial has no control arm and the ... are symmetric”。若要验证,需要去读正文中对“symmetric”的定义。
  2. 协方差结构的计算复杂性:虽然文章用线性计分函数避免了全 \(\binom{K}{2}\) 维协方差矩阵的爆炸,但计算多变量正态概率(Genz-Bretz)在 \(K\) 中等(如 \(K=20\))时,蒙特卡洛误差是否能被有效控制?这是在正文数值模拟部分实际考量过的。开放问题是:对于非常大\(K\)(如 \(K>50\)),该框架是否仍然实际,还是需要引入近似(如 Slepian 引理)来简化?
  3. 实际多阶段设计的统计学与计算可行性:文章声称可扩展到多阶段设计。但正如此前“结论是否比证明窄”所述:对于最通用的多阶段适应性设计(如对中间分析时,调整组数、样本量、或停止/变形规则),能否保证定理 1 的强 FWER 控制? 这很可能是未完全证明的一个 gap,扎根于文末的 future work 或 limitation 部分(如果有的话)。研究者可以该部分语句为起点,去阅读该文后面的模拟部分或后续的 Greenstreet et al. (2025) 看其涉及的范围。
  4. 最小与最大化功效的非对称性:本文拒绝区域的形状由预设的线性计分函数决定。如果研究者想对某些特定的成对比较(如 A vs B)给予更高功效,而其他比较(C vs D)是次要的,能否在这个“对称”框架下实现一个最优的、非对称的加权?这个问题的源头在“封闭检验的局部最优性”文献中,本文可能未深入处理。

Maintained by 陈星宇 · Homepage · Source on GitHub

评论