跳转至

What Can Time‐Series Regressions Tell Us About Policy Counterfactuals?

作者: Alisdair McKay, Christian K. Wolf
来源: Econometrica
主题: 经济理论 / 应用
相关性: 5/10
机构绿灯: MIT(US News 前 50,免分进入精读)
链接: https://doi.org/10.3982/ecta21045


一、领域脉络与小综述

这个方向是什么

这个子方向要解决的根本问题是:在宏观经济学中,如何利用从历史数据中估计出的政策冲击因果效应(如利率变动对GDP的影响),来预测如果采用一套不同的政策规则(如更激进的泰勒规则),经济会如何演变?这本质上是政策反事实推断问题,其核心挑战是卢卡斯批判:当政策规则改变时,经济主体的预期和行为也会改变,因此基于旧规则下估计的“结构参数”可能不再适用于新规则下的预测。本文试图在线性化结构宏观经济模型的框架下,桥接实证因果估计(如局部投影、SVAR)与结构政策评估之间的鸿沟,提供一个半参数识别框架,使得反事实分析对卢卡斯批判具有稳健性。

发展脉络(history)

  1. 奠基工作:结构向量自回归(SVAR)与脉冲响应分析

    • Sims (1980):开创性地将VAR引入宏观经济学,作为描述经济时间序列联合动态的简约式工具。其核心思想是,通过施加短期或长期约束(如“货币政策冲击在当期不影响产出”),可以从VAR残差中识别出结构性冲击(如货币政策冲击),进而估计脉冲响应函数(IRF)。这是后续所有工作的基础。
    • Christiano, Eichenbaum & Evans (1999):系统性地发展了SVAR识别策略,特别是通过递归排序(Cholesky分解)来识别货币政策冲击,并估计其对产出、通胀等变量的动态影响。这成为实证宏观经济学中估计政策冲击因果效应的标准范式。
  2. 主要进展:局部投影(Local Projections)与对SVAR的挑战

    • Jordà (2005):提出了局部投影方法,直接对每个预测期h的因变量(如t+h期的GDP)关于当期冲击(如t期的利率)进行回归,从而估计脉冲响应。相比SVAR,局部投影对模型误设(如滞后阶数错误)更稳健,且更容易处理非线性。这为实证因果估计提供了另一个有力工具,并引发了关于“哪个方法更好”的持续争论。
    • Plagborg-Møller & Wolf (2021):证明了在识别假设下,局部投影和SVAR估计的脉冲响应是渐近等价的。这一结果统一了两种方法,表明它们估计的是同一个因果对象——即现行政策规则下的冲击传导。这为本文的框架提供了关键前提:无论用哪种方法,我们估计的都是同一个东西。
  3. 当前Frontier:从“冲击传导”到“政策反事实”

    • 现有实证工作(如SVAR、局部投影)的核心产出是脉冲响应函数,它回答了“在现行政策规则下,一个外生的政策冲击会如何影响经济”。但政策制定者关心的是“如果我们改变政策规则(例如,从盯住通胀改为盯住产出缺口),经济会如何?”。
    • Lucas (1976) 的批判指出,直接使用旧规则下的脉冲响应来预测新规则下的结果是有问题的,因为经济主体的预期和行为会随规则改变。因此,从“冲击传导”到“政策反事实”的跨越,需要一个能够处理卢卡斯批判的理论框架。
    • 本文的位置:本文正是在这个gap上。它证明,在线性化结构模型的假设下,仅凭现行政策规则下的冲击传导(脉冲响应),就足以构造替代政策规则下的反事实动态,并且这些反事实对卢卡斯批判是稳健的。它不需要完全指定模型的结构方程,只需要知道冲击的因果效应,从而将实证因果估计与结构政策评估连接起来。

子线索聚类

这些被引文献大致落在以下两条子线索上:

  • 线索一:实证因果估计方法(SVAR vs. 局部投影)

    • 核心问题:如何从时间序列数据中识别并估计外生政策冲击的因果效应?
    • 主流方法:SVAR(通过短期/长期约束识别冲击)和局部投影(直接回归)。
    • 已知瓶颈:识别假设的合理性(如递归排序假设)是争论焦点。Plagborg-Møller & Wolf (2021) 的工作统一了两种方法的渐近性质,但并未解决识别假设本身的问题。
  • 线索二:结构模型与政策评估(卢卡斯批判)

    • 核心问题:如何评估替代政策规则的效果,并使其对卢卡斯批判具有稳健性?
    • 主流方法:构建并估计一个完整的动态随机一般均衡(DSGE)模型,然后在该模型内进行反事实模拟。这需要指定所有结构方程(偏好、技术、市场出清条件等),并估计其“深层参数”(如风险厌恶系数、价格粘性程度)。
    • 已知瓶颈:DSGE模型通常高度参数化,其估计和识别充满争议。卢卡斯批判的“稳健性”依赖于模型结构的正确性,而模型误设的风险很高。

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

  1. 识别问题:如何从观测数据中可靠地识别出外生的、结构性的政策冲击?这依赖于不可检验的排除/排序假设。
  2. 反事实问题:给定识别出的冲击传导,如何推断在不同政策规则下的经济动态?这是卢卡斯批判的核心。
  3. 最优政策问题:在给定社会福利损失函数下,什么是最优的政策规则?这需要将反事实分析与优化结合起来。
  4. 有限信息问题:当实证证据有限(例如,只能识别少数几个冲击的传导)时,如何仍能进行有意义的反事实分析?

⚠️ 作者的Framing

  • 作者的缺口frame:作者将缺口frame为“实证因果估计(如局部投影、SVAR)与结构政策评估之间的鸿沟”。他们声称,现有实证工作只提供了“现行规则下的冲击传导”,而结构模型(DSGE)虽然能进行反事实分析,但依赖于强参数假设且易受卢卡斯批判影响。本文的贡献是提供一个中间路线:在线性化结构模型的假设下,仅用实证可估计的冲击传导就能构造对卢卡斯批判稳健的反事实。这使得本文成为“显然的下一步”。
  • 被淡化/回避的竞争路线
    • DSGE模型:作者承认DSGE模型可以做反事实,但强调其“高度参数化”和“对卢卡斯批判的脆弱性”。他们通过假设一个“一般线性化结构模型”来回避DSGE的复杂性,但并未讨论这个线性化假设本身在多大程度上限制了其应用(例如,在零利率下限、非线性财政政策等情形下,线性化可能失效)。
    • 非线性/非参数方法:作者完全回避了非线性或非参数的结构模型。他们的整个框架建立在线性冲击可加性的假设之上,这排除了许多重要的宏观经济现象(如状态依赖的传导、阈值效应)。
  • 什么明显该被引/该存在、却没出现在intro里?
    • 关于“卢卡斯批判”的现代讨论:作者引用了Lucas (1976) 的原著,但未引用近年来关于“卢卡斯批判在多大程度上是实证问题”的讨论(例如,一些研究表明,对于某些类型的政策变化,卢卡斯批判的定量影响可能很小)。这可能是作者有意为之,因为强调卢卡斯批判的严重性可以凸显其“稳健性”贡献的价值。
    • 关于“线性化结构模型”的局限性:作者没有引用任何讨论线性化DSGE模型局限性的文献(例如,关于零利率下限、非线性财政乘数、或状态依赖的货币政策传导的文献)。这暗示作者可能认为线性化是一个可接受的近似,或者他们有意将框架限定在线性世界。

张力

未见明显对立引用。被引工作(Sims, CEE, Jordà, Plagborg-Møller & Wolf)之间是互补或演进关系,而非对立。Lucas (1976) 的批判是共识性的挑战,而非与某个具体方法对立。

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

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

  • 符号

    • \(y_t\)\(n_y \times 1\) 向量,表示t期的内生变量(如GDP、通胀、利率)。这是研究者关心的经济状态。
    • \(\varepsilon_t\)\(n_\varepsilon \times 1\) 向量,表示t期的结构性冲击(如货币政策冲击、技术冲击、需求冲击)。这些是外生的、不可观测的随机扰动。
    • \(p_t\)\(n_p \times 1\) 向量,表示t期的政策工具(如短期利率)。它是\(y_t\)的一个子集或线性组合。
    • \(\theta\):一个政策规则参数。例如,泰勒规则 \(p_t = \phi \pi_t + \text{其他项}\) 中的 \(\phi\)。本文的核心是研究当\(\theta\)改变时,\(y_t\)的动态如何变化。
    • \(\Psi_h\)\(n_y \times n_\varepsilon\) 矩阵,表示脉冲响应函数。具体地,\((\Psi_h)_{i,j}\) 是第j个结构性冲击在t期发生一个单位变化后,对第i个内生变量在t+h期的影响。这是实证因果估计的目标。
    • \(\{A_j\}_{j=0}^\infty\)\(n_y \times n_y\) 矩阵序列,表示结构模型的移动平均(MA)表示。它描述了所有内生变量对过去所有冲击的响应。这是理论模型的核心对象。
  • 模型

    • 作者假设经济可以用一个线性化结构模型来描述。其移动平均(MA)表示为:
      \[y_t = \sum_{j=0}^\infty A_j \varepsilon_{t-j}\]
      其中,\(\varepsilon_t\) 是均值为0、协方差矩阵为单位阵(或已知对角阵)的独立同分布冲击。这个MA表示是结构性的,意味着\(A_j\)中的元素反映了经济结构(偏好、技术、制度)的深层参数。
    • 政策规则被嵌入到这个MA表示中。具体地,政策工具\(p_t\)的演化由政策规则决定,而该规则本身是结构的一部分。当政策规则改变时,MA表示\(\{A_j\}\)也会改变。
  • 可观测数据

    • 研究者实际能观测到的是内生变量\(y_t\)的时间序列(如季度GDP、CPI、联邦基金利率)。
    • 研究者想要但观测不到的是:
      1. 结构性冲击 \(\varepsilon_t\):我们只能看到\(y_t\),无法直接看到是哪个冲击导致了它的变化。
      2. 结构MA表示 \(\{A_j\}\):这是理论模型的核心,但无法直接从数据中唯一地识别出来。
    • 研究者通过假设可以识别的是:
      1. 现行政策规则下的脉冲响应 \(\Psi_h\):通过SVAR或局部投影,并施加识别假设(如递归排序),研究者可以估计出在当前政策规则下,一个外生的政策冲击(如\(\varepsilon_t\)中对应于货币政策的分量)对\(y_t\)的动态影响。这是本文的关键输入

第二步:讲最小内核

本文的核心思路可以用一个一维、两期的最简例子来理解。

最简特例: * 设定:只有一个内生变量 \(y_t\)(例如,产出缺口),一个政策工具 \(p_t = y_t\)(即政策工具就是产出缺口本身,这简化了问题),一个结构性冲击 \(\varepsilon_t\)(例如,总需求冲击)。 * 现行政策规则\(p_t = \theta_0 y_t\),其中 \(\theta_0\) 是已知的现行规则参数。例如,\(\theta_0 = 0\) 表示政策不响应产出缺口。 * 替代政策规则:我们想评估如果采用新规则 \(p_t = \theta_1 y_t\),经济会如何。 * 结构模型:假设经济由以下两个方程描述(这是线性化结构模型的简化): 1. IS曲线(需求侧):\(y_t = -\alpha (p_t - \mathbb{E}_{t-1}[p_t]) + \varepsilon_t\)。产出缺口取决于未预期的政策变化(实际利率)和需求冲击。 2. 政策规则\(p_t = \theta y_t\)。 * 可观测数据:我们观测到在现行规则 \(\theta_0\) 下,\(y_t\)\(p_t\) 的时间序列。 * 实证可估计量:通过局部投影,我们可以估计出在现行规则下,一个外生的需求冲击 \(\varepsilon_t\)\(y_t\)同期影响。在这个简单模型中,这个影响就是 \(\frac{\partial y_t}{\partial \varepsilon_t} = \frac{1}{1 + \alpha \theta_0}\)。我们称这个可估计量为 \(\Psi_0\)

核心思路: 1. 问题:我们想知道在新规则 \(\theta_1\) 下,同样的需求冲击 \(\varepsilon_t\) 会对 \(y_t\) 产生什么影响?即 \(\Psi_1 = \frac{1}{1 + \alpha \theta_1}\)。 2. 关键观察\(\Psi_0\)\(\Psi_1\) 都依赖于同一个结构参数 \(\alpha\)(IS曲线的斜率)。如果我们能从 \(\Psi_0\) 中“解出” \(\alpha\),那么我们就可以计算出 \(\Psi_1\)。 3. 如何解出 \(\alpha\)\(\Psi_0 = \frac{1}{1 + \alpha \theta_0}\) 可得 \(\alpha = \frac{1/\Psi_0 - 1}{\theta_0}\)。 4. 构造反事实:将 \(\alpha\) 代入 \(\Psi_1\) 的表达式,得到:

\[\Psi_1 = \frac{1}{1 + \left(\frac{1/\Psi_0 - 1}{\theta_0}\right) \theta_1} = \frac{\Psi_0}{1 + \theta_1 (1/\Psi_0 - 1)/\theta_0}\]
这个表达式完全由可估计量 \(\Psi_0\) 和已知的规则参数 \(\theta_0, \theta_1\) 决定,不需要知道 \(\alpha\) 本身。

这个例子说明了什么? * 最小内核:本文的核心思想是,现行政策规则下的冲击传导(\(\Psi_0\))包含了关于结构参数(\(\alpha\))的信息。通过利用政策规则的变化(从 \(\theta_0\)\(\theta_1\))和线性结构,我们可以将这些信息“映射”到新规则下的传导(\(\Psi_1\))。 * 对卢卡斯批判的稳健性:在这个例子中,\(\alpha\) 是结构参数,不随政策规则改变。因此,基于 \(\alpha\) 计算出的 \(\Psi_1\) 自然对卢卡斯批判是稳健的。作者的一般化框架正是将这个思想推广到多变量、多期、多冲击的情形。 * 论文的一般情形:论文的一般情形就是把这个一维、两期、单冲击的例子,推广到多维内生变量、无限期、多冲击的线性化结构模型。其核心数学困难在于:如何从可估计的脉冲响应矩阵 \(\Psi_h\) 中,唯一地恢复出结构MA表示 \(\{A_j\}\) 中与政策规则变化相关的部分。这需要额外的识别条件(如“新闻冲击”的识别),以确保解的唯一性。

三、这篇论文做了什么

三句话

  1. 研究了什么问题:在一般线性化结构宏观经济模型中,如何利用时间序列回归(如局部投影、SVAR)估计的、现行政策规则下的冲击因果效应(脉冲响应),来构造替代政策规则下的反事实动态,并评估最优政策。
  2. 核心工具/方法:提出了一个半参数识别框架,该框架将实证可估计的“同期冲击”和“新闻冲击”的脉冲响应,通过一个映射函数(依赖于新旧政策规则的差异)转化为新规则下的反事实脉冲响应。该映射函数由模型的线性结构决定,且对卢卡斯批判具有稳健性。
  3. 主要结论:在模型线性、冲击可加、且能识别出“新闻冲击”(即对未来政策路径的预期冲击)的条件下,仅凭现行规则下的脉冲响应就足以唯一地确定替代规则下的反事实动态。如果研究者指定损失函数,该方法还能恢复最优政策规则。

关键设定与假设

  • 设定:经济由线性化结构模型描述,其MA表示为 \(y_t = \sum_{j=0}^\infty A_j \varepsilon_{t-j}\)。政策规则是线性的,且嵌入在MA表示中。政策规则的变化被参数化为一个已知的“规则差异”函数。
  • 关键假设
    1. 线性与可加性:模型是线性的,冲击是加性的。这是整个框架的基石,排除了非线性、状态依赖或阈值效应。
    2. 结构冲击可识别:研究者能够通过SVAR或局部投影,并施加标准识别假设(如递归排序),识别出现行政策规则下的“同期冲击”和“新闻冲击”的脉冲响应。“新闻冲击” 是本文的一个关键概念,它指的是关于未来政策路径的预期变化(例如,央行宣布未来将加息)。作者认为,要唯一地确定反事实,必须同时识别出这两种冲击的传导。
    3. 政策规则变化已知:研究者知道现行政策规则的具体形式(参数),并且知道要评估的替代政策规则的具体形式。这个假设在应用中可能很强,因为政策规则往往不是公开宣布的,或者其形式是未知的。
    4. 结构参数不变性:模型的“深层”结构参数(如IS曲线斜率、菲利普斯曲线斜率)不随政策规则改变。这是卢卡斯批判的“反面”,也是反事实对卢卡斯批判稳健的前提。
  • 相比已有文献的强化/放宽
    • 强化:相比DSGE模型,本文不需要完全指定所有结构方程,只需要知道冲击的传导。这大大降低了参数化程度。
    • 放宽:相比纯粹的实证SVAR/局部投影,本文增加了对“新闻冲击”的识别要求,并假设了线性结构。纯粹的实证工作通常只关注“同期冲击”的传导。

主要结果

  • 定理1(反事实脉冲响应):在给定假设下,替代政策规则下的脉冲响应 \(\Psi_h^{new}\) 是现行规则下脉冲响应 \(\Psi_h^{old}\) 和规则差异 \(\Delta \theta\) 的一个已知函数。该函数是线性的,且可以显式写出。这意味着,一旦估计出 \(\Psi_h^{old}\),就可以直接计算出 \(\Psi_h^{new}\),无需任何额外的结构估计。

    • 直觉:这个定理是第二节最小内核例子的多维、多期推广。它表明,政策规则变化对冲击传导的影响,完全可以通过一个“重新加权”或“重新组合”的线性操作来刻画,而这个操作的权重由规则差异决定。
    • 必要条件:必须同时识别出“同期冲击”和“新闻冲击”的脉冲响应。如果只能识别前者,则反事实不唯一。
    • 解决的技术难点:如何从可观测的脉冲响应中,分离出“新闻冲击”的贡献?作者通过假设“新闻冲击”在冲击发生当期不影响内生变量(即一个排除约束)来解决这个问题,这与SVAR中的标准识别策略类似。
  • 定理2(最优政策规则):如果研究者指定一个关于内生变量(如产出缺口、通胀)的二次损失函数,那么最优政策规则可以通过求解一个凸优化问题得到,该问题的目标函数和约束条件都只依赖于可估计的脉冲响应。

    • 直觉:最优政策规则本质上是在“最小化损失函数的期望”,而损失函数的期望可以写成脉冲响应的二次型。由于脉冲响应是规则参数的函数(由定理1给出),因此最优规则问题就变成了一个关于规则参数的优化问题。
    • 必要条件:损失函数必须是二次的,且政策规则是线性的。这保证了优化问题的凸性,从而有唯一解。

证明路线与技术技巧

  • 整体路线

    1. 步骤一:建立结构MA表示与脉冲响应的关系。首先,将结构模型的MA表示 \(y_t = \sum_{j=0}^\infty A_j \varepsilon_{t-j}\) 与实证可估计的脉冲响应 \(\Psi_h\) 联系起来。证明在现行规则下,\(\Psi_h\)\(A_j\) 的某个线性组合。
    2. 步骤二:引入“新闻冲击”。证明仅凭“同期冲击”的脉冲响应不足以唯一确定 \(A_j\)。引入“新闻冲击”的脉冲响应作为额外的信息,以消除这种不确定性。这相当于在 \(A_j\) 上施加了额外的约束。
    3. 步骤三:推导反事实映射。假设政策规则从 \(\theta_0\) 变为 \(\theta_1\)。利用线性结构,推导出新的MA表示 \(\{A_j^{new}\}\) 与旧的MA表示 \(\{A_j^{old}\}\) 之间的关系。这个关系是线性的,且只依赖于规则差异 \(\Delta \theta\)
    4. 步骤四:从旧脉冲响应到新脉冲响应。将步骤三的关系代入步骤一的公式,得到新规则下的脉冲响应 \(\Psi_h^{new}\) 关于旧规则下脉冲响应 \(\Psi_h^{old}\) 和规则差异 \(\Delta \theta\) 的显式表达式。这就是定理1。
    5. 步骤五:最优政策。将损失函数表示为脉冲响应的二次型,然后代入定理1的结果,将最优政策问题转化为一个关于 \(\theta\) 的凸优化问题。这就是定理2。
  • 关键跳跃点

    • 从“同期冲击”到“新闻冲击”:这是证明中最关键的一步。作者需要论证,为什么“新闻冲击”的识别是必要的,以及如何在实际中识别它。他们通过一个排除约束(新闻冲击在当期不影响某些变量)来实现识别,这与标准SVAR的短期约束类似。这个跳跃点在于,它要求实证研究者不仅要估计标准冲击的传导,还要估计一个额外的、关于预期的冲击的传导。
    • 从“旧MA表示”到“新MA表示”的线性映射:证明的核心是推导出这个映射。作者利用线性模型的“叠加原理”和“预期行为”的线性性质,将政策规则变化的影响分解为对“同期冲击”和“新闻冲击”传导的重新加权。这个推导过程需要仔细处理预期形成的机制,但最终结果是一个简洁的线性变换。
  • 技术技巧点名

    • 线性代数与矩阵运算:整个证明框架是线性的,大量使用矩阵代数来操作脉冲响应和MA表示。这是处理多变量、多期问题的标准工具。
    • 排除约束(短期约束):用于识别“新闻冲击”,这是SVAR文献中的标准技巧。
    • 凸优化:用于求解最优政策规则,将问题转化为一个标准的凸规划问题。

真实例子与应用

本文为纯理论论文,没有包含任何真实数据例子、模拟实验或实际应用。作者在文中讨论了如何将他们的框架应用于实际数据,但并未亲自执行。他们提到,应用的关键在于: 1. 估计现行规则下的脉冲响应:使用标准方法(如局部投影)估计“同期冲击”和“新闻冲击”的传导。 2. 指定替代政策规则:研究者需要明确地写出替代规则的形式(例如,一个不同的泰勒规则系数)。 3. 计算反事实:使用定理1的公式直接计算。

作者没有提供任何实证例子来验证其理论的有效性或展示其相对于传统DSGE方法的优势。这使得论文的贡献完全停留在理论层面。

🔎 结论是否比证明窄

  • 结论:作者声称其反事实和最优政策对卢卡斯批判具有“稳健性”。
  • 证明的窄条件:这个“稳健性”是在线性化结构模型的假设下严格证明的。如果真实经济是非线性的,或者结构参数本身会随政策规则变化(这正是卢卡斯批判的核心),那么本文的结论就不再成立。作者在文中承认了这一点,但并未深入讨论其严重性。
  • 泛泛claim:作者在引言中可能给人一种印象,即他们的方法可以“绕过”卢卡斯批判。但实际上,他们的方法假设了卢卡斯批判不成立(即结构参数不变),然后利用这个假设来构造反事实。因此,更准确的表述是:在卢卡斯批判不成立(结构参数不变)的线性世界中,本文提供了一种利用实证脉冲响应来构造反事实的方法。这个结论比“对卢卡斯批判稳健”的表述要窄得多。

四、开放问题

  1. 非线性与状态依赖:本文的整个框架建立在线性冲击可加性的假设上。一个重要的开放问题是:如何将类似的思想推广到非线性或状态依赖的宏观经济模型?例如,在零利率下限附近,货币政策传导机制可能发生根本性变化,线性近似会失效。扎根点:作者在文中明确提到“Our analysis is limited to linearized models... Extending our results to nonlinear settings is an important direction for future work.”(原文中类似表述)。

  2. “新闻冲击”的识别:本文的核心识别条件是能够估计“新闻冲击”的脉冲响应。然而,在实际应用中,如何可靠地识别出关于未来政策路径的预期冲击是一个巨大的挑战。现有的识别策略(如排除约束)可能非常脆弱。扎根点:作者在讨论应用策略时提到“...the researcher must be able to identify the causal effects of both contemporaneous and news shocks... This may be difficult in practice.”(原文中类似表述)。

  3. 政策规则未知:本文假设研究者知道现行和替代政策规则的具体形式。但在现实中,央行的政策规则往往是未知的、随时间变化的,或者包含未观测到的成分。一个开放问题是:当政策规则本身是未知的或部分未知时,如何应用本文的框架?扎根点:作者在结论部分提到“A limitation of our approach is that it requires the researcher to specify the policy rule... In many applications, the policy rule is not known with certainty.”(原文中类似表述)。

  4. 有限信息下的反事实:本文的核心结果依赖于能够识别所有相关冲击的传导。但在实践中,实证因果证据往往是有限的(例如,只能识别一个或两个冲击)。作者讨论了在这种情况下如何“借用”结构模型的信息,但并未提供一个完整的理论。一个开放问题是:在有限信息下,如何对反事实进行部分识别(即给出一个识别区间,而非点估计)?扎根点:作者在文中专门有一节讨论“Strategies for Applying These Insights When Only a Limited Amount of Empirical Causal Evidence is Available”,但该节主要是启发式的,缺乏严格的识别理论。


Maintained by 陈星宇 · Homepage · Source on GitHub

评论