diff --git a/.translate/state/blackwell_kihlstrom.md.yml b/.translate/state/blackwell_kihlstrom.md.yml index 38cc121f..28a45fdf 100644 --- a/.translate/state/blackwell_kihlstrom.md.yml +++ b/.translate/state/blackwell_kihlstrom.md.yml @@ -1,6 +1,6 @@ -source-sha: fea6b58cd64d8502f8e09821f63ae7a6f890cc44 -synced-at: "2026-07-21" -model: claude-opus-4-8 -mode: NEW +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" +model: claude-sonnet-5 +mode: UPDATE section-count: 13 -tool-version: 0.20.0 +tool-version: 0.30.0 diff --git a/.translate/state/divergence_measures.md.yml b/.translate/state/divergence_measures.md.yml index f15fa4fd..cbf01039 100644 --- a/.translate/state/divergence_measures.md.yml +++ b/.translate/state/divergence_measures.md.yml @@ -1,6 +1,6 @@ -source-sha: 18666c046942325003724125fae0cae91d8be7e7 -synced-at: "2025-09-12" -model: unknown -mode: RESYNC -section-count: 9 -tool-version: 0.20.0 +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" +model: claude-sonnet-5 +mode: UPDATE +section-count: 10 +tool-version: 0.30.0 diff --git a/.translate/state/exchangeable.md.yml b/.translate/state/exchangeable.md.yml index 11209f58..cbf01039 100644 --- a/.translate/state/exchangeable.md.yml +++ b/.translate/state/exchangeable.md.yml @@ -1,6 +1,6 @@ -source-sha: 7e4c793ff2aec5aa1a73deac1c44b0d0f543fda9 -synced-at: "2026-08-03" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 mode: UPDATE -section-count: 9 -tool-version: 0.24.0 +section-count: 10 +tool-version: 0.30.0 diff --git a/.translate/state/gallant_tauchen.md.yml b/.translate/state/gallant_tauchen.md.yml index 6912f82a..fa2ba8ca 100644 --- a/.translate/state/gallant_tauchen.md.yml +++ b/.translate/state/gallant_tauchen.md.yml @@ -1,6 +1,6 @@ -source-sha: 648d138bb6db2f07f242197a5efe95556fb30ab6 -synced-at: "2026-10-21" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 -mode: NEW +mode: UPDATE section-count: 15 -tool-version: 0.29.6 +tool-version: 0.30.0 diff --git a/.translate/state/imp_sample.md.yml b/.translate/state/imp_sample.md.yml index 9d97f833..a826292c 100644 --- a/.translate/state/imp_sample.md.yml +++ b/.translate/state/imp_sample.md.yml @@ -1,6 +1,6 @@ -source-sha: caf3ddca8b4308f2db50a7a6bda46625012d0b2f -synced-at: "2026-08-02" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 mode: UPDATE section-count: 7 -tool-version: 0.24.0 +tool-version: 0.30.0 diff --git a/.translate/state/information_market_equilibrium.md.yml b/.translate/state/information_market_equilibrium.md.yml index 1d84b5bc..a826292c 100644 --- a/.translate/state/information_market_equilibrium.md.yml +++ b/.translate/state/information_market_equilibrium.md.yml @@ -1,6 +1,6 @@ -source-sha: 78030a3a27f6527046675bcd8a8d27995ca25af6 -synced-at: "2026-07-21" -model: claude-opus-4-8 -mode: NEW +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" +model: claude-sonnet-5 +mode: UPDATE section-count: 7 -tool-version: 0.20.0 +tool-version: 0.30.0 diff --git a/.translate/state/likelihood_bayes.md.yml b/.translate/state/likelihood_bayes.md.yml index 96be5cd3..9077dc20 100644 --- a/.translate/state/likelihood_bayes.md.yml +++ b/.translate/state/likelihood_bayes.md.yml @@ -1,6 +1,6 @@ -source-sha: 06c784f5e5939bd1379adeb2289488d84dfa7c8d -synced-at: "2026-10-22" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 mode: UPDATE -section-count: 8 -tool-version: 0.26.0 +section-count: 9 +tool-version: 0.30.0 diff --git a/.translate/state/likelihood_ratio_process.md.yml b/.translate/state/likelihood_ratio_process.md.yml index d4e67bf2..cbf01039 100644 --- a/.translate/state/likelihood_ratio_process.md.yml +++ b/.translate/state/likelihood_ratio_process.md.yml @@ -1,6 +1,6 @@ -source-sha: 07975d502f57b29b4aa331a71c0afa6809dee369 -synced-at: "2026-08-18" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 mode: UPDATE section-count: 10 -tool-version: 0.26.0 +tool-version: 0.30.0 diff --git a/.translate/state/likelihood_var.md.yml b/.translate/state/likelihood_var.md.yml index d5273cee..d00e1201 100644 --- a/.translate/state/likelihood_var.md.yml +++ b/.translate/state/likelihood_var.md.yml @@ -1,6 +1,6 @@ -source-sha: aff1ee4613dfc79e79a578069473a5765fddc716 -synced-at: "2026-07-31" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 mode: UPDATE -section-count: 6 -tool-version: 0.24.0 +section-count: 8 +tool-version: 0.30.0 diff --git a/.translate/state/market_diffusion.md.yml b/.translate/state/market_diffusion.md.yml index d8e60d84..cbf01039 100644 --- a/.translate/state/market_diffusion.md.yml +++ b/.translate/state/market_diffusion.md.yml @@ -1,6 +1,6 @@ -source-sha: e46fa7fc93bcdee2ed317811cf72e1645259dd4f -synced-at: "2026-08-07" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 -mode: NEW +mode: UPDATE section-count: 10 -tool-version: 0.25.0 +tool-version: 0.30.0 diff --git a/.translate/state/merging_of_opinions.md.yml b/.translate/state/merging_of_opinions.md.yml index 0520e809..e00913b9 100644 --- a/.translate/state/merging_of_opinions.md.yml +++ b/.translate/state/merging_of_opinions.md.yml @@ -1,6 +1,6 @@ -source-sha: a8966965b2649d470ea144150ca5fd5d520b5345 -synced-at: "2026-07-21" -model: claude-opus-4-8 -mode: NEW -section-count: 11 -tool-version: 0.20.0 +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" +model: claude-sonnet-5 +mode: UPDATE +section-count: 12 +tool-version: 0.30.0 diff --git a/.translate/state/navy_captain.md.yml b/.translate/state/navy_captain.md.yml index eeb718ad..cbf01039 100644 --- a/.translate/state/navy_captain.md.yml +++ b/.translate/state/navy_captain.md.yml @@ -1,6 +1,6 @@ -source-sha: 36bc72ea8fe852f84c63534cd0530c549c43c5cc -synced-at: "2026-07-18" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 -mode: RESYNC -section-count: 9 -tool-version: 0.17.0 +mode: UPDATE +section-count: 10 +tool-version: 0.30.0 diff --git a/.translate/state/pricing_information.md.yml b/.translate/state/pricing_information.md.yml index bbc0670c..9077dc20 100644 --- a/.translate/state/pricing_information.md.yml +++ b/.translate/state/pricing_information.md.yml @@ -1,6 +1,6 @@ -source-sha: e46fa7fc93bcdee2ed317811cf72e1645259dd4f -synced-at: "2026-08-07" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 -mode: NEW +mode: UPDATE section-count: 9 -tool-version: 0.25.0 +tool-version: 0.30.0 diff --git a/.translate/state/survival_recursive_preferences.md.yml b/.translate/state/survival_recursive_preferences.md.yml index 144cda02..4f9a2758 100644 --- a/.translate/state/survival_recursive_preferences.md.yml +++ b/.translate/state/survival_recursive_preferences.md.yml @@ -1,6 +1,6 @@ -source-sha: 78030a3a27f6527046675bcd8a8d27995ca25af6 -synced-at: "2026-07-21" -model: claude-opus-4-8 -mode: NEW +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" +model: claude-sonnet-5 +mode: UPDATE section-count: 14 -tool-version: 0.20.0 +tool-version: 0.30.0 diff --git a/.translate/state/wald_friedman.md.yml b/.translate/state/wald_friedman.md.yml index 2318d318..d00e1201 100644 --- a/.translate/state/wald_friedman.md.yml +++ b/.translate/state/wald_friedman.md.yml @@ -1,6 +1,6 @@ -source-sha: 709deec8b557a08f2f7b297215bb8473c8f207ff -synced-at: "2026-07-18" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 -mode: RESYNC +mode: UPDATE section-count: 8 -tool-version: 0.17.0 +tool-version: 0.30.0 diff --git a/.translate/state/wald_friedman_2.md.yml b/.translate/state/wald_friedman_2.md.yml index 104d983f..7fcdd4ef 100644 --- a/.translate/state/wald_friedman_2.md.yml +++ b/.translate/state/wald_friedman_2.md.yml @@ -1,6 +1,6 @@ -source-sha: b27f1eb0ae52b5e20807d516a3d2f54a586e75fa -synced-at: "2026-07-18" +source-sha: 1ba3a42af594a159de8e5d7538b9addc06f67138 +synced-at: "2026-11-01" model: claude-sonnet-5 -mode: RESYNC -section-count: 4 -tool-version: 0.17.0 +mode: UPDATE +section-count: 5 +tool-version: 0.30.0 diff --git a/lectures/_static/quant-econ.bib b/lectures/_static/quant-econ.bib index a77683af..d38d016b 100644 --- a/lectures/_static/quant-econ.bib +++ b/lectures/_static/quant-econ.bib @@ -5922,3 +5922,102 @@ @article{anderson1951 pages = {327--351}, year = {1951} } + +@article{strassen1965, + title = {The existence of probability measures with given marginals}, + author = {Strassen, Volker}, + journal = {Annals of Mathematical Statistics}, + volume = {36}, + number = {2}, + pages = {423--439}, + year = {1965} +} + +@incollection{radner_stiglitz1984, + author = {Radner, Roy and Stiglitz, Joseph E.}, + title = {A Nonconcavity in the Value of Information}, + booktitle = {Bayesian Models in Economic Theory}, + editor = {Boyer, Marcel and Kihlstrom, Richard E.}, + pages = {33--52}, + year = {1984}, + publisher = {North-Holland}, + address = {Amsterdam} +} + +@inproceedings{goodfellow2014, + author = {Goodfellow, Ian and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua}, + title = {Generative Adversarial Nets}, + booktitle = {Advances in Neural Information Processing Systems}, + volume = {27}, + pages = {2672--2680}, + year = {2014} +} + +@inproceedings{arjovsky2017, + author = {Arjovsky, Martin and Bottou, L{\'e}on}, + title = {Towards Principled Methods for Training Generative Adversarial Networks}, + booktitle = {International Conference on Learning Representations}, + year = {2017} +} + +@article{chernoff1952, + author = {Chernoff, Herman}, + title = {A Measure of Asymptotic Efficiency for Tests of a Hypothesis Based on the Sum of Observations}, + journal = {Annals of Mathematical Statistics}, + volume = {23}, + number = {4}, + pages = {493--507}, + year = {1952} +} + +@article{HewittSavage1955, + author = {Hewitt, Edwin and Savage, Leonard J.}, + title = {Symmetric Measures on {Cartesian} Products}, + journal = {Transactions of the American Mathematical Society}, + volume = {80}, + number = {2}, + pages = {470--501}, + year = {1955} +} + +@article{hill1975, + author = {Hill, Bruce M.}, + title = {A Simple General Approach to Inference About the Tail of a Distribution}, + journal = {Annals of Statistics}, + volume = {3}, + number = {5}, + pages = {1163--1174}, + year = {1975} +} + +@incollection{doob1949, + author = {Doob, Joseph L.}, + title = {Application of the Theory of Martingales}, + booktitle = {Le Calcul des Probabilit{\'e}s et ses Applications}, + series = {Colloques Internationaux du Centre National de la Recherche Scientifique}, + number = {13}, + pages = {23--27}, + publisher = {Centre National de la Recherche Scientifique}, + address = {Paris}, + year = {1949} +} + +@article{WaldWolfowitz1948, + author = {Wald, Abraham and Wolfowitz, Jacob}, + title = {Optimum Character of the Sequential Probability Ratio Test}, + journal = {Annals of Mathematical Statistics}, + volume = {19}, + number = {3}, + pages = {326--339}, + year = {1948} +} + +@article{ArrowBlackwellGirshick1949, + author = {Arrow, Kenneth J. and Blackwell, David and Girshick, M. A.}, + title = {Bayes and Minimax Solutions of Sequential Decision Problems}, + journal = {Econometrica}, + volume = {17}, + number = {3/4}, + pages = {213--244}, + year = {1949} +} diff --git a/lectures/blackwell_kihlstrom.md b/lectures/blackwell_kihlstrom.md index bfbbb344..b7e74493 100644 --- a/lectures/blackwell_kihlstrom.md +++ b/lectures/blackwell_kihlstrom.md @@ -24,15 +24,14 @@ translation: Kihlstrom's Bayesian interpretation: 基尔斯特罗姆的贝叶斯解释 Kihlstrom's Bayesian interpretation::Posteriors and standard experiments: 后验与标准实验 Kihlstrom's Bayesian interpretation::Mean-preserving spreads and Blackwell's order: 均值保持展开与布莱克韦尔序 + Kihlstrom's Bayesian interpretation::Convex order and second-order stochastic dominance: 凸序与二阶随机占优 Simulating the Blackwell order with many states: 用多状态模拟布莱克韦尔序 The DeGroot uncertainty function: 德格鲁特不确定性函数 The DeGroot uncertainty function::Concave uncertainty functions and the value of information: 凹不确定性函数与信息的价值 The DeGroot uncertainty function::Shannon entropy as a special case: 作为特例的香农熵 The DeGroot uncertainty function::Value of information as a function of experiment quality: 作为实验质量函数的信息价值 - Connection to second-order stochastic dominance: 与二阶随机占优的关系 - 'Application 1: product quality information': 应用 1:产品质量信息 + 'Application 1: demand for information about product quality': 应用1:对产品质量信息的需求 'Application 2: sequential experimental design': 应用 2:序贯实验设计 - Summary: 小结 The Data Processing Inequality and Coarse-Graining: 数据处理不等式与粗粒化 The Data Processing Inequality and Coarse-Graining::The DPI for f-divergences: f-散度的 DPI The Data Processing Inequality and Coarse-Graining::Connection to Blackwell's sufficiency condition: 与布莱克韦尔充分性条件的联系 @@ -41,6 +40,8 @@ translation: The Data Processing Inequality and Coarse-Graining::Summary of the DPI–Blackwell correspondence: DPI-布莱克韦尔对应的小结 Relation to Bayesian likelihood-ratio learning: 与贝叶斯似然比学习的关系 Relation to Bayesian likelihood-ratio learning::Summary table: 小结表 + Summary: 小结 + Exercises: 练习 --- (blackwell_kihlstrom)= @@ -97,14 +98,17 @@ translation: 在两状态情形下,这就变成了在 $[0, 1]$ 上的均值保持展开比较,可以用检验二阶随机占优的积分 CDF 检验来验证。 -本讲座的进行方式如下: +{doc}`information_market_equilibrium` 和 {doc}`pricing_information` 以本讲座的结果为基础。 + +本讲座的进行方式如下。 -1. 建立记号并将实验定义为马尔可夫矩阵。 -2. 用马尔可夫核定义随机变换。 -3. 陈述三个等价标准。 -4. 陈述主定理并勾勒其证明。 -5. 通过标准实验和均值保持展开建立贝叶斯解释。 -6. 用 Python 模拟来阐释每个概念。 +1. 我们将实验定义为马尔可夫矩阵,并将信息扭曲(garbling)定义为随机变换。 +2. 我们陈述对实验进行排序的三个等价标准以及布莱克韦尔定理。 +3. 我们通过标准实验、均值保持展开和凸序,发展基尔斯特罗姆的贝叶斯解释。 +4. 我们研究德格鲁特的不确定性函数及其两个应用。 +5. 我们将布莱克韦尔序与数据处理不等式以及 {doc}`likelihood_bayes` 中的似然比学习联系起来。 + +Python 模拟将阐释每一个步骤。 我们先进行一些导入。 @@ -120,6 +124,7 @@ mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n ## 实验与随机变换 + ### 状态空间与实验 设 $S = \{s_1, \ldots, s_N\}$ 为世界可能状态的有限集合。 @@ -173,11 +178,15 @@ $$ $$ 则称实验 $\mu$ *对* $\nu$ *充分*,这意味着一个观测到 $\tilde{x}_\mu$ 的观察者可以通过将其信号传递给 $Q$ 来生成 $\tilde{x}_\nu$ 的分布。 + +对于一般的信号空间, $Q$ 是一个马尔可夫核,此时该条件可写为:对 $\nu$ 的信号空间中的每个可测集合 $E$ 以及每个状态 $s_i$ ,都有 $\nu_i(E) = \int Q(x, E) \, \mu_i(dx)$ 。 ``` +当 $\mu$ 对 $\nu$ 充分时,我们记作 $\mu \geq \nu$ ,并称 $\nu$ 为 $\mu$ 的 **粗化**(garbling)。 + 如果你观测到更具信息量的信号 $\tilde{x}_\mu$ ,那么你总是可以 *丢弃* 信息来重现一个信息量较少的信号。 -反过来则不可能:一个信息量较少的信号无法被丰富到恢复出所丢失的信息。 +反过来通常行不通:粗化无法恢复其所舍弃的信息。 我们可以用上面定义的两个实验 $\mu$ 和 $\nu$ 来进行数值验证。 @@ -238,11 +247,9 @@ print(f" 存在精确变换:{res_rev < 1e-6}") 反向残差很大:没有任何随机变换能从 $\nu$ 恢复出 $\mu$ 。 -没有任何随机变换能够撤销这种信息损失。 - -关键在于,随机变换的逆一般来说并不是一个随机变换。 +{ref}`bk_ex1` 证明了不存在能将 $\nu$ 映射到 $\mu$ 的随机变换。 -事实上,唯一其逆也是随机变换的随机变换是置换矩阵,它仅仅重新标记信号而不损失任何信息。 +粗化只能将后验信念拉向先验,而 $\mu$ 所生成的后验比 $\nu$ 所能达到的后验离先验更远。 ## 三个等价标准 @@ -252,9 +259,11 @@ print(f" 存在精确变换:{res_rev < 1e-6}") 第一个标准通过实验对决策者的价值来比较实验。 -设 $A$ 为一个紧凸的行动集合, $u: A \times S \to \mathbb{R}$ 为一个有界效用函数。 +设 $A$ 为一个紧的行动集合, $u: A \times S \to \mathbb{R}$ 为一个有界连续效用函数。 + +决策者观测到 $x \in X$ ,然后选择一个行动,该行动可能是随机的。 -决策者观测到 $x \in X$ ,通过贝叶斯规则更新对 $\tilde{s}$ 的信念,并选择 $d(x) \in A$ 以最大化期望效用。 +**决策规则** $\delta$ 为每个信号 $x$ 指定一个行动上的概率分布 $\delta(\cdot \mid x)$ 。 设 $p = (p_1, \ldots, p_N)$ 为状态上的先验,并记 @@ -268,14 +277,20 @@ $$ $$ B(\mu, A, u) = \Bigl\{v \in \mathbb{R}^N : - v_i = \textstyle\int_X u(f(x), s_i)\,\mu_i(dx) - \text{ for some measurable } f: X \to A \Bigr\}. + v_i = \textstyle\int_X \int_A u(a, s_i)\, \delta(da \mid x)\,\mu_i(dx) + \text{ for some decision rule } \delta \Bigr\}. $$ +每个 $v \in B(\mu, A, u)$ 都列出了某个决策规则在每个状态下所能带来的期望效用。 + +随机化规则使得 $B(\mu, A, u)$ 是凸集。 + +它们也使得下面的复制论证变得精确:一个看到 $\tilde{x}_\mu$ 的决策者可以生成一个合成的 $\tilde{x}_\nu$ ,然后遵循为 $\nu$ 设计的任何规则。 + ```{prf:definition} 经济学标准 :label: def-economic-criterion -如果对每个紧凸行动集 $A$ 和每个有界效用函数 $u: A \times S \to \mathbb{R}$ 都有 +如果对每个紧行动集 $A$ 和每个有界连续效用函数 $u: A \times S \to \mathbb{R}$ 都有 $$ B(\mu, A, u) \supseteq B(\nu, A, u) @@ -292,26 +307,15 @@ $$ 因此 $B(\mu, A, u) \supseteq B(\nu, A, u)$ 意味着 $\mu$ 给决策者提供的可行期望效用结果至少与 $\nu$ 一样多。 -等价地,对每个先验 $p \in P$ ,每个贝叶斯决策者用 $\tilde{x}_\mu$ 都能获得弱高于用 $\tilde{x}_\nu$ 的期望效用。 +下面的布莱克韦尔定理意味着一个等价的价值比较。 -### 标准 2:充分性标准 - -第二个标准使用了上面引入的随机变换思想。 - -```{prf:definition} 布莱克韦尔充分性 -:label: def-blackwell-sufficiency +对每个先验 $p \in P$ 、每个 $A$ 和每个 $u$ ,在 $\mu$ 下最大化的期望效用 $\max_{v \in B(\mu, A, u)} \sum_i p_i v_i$ 至少与在 $\nu$ 下一样大。 -如果存在一个从 $\mu$ 的信号空间到 $\nu$ 的信号空间的随机变换 $Q$ ,使得 - -$$ -\nu_i(E) = (Q \circ \mu_i)(E) -\quad \forall\, E \in \mathscr{G},\; i = 1, \ldots, N. -$$ +贝叶斯决策者通过一个确定性规则(该规则在每个后验下都选择最优行动)来达到该最大值;随机化只在集合的比较中起作用。 -则称 $\mu \geq \nu$ 在布莱克韦尔意义下成立。 -``` +### 标准 2:充分性标准 -对有限实验,用矩阵记号表示: $\nu = \mu \, Q$ 。 +第二个标准就是 {prf:ref}`def-sufficiency` 中的充分性关系:如果存在某个随机变换 $Q$ 使得 $\nu = \mu Q$ ,则 $\mu \geq \nu$ 。 ### 标准 3:不确定性标准 @@ -339,18 +343,20 @@ $$ 其中 $\hat\mu^p$ 是实验 $\mu$ 在先验 $p$ 下诱导的后验信念分布,则称 $\mu$ **至少与** $\nu$ **一样地降低了期望不确定性**。 ``` -为看清这一点,设 $Q = p^\mu(X)$ 表示由实验 $\mu$ 诱导的随机后验。 +任何实验都会弱地降低期望不确定性。 + +为看清这一点,设 $\tilde{\pi} = p^\mu(\tilde{x}_\mu)$ 表示由实验 $\mu$ 诱导的随机后验。 -那么 $Q$ 服从分布 $\hat\mu^p$ ,因此 +那么 $\tilde{\pi}$ 服从分布 $\hat\mu^p$ ,因此 $$ -\mathbb{E}[U(Q)] = \int_P U(q)\,\hat\mu^p(dq). +\mathbb{E}[U(\tilde{\pi})] = \int_P U(q)\,\hat\mu^p(dq). $$ -由于 $U$ 是凹的,詹森不等式给出 +后验的均值为 $p$ (见下面的 {prf:ref}`prop-mean-preservation`),因此詹森不等式给出 $$ -\mathbb{E}[U(Q)] \leq U(\mathbb{E}[Q]) = U(p). +\mathbb{E}[U(\tilde{\pi})] \leq U(\mathbb{E}[\tilde{\pi}]) = U(p). $$ 因此 @@ -361,7 +367,11 @@ $$ 所以任何实验都会弱地降低期望不确定性。 -基尔斯特罗姆的标准实验构造稍后会让我们在均匀先验 $c = (1 / N, \ldots, 1 / N)$ 下比较后验分布。 +标准 3 对每个先验 $p$ 都进行了量化。 + +布莱克韦尔定理表明,一个具有全支撑的先验就足够了:如果该不等式在某一个这样的先验下对每个凹函数 $U$ 都成立,那么它在每个先验下都成立。 + +下面基尔斯特罗姆的构造正是利用了这一事实,使用一个固定的先验 $c$ ,通常取均匀先验 $(1/N, \ldots, 1/N)$ 。 ## 主定理 @@ -370,11 +380,11 @@ $$ 以下三个条件等价: -(i) 经济学标准:对每个紧凸 $A$ 和每个有界效用函数 $u$ 都有 $B(\mu, A, u) \supseteq B(\nu, A, u)$ 。 +(i) 经济学标准:对每个紧集 $A$ 和每个有界连续效用函数 $u$ 都有 $B(\mu, A, u) \supseteq B(\nu, A, u)$ 。 -(ii) 充分性标准:存在一个从 $\mu$ 的信号空间到 $\nu$ 的信号空间的随机变换 $Q$ ,使得 $\nu = Q \circ \mu$ 。 +(ii) 充分性标准:存在一个从 $\mu$ 的信号空间到 $\nu$ 的信号空间的随机变换 $Q$ ,使得 $\nu = \mu Q$ 。 -(iii) 不确定性标准:对每个先验 $p \in P$ 和每个凹函数 $U$ 都有 $\int_P U(q)\,\hat\mu^p(dq) \leq \int_P U(q)\,\hat\nu^p(dq)$ 。 +(iii) 不确定性标准:对每个凹函数 $U$ ,在每个先验 $p \in P$ 处,或者等价地在一个具有完全支持的先验处,都有 $\int_P U(q)\,\hat\mu^p(dq) \leq \int_P U(q)\,\hat\nu^p(dq)$ 。 ``` 另见 {cite:t}`blackwell1951` 、 {cite:t}`bonnenblust1949` 和 {cite:t}`degroot1962` 。 @@ -383,7 +393,7 @@ $$ *概要(ii $\Rightarrow$ i):* 如果 $\nu = \mu Q$ ,那么任何基于 $\tilde{x}_\nu$ 的决策规则都可以通过如下方式复现:先观测 $\tilde{x}_\mu$ ,再从 $Q$ 中抽取一个合成的 $\tilde{x}_\nu$ ,然后应用同样的规则。 -*概要(i $\Rightarrow$ ii):* 由于对每个 $A$ 和 $u$ 都有 $B(\mu, A, u) \supseteq B(\nu, A, u)$ ,一个分离超平面(对偶)论证意味着存在一个后验空间中的均值保持核 $D$ ,将 $\nu$ 的标准实验送入 $\mu$ 的标准实验。再从这些后验律回到原始信号空间就得到所需的混淆 $Q$ ,满足 $\nu = \mu Q$ 。因此 $D$ 是后验信念上的中间随机化,而非字面意义上的信号空间核 $Q$ 。 +*概要(i $\Rightarrow$ ii):* 由于对每个 $A$ 和 $u$ 都有 $B(\mu, A, u) \supseteq B(\nu, A, u)$ ,一个分离超平面(对偶)论证意味着 $\mu$ 的后验分布是 $\nu$ 的后验分布的均值保持展开,而斯特拉森定理 {cite}`strassen1965` 随后给出一个后验空间中的均值保持核 $D$ ,将 $\nu$ 的标准实验送入 $\mu$ 的标准实验。再从这些后验律回到原始信号空间就得到所需的混淆 $Q$ ,满足 $\nu = \mu Q$ 。因此 $D$ 是后验信念上的中间随机化,而非字面意义上的信号空间核 $Q$ 。 *概要(ii $\Rightarrow$ iii):* 在混淆之下,较粗实验的后验是较细实验后验的条件期望,因此詹森不等式对每个凹函数 $U$ 都给出该结果。 @@ -391,6 +401,7 @@ $$ ## 基尔斯特罗姆的贝叶斯解释 + ### 后验与标准实验 基尔斯特罗姆分析中的关键对象是 *后验信念向量*。 @@ -448,6 +459,8 @@ $$ 等价地, $\hat\mu^c$ 在凸序意义下大于 $\hat\nu^c$ 。 +先验 $c$ 可以是任何具有完全支撑的先验;比较结果并不依赖于具体选择哪一个。 + 一个更好的实验会将后验信念推向离先验更远的地方,同时保持它们的均值不变。 为了具体地看到这一点,我们为两状态情形定义两个实验并计算它们的后验。 @@ -605,6 +618,105 @@ _ = check_mps_convex_functions(μ_info, ν_info, prior) 差值 $E[g_t(p^\mu)] - E[g_t(p^\nu)]$ 对每个阈值 $t$ 都是非负的,这证实了 $\hat\mu^c$ 是 $\hat\nu^c$ 的均值保持展开,因此在布莱克韦尔序中 $\mu \geq \nu$ 。 +### 凸序与二阶随机占优 + +如果对每个凹函数 $u$ 都有 $E[u(X)] \geq E[u(Y)]$ ,则称随机变量 $X$ 在 **凹序** 意义下占优于 $Y$ 。 + +取 $u(x) = x$ 与 $u(x) = -x$ 表明两者的均值必须相等。 + +$X$ 在凹序意义下占优于 $Y$ ,当且仅当 $Y$ 是 $X$ 的均值保持展开。 + +**二阶随机占优** 仅使用递增凹函数 $u$ ,并允许均值不同;当均值相等时,它与凹序一致。 + +由于不确定性函数是凹函数,条件 + +$$ +\mathbb{E}[U(p^\mu)] \leq \mathbb{E}[U(p^\nu)] \quad \text{对所有凹函数 } U +$$ + +表明 $\nu$ 下的后验在凹序意义下占优于 $\mu$ 下的后验,因此 $\hat\mu^c$ 在 $P$ 上的凸序意义下占优于 $\hat\nu^c$ 。 + +当 $N = 2$ 时,后验信念是 $[0, 1]$ 中的标量,此时比较可归结为经典的累积分布函数积分检验。 + +在均值相等的情况下, $\hat\mu^c$ 是 $\hat\nu^c$ 的均值保持展开,当且仅当对所有 $t \in [0,1]$ 都有 $\int_0^t F_\mu(s)\,ds \geq \int_0^t F_\nu(s)\,ds$ ,其中 $F_\mu$ 和 $F_\nu$ 分别是每个实验下状态 $s_1$ 上后验的累积分布函数。 + +两个后验分布的均值均等于先验,因此该检验适用。 + +我们对上面的两状态示例进行验证。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: 两状态情形下的累积分布函数积分检验 + name: fig-blackwell-integrated-cdf +--- +def cdf_data_1d(weights, values): + """对离散分布的支撑点排序并计算累积质量。""" + idx = np.argsort(values) + sorted_vals = values[idx] + sorted_wts = weights[idx] + cum_mass = np.cumsum(sorted_wts) + return sorted_vals, cum_mass + + +def plot_sosd_posteriors(μ_matrix, ν_matrix, prior): + """绘制状态 s1 上后验分布的累积分布函数及其积分。""" + posts_μ, probs_μ = compute_posteriors(μ_matrix, prior) + posts_ν, probs_ν = compute_posteriors(ν_matrix, prior) + + p_μ = posts_μ[:, 0] + p_ν = posts_ν[:, 0] + + sv_μ, cm_μ = cdf_data_1d(probs_μ, p_μ) + sv_ν, cm_ν = cdf_data_1d(probs_ν, p_ν) + + fig, axes = plt.subplots(1, 2, figsize=(11, 4)) + + ax = axes[0] + for sv, cm, lbl, c in [(sv_μ, cm_μ, "μ", "steelblue"), + (sv_ν, cm_ν, "ν", "darkorange")]: + xs = np.concatenate([[0], sv, [1]]) + ys = np.concatenate([[0], cm, [1]]) + ax.step(xs, ys, where="post", label=lbl, color=c, linewidth=2) + ax.axvline(prior[0], linestyle="--", color="gray", alpha=0.6, linewidth=2, + label="先验") + ax.set_xlabel(r"后验 $p(s_1 \mid x)$", fontsize=12) + ax.set_ylabel("累积概率", fontsize=12) + ax.text(0.03, 0.94, "累积分布函数", transform=ax.transAxes, va="top") + ax.legend(fontsize=11) + + ax2 = axes[1] + grid = np.linspace(0, 1, 200) + + def integrated_cdf(sorted_vals, cum_mass, grid): + cdf = np.array([cum_mass[sorted_vals <= t].max() + if np.any(sorted_vals <= t) else 0.0 + for t in grid]) + return np.cumsum(cdf) * (grid[1] - grid[0]) + + int_μ = integrated_cdf(sv_μ, cm_μ, grid) + int_ν = integrated_cdf(sv_ν, cm_ν, grid) + + ax2.plot(grid, int_μ, label=r"$\int F_\mu$", color="steelblue", linewidth=2) + ax2.plot(grid, int_ν, color="darkorange", + label=r"$\int F_\nu$", linewidth=2) + ax2.fill_between(grid, int_ν, int_μ, + where=int_μ >= int_ν, + alpha=0.2, color="steelblue", + label=(r"$\int F_\mu \geq \int F_\nu$" + r"($\mu$ 是 $\nu$ 的均值保持展开)")) + ax2.set_xlabel(r"$t$", fontsize=12) + ax2.set_ylabel("累积分布函数的积分", fontsize=12) + ax2.text(0.03, 0.94, "累积分布函数的积分", transform=ax2.transAxes, va="top") + ax2.legend(fontsize=10) + + plt.tight_layout() + plt.show() + +plot_sosd_posteriors(μ_info, ν_info, prior) +``` + ## 用多状态模拟布莱克韦尔序 我们现在转到一个三状态的例子。 @@ -636,61 +748,41 @@ print(np.round(ν3, 3)) 对三个状态,后验信念存在于一个 2-单纯形中。 -让我们可视化在 $\mu$ 和 $\nu$ 下采样的后验点 +让我们绘制 $\mu$ 和 $\nu$ 下的后验原子,标记面积与概率成正比 ```{code-cell} ipython3 --- mystnb: figure: - caption: 2-单纯形上采样的后验点 + caption: 2-单纯形上的后验原子 name: fig-blackwell-simplex-clouds --- -def sample_posteriors(μ_matrix, prior, n_draws=3000, rng=None): - """ - 从实验中模拟 n_draws 个观测并计算 - 由此得到的后验信念。 - 返回形状为 (n_draws, N) 的数组。 - """ - if rng is None: - rng = np.random.default_rng() - N, M = μ_matrix.shape - states = rng.choice(N, size=n_draws, p=prior) - signals = np.array([rng.choice(M, p=μ_matrix[s]) for s in states]) - posteriors, _ = compute_posteriors(μ_matrix, prior) - return posteriors[signals] - - def simplex_to_cart(pts): - """将 3-单纯形重心坐标转换为二维笛卡尔坐标。""" + """将 2-单纯形上的重心坐标转换为二维笛卡尔坐标。""" corners = np.array([[0.0, 0.0], [1.0, 0.0], [0.5, np.sqrt(3)/2]]) return pts @ corners -def plot_simplex_posteriors(μ_matrix, ν_matrix, prior3, n_draws=3000, seed=0): - rng = np.random.default_rng(seed) - posts_μ = sample_posteriors(μ_matrix, prior3, n_draws, rng=rng) - posts_ν = sample_posteriors(ν_matrix, prior3, n_draws, rng=rng) - - cart_μ = simplex_to_cart(posts_μ) - cart_ν = simplex_to_cart(posts_ν) +def plot_simplex_posteriors(μ_matrix, ν_matrix, prior3): + """绘制 2-单纯形上的后验原子,面积与概率成正比。""" + corners = simplex_to_cart(np.eye(3)) prior_cart = simplex_to_cart(prior3[None, :])[0] - corners = np.array([[0.0, 0.0], - [1.0, 0.0], - [0.5, np.sqrt(3)/2]]) - fig, axes = plt.subplots(1, 2, figsize=(12, 5)) panel_labels = ["μ(更具信息量)", "ν(被混淆)"] - data = [(cart_μ, "steelblue"), (cart_ν, "darkorange")] + colors = ["steelblue", "darkorange"] labels = ["$s_1$", "$s_2$", "$s_3$"] offsets = [(-0.07, -0.05), (0.02, -0.05), (-0.02, 0.03)] - for ax, (cart, c), panel_label in zip(axes, data, panel_labels): + for ax, m, c, panel_label in zip(axes, [μ_matrix, ν_matrix], + colors, panel_labels): + posts, probs = compute_posteriors(m, prior3) + cart = simplex_to_cart(posts) tri = plt.Polygon(corners, fill=False, edgecolor="black", linewidth=2) ax.add_patch(tri) - ax.scatter(cart[:, 0], cart[:, 1], s=4, alpha=0.25, color=c) + ax.scatter(cart[:, 0], cart[:, 1], s=3000 * probs, alpha=0.6, color=c) ax.scatter(*prior_cart, s=120, color="red", zorder=5, label="先验", marker="*") for i, (lbl, off) in enumerate(zip(labels, offsets)): @@ -710,23 +802,26 @@ def plot_simplex_posteriors(μ_matrix, ν_matrix, prior3, n_draws=3000, seed=0): plot_simplex_posteriors(μ3, ν3, prior3) ``` -由于这个例子只有三个信号,每个面板由重复采样的三个后验原子构成,而非一个连续的点云。 +在 $\mu$ 下,后验原子位于更靠近顶点的位置。 -在 $\mu$ 下,采样的后验点向顶点延伸得更远。 +在被混淆的实验 $\nu$ 下,它们则更靠近先验。 -在被混淆的实验 $\nu$ 下,采样的后验点更靠近中心。 +看涨期权检验无法推广到单纯形的情形。 + +混淆矩阵 $Q_3$ 本身就证明了 $\mu_3 \geq \nu_3$,下一节将在这个例子中检验若干凹不确定性函数。 ## 德格鲁特不确定性函数 + ### 凹不确定性函数与信息的价值 {cite}`degroot1962` 通过 **不确定性函数** $U: P \to \mathbb{R}$ 将信息的价值形式化。 -在德格鲁特的公理化中,不确定性函数是: +德格鲁特的定义只要求凹性,使得观测任何信号都弱地降低期望不确定性。 + +常见的例子,例如香农熵,还在 $p$ 的各分量上是对称的,并在均匀先验处取最大值。 -- *凹的*:由詹森不等式,观测任何信号都弱地降低期望不确定性。 -- *对称的*:它依赖于 $p$ 的各分量,而不依赖于它们的标记。 -- *归一化的*:它在 $p = (1/N, \ldots, 1/N)$ 处取最大值,在顶点处取最小值。 +布莱克韦尔等价性使用每个凹函数 $U$,无论其是否对称;{ref}`bk_ex2` 说明了为何非对称函数也很重要。 *在给定先验 $p$ 下实验 $\mu$ 的价值* 为 @@ -747,23 +842,29 @@ $$ U_H(p) = -\sum_{i=1}^{N} p_i \log p_i. $$ -在均匀先验 $c = (1/N, \ldots, 1/N)$ 下,德格鲁特的价值公式变为 +对任意先验 $p$,德格鲁特的价值公式变为 $$ -I(\tilde{x}_\mu, c;\, U_H) -= \log N - H(\tilde{s} \mid \tilde{x}_\mu), +I(\tilde{x}_\mu, p;\, U_H) += H(\tilde{s}) - H(\tilde{s} \mid \tilde{x}_\mu), $$ -其中 $H(\tilde{s} \mid \tilde{x}_\mu)$ 是给定信号时状态的条件熵。 +其中 $H(\tilde{s}) = U_H(p)$ 是先验的熵,$H(\tilde{s} \mid \tilde{x}_\mu)$ 是给定信号时状态的条件熵。 + +在均匀先验下,$H(\tilde{s}) = \log N$ 。 要看清原因,将 $H(\tilde{s} \mid \tilde{x}_\mu) = \sum_x \Pr(\tilde{x}_\mu = x) \, H(\tilde{s} \mid \tilde{x}_\mu = x)$ 写出,其中每个条件熵项等于 $-\sum_i p_i^\mu(x) \log p_i^\mu(x) = U_H(p^\mu(x))$ 。 -代入德格鲁特公式得到 $I = U_H(c) - \mathbb{E}[U_H(p^\mu)] = \log N - H(\tilde{s} \mid \tilde{x}_\mu)$ ,这正是 $\tilde{x}_\mu$ 与 $\tilde{s}$ 之间的 *互信息*。 +代入德格鲁特公式得到 $I = U_H(p) - \mathbb{E}[U_H(p^\mu)] = H(\tilde{s}) - H(\tilde{s} \mid \tilde{x}_\mu)$ ,这正是 $\tilde{x}_\mu$ 与 $\tilde{s}$ 之间的 *互信息*。 ```{note} -布莱克韦尔序蕴含基于熵的不等式,但 *其逆命题不成立*:仅凭熵无法确定完整的布莱克韦尔序。 +布莱克韦尔序蕴含基于熵的不等式。 + +由于熵是严格凹的,严格的布莱克韦尔改进会严格提升互信息。 + +但其逆命题不成立:按互信息排序并不意味着按布莱克韦尔序排序。 -两个实验可以具有相同的互信息却在布莱克韦尔排序中不同,因为单个凹函数无法检测出后验分散度上的所有差异。 +两个实验在布莱克韦尔序下可能不可比,而其中一个具有更高的互信息,或者两者具有相同的互信息,如 {ref}`bk_ex2` 所示。 完整的布莱克韦尔序要求不等式对 *每个* 凹函数 $U$ 都成立,而不仅仅是香农熵。 ``` @@ -824,9 +925,17 @@ for name, U in uncertainty_functions.items(): I_μ = degroot_value(μ_info, prior, U) I_ν = degroot_value(ν_info, prior, U) print(f"{name:<22} {I_μ:<10.4f} {I_ν:<10.4f} {I_μ >= I_ν - 1e-10}") + +print("\n三状态示例(μ3、ν3,均匀先验):") +print(header) +print("-" * 58) +for name, U in uncertainty_functions.items(): + I_μ = degroot_value(μ3, prior3, U) + I_ν = degroot_value(ν3, prior3, U) + print(f"{name:<22} {I_μ:<10.4f} {I_ν:<10.4f} {I_μ >= I_ν - 1e-10}") ``` -正如定理所预测的那样,一旦我们知道 $\mu \geq \nu$ 在布莱克韦尔意义下成立,那么对每个凹不确定性函数都有 $I(\mu) \geq I(\nu)$ 。 +正如定理所预测的那样,在这两个例子中对每个凹不确定性函数都有 $I(\mu) \geq I(\nu)$ ,因为 $\mu \geq \nu$ 在布莱克韦尔意义下成立。 ### 作为实验质量函数的信息价值 @@ -842,6 +951,8 @@ $$ 第一项是完全混合的矩阵, $I_2$ 是单位矩阵。 +这个族按布莱克韦尔准则排序:对 $\theta' < \theta$ ,有 $\mu(\theta') = \mu(\theta) \, \mu(\theta' / \theta)$ ,因此质量较低的实验是质量较高实验的混淆。 + ```{code-cell} ipython3 --- mystnb: @@ -874,182 +985,87 @@ plt.show() 每个凹不确定性函数都会给更具信息量的实验赋予弱更高的价值。 -## 与二阶随机占优的关系 - -如果对每个凹函数 $u$ 都有 $E[u(X)] \geq E[u(Y)]$ ,则称随机变量 $X$ **二阶随机占优** -$Y$ (记作 $X \succeq_{\text{SOSD}} Y$ )。 -等价地, $Y$ 是 $X$ 的一个均值保持展开。 - -不确定性函数表示使得与 SOSD 的联系变得明确。 - -由于 $U$ 是凹的, $-U$ 是凸的,因此条件 - -$$ -\mathbb{E}[U(p^\mu)] \leq \mathbb{E}[U(p^\nu)] \quad \text{for all concave } U -$$ - -正是 $\hat\mu^c$ 在 $P$ 上以凸序占优 $\hat\nu^c$ 的陈述。 - -当 $N = 2$ 时,后验信念是 $[0, 1]$ 中的标量,SOSD 比较简化为经典的积分 CDF 检验。 - -具体地, $\hat\mu^c$ 是 $\hat\nu^c$ 的均值保持展开,当且仅当对所有 $t \in [0,1]$ 都有 $\int_0^t F_\mu(s)\,ds \geq \int_0^t F_\nu(s)\,ds$ ,其中 $F_\mu$ 和 $F_\nu$ 是每个实验下 $s_1$ 后验的 CDF。等价地,用 SOSD 的语言来说,$\nu$ 下信息量较少的后验占优于 $\mu$ 下更为分散的后验。 - -我们可以对上面的两状态例子在图形上验证这一点 - -```{code-cell} ipython3 ---- -mystnb: - figure: - caption: 两状态情形下的积分 CDF 检验 - name: fig-blackwell-integrated-cdf ---- -def cdf_data_1d(weights, values): - """对离散分布排序支撑点和累积质量。""" - idx = np.argsort(values) - sorted_vals = values[idx] - sorted_wts = weights[idx] - cum_mass = np.cumsum(sorted_wts) - return sorted_vals, cum_mass - - -def plot_sosd_posteriors(μ_matrix, ν_matrix, prior): - """为 s1 上的后验分布绘制 CDF 和积分 CDF。""" - posts_μ, probs_μ = compute_posteriors(μ_matrix, prior) - posts_ν, probs_ν = compute_posteriors(ν_matrix, prior) - - p_μ = posts_μ[:, 0] - p_ν = posts_ν[:, 0] - - sv_μ, cm_μ = cdf_data_1d(probs_μ, p_μ) - sv_ν, cm_ν = cdf_data_1d(probs_ν, p_ν) - - fig, axes = plt.subplots(1, 2, figsize=(11, 4)) - - ax = axes[0] - for sv, cm, lbl, c in [(sv_μ, cm_μ, "μ", "steelblue"), - (sv_ν, cm_ν, "ν", "darkorange")]: - xs = np.concatenate([[0], sv, [1]]) - ys = np.concatenate([[0], cm, [1]]) - ax.step(xs, ys, where="post", label=lbl, color=c, linewidth=2) - ax.axvline(prior[0], linestyle="--", color="gray", alpha=0.6, linewidth=2, - label="先验") - ax.set_xlabel(r"后验 $p(s_1 \mid x)$", fontsize=12) - ax.set_ylabel("累积概率", fontsize=12) - ax.text(0.03, 0.94, "CDF", transform=ax.transAxes, va="top") - ax.legend(fontsize=11) - - ax2 = axes[1] - grid = np.linspace(0, 1, 200) - - def integrated_cdf(sorted_vals, cum_mass, grid): - cdf = np.array([cum_mass[sorted_vals <= t].max() - if np.any(sorted_vals <= t) else 0.0 - for t in grid]) - return np.cumsum(cdf) * (grid[1] - grid[0]) - - int_μ = integrated_cdf(sv_μ, cm_μ, grid) - int_ν = integrated_cdf(sv_ν, cm_ν, grid) - - ax2.plot(grid, int_μ, label=r"$\int F_\mu$", color="steelblue", linewidth=2) - ax2.plot(grid, int_ν, color="darkorange", - label=r"$\int F_\nu$", linewidth=2) - ax2.fill_between(grid, int_ν, int_μ, - where=int_μ >= int_ν, - alpha=0.2, color="steelblue", - label=(r"$\int F_\mu \geq \int F_\nu$" - r" ($\mu$ 是 $\nu$ 的 MPS)")) - ax2.set_xlabel(r"$t$", fontsize=12) - ax2.set_ylabel("积分 CDF", fontsize=12) - ax2.text(0.03, 0.94, "积分 CDF", transform=ax2.transAxes, va="top") - ax2.legend(fontsize=10) - - plt.tight_layout() - plt.show() - -plot_sosd_posteriors(μ_info, ν_info, prior) -``` - -## 应用 1:产品质量信息 +## 应用1:对产品质量信息的需求 {cite:t}`kihlstrom1974a` 将布莱克韦尔定理应用于消费者对产品质量信息的需求。 -- 未知状态 $\tilde{s}$ 是一个产品参数 $\theta$ 。 -- 消费者可以以成本 $c(\lambda)$ 购买 $\lambda$ 单位的信息。 -- 随着 $\lambda$ 上升,实验在布莱克韦尔意义下变得更具信息量。 +- 未知状态 $\tilde{s}$ 是产品的质量。 +- 消费者可以花费 $c \lambda^2$ 的成本购买 $\lambda$ 单位的信息。 +- 随着 $\lambda$ 增大,实验在布莱克韦尔意义上变得更具信息性。 -布莱克韦尔序表明,在不考虑成本的情况下,对每个期望效用最大化者来说,更多的信息总是更好的。 +在没有成本的情况下,布莱克韦尔序表明,对于每个期望效用最大化者来说,更多的信息总是更好的。 -在考虑成本时,消费者选择质量投资 $\theta$ 以最大化 *净价值*。 +在存在成本的情况下,消费者选择 $\lambda$ 以最大化信息的净价值。 -如果质量投资以递减的收益转化为实验精度——比如,对某个速率参数 $a$ ,精度为 $\phi(\theta) = 1 - e^{-a\theta}$ ——那么信息的边际价值最终会随 $\theta$ 递减。 +我们让实验的准确度随 $\phi(\lambda) = 1 - e^{-a \lambda}$ 递增但呈边际递减,并将其代入上述族 $\mu(\phi)$ 中。 -在凸成本 $c(\theta) = c \, \theta^2$ 下,递增的边际成本最终会超越递减的边际价值,从而产生一个内部最优。 +我们用德格鲁特熵值来衡量信息的总价值,它在 {cite:t}`kihlstrom1974a` 中代表消费者期望效用的增益。 + +{doc}`pricing_information` 研究了向对信息价值评估不同的买家出售信息的问题。 ```{code-cell} ipython3 --- mystnb: figure: - caption: 具有二次成本的信息需求 + caption: Demand for information with a quadratic cost name: fig-blackwell-information-demand --- -def gross_value(θ, prior2, U=entropy, rate=2): - """质量投资 θ 的总价值(收益递减)。""" - accuracy = 1 - np.exp(-rate * θ) - μ_t = (1 - accuracy) * np.ones((2, 2)) / 2 + accuracy * np.eye(2) - return degroot_value(μ_t, prior2, U) +def gross_value(λ, prior2, U=entropy, rate=2): + """Gross value of buying λ units of information.""" + accuracy = 1 - np.exp(-rate * λ) + return degroot_value(make_experiment(accuracy), prior2, U) -θ_fine = np.linspace(0, 1, 200) +λ_grid = np.linspace(0, 1, 200) c = 0.6 -gross_vals = np.array([gross_value(θ, prior2) for θ in θ_fine]) -cost_vals = c * θ_fine**2 +gross_vals = np.array([gross_value(λ, prior2) for λ in λ_grid]) +cost_vals = c * λ_grid**2 net_vals = gross_vals - cost_vals -marginal_vals = np.gradient(gross_vals, θ_fine) -marginal_cost = 2 * c * θ_fine +marginal_vals = np.gradient(gross_vals, λ_grid) +marginal_cost = 2 * c * λ_grid opt_idx = int(np.argmax(net_vals)) fig, axes = plt.subplots(1, 2, figsize=(12, 4)) ax = axes[0] -ax.plot(θ_fine, gross_vals, - label="总价值 I(θ)", +ax.plot(λ_grid, gross_vals, label="Gross value I(λ)", color="steelblue", linewidth=2) -ax.plot(θ_fine, cost_vals, - label=r"成本 $c\theta^2$", +ax.plot(λ_grid, cost_vals, label=r"Cost $c\lambda^2$", color="tomato", linestyle="--", linewidth=2) -ax.plot(θ_fine, net_vals, - label="净价值", color="green", linewidth=2) -ax.axvline(θ_fine[opt_idx], color="green", - linestyle=":", linewidth=2, - label=f"θ* ≈ {θ_fine[opt_idx]:.2f}") -ax.set_xlabel("质量投资 θ", fontsize=11) -ax.set_ylabel("价值(熵单位)", fontsize=11) +ax.plot(λ_grid, net_vals, label="Net value", color="green", linewidth=2) +ax.axvline(λ_grid[opt_idx], color="green", linestyle=":", linewidth=2, + label=f"λ* ≈ {λ_grid[opt_idx]:.2f}") +ax.set_xlabel("information purchased λ", fontsize=11) +ax.set_ylabel("value (entropy units)", fontsize=11) ax.legend(fontsize=10) ax2 = axes[1] -ax2.plot(θ_fine, marginal_vals, - label="边际价值 I'(θ)", +ax2.plot(λ_grid, marginal_vals, label="Marginal value I'(λ)", color="steelblue", linewidth=2) -ax2.plot(θ_fine, marginal_cost, - label=r"边际成本 $2c\theta$", +ax2.plot(λ_grid, marginal_cost, label=r"Marginal cost $2c\lambda$", color="tomato", linestyle="--", linewidth=2) -ax2.axvline(θ_fine[opt_idx], color="green", - linestyle=":", linewidth=2, - label=f"θ* ≈ {θ_fine[opt_idx]:.2f}") -ax2.set_xlabel("质量投资 θ", fontsize=11) -ax2.set_ylabel("边际价值 / 成本", fontsize=11) +ax2.axvline(λ_grid[opt_idx], color="green", linestyle=":", linewidth=2, + label=f"λ* ≈ {λ_grid[opt_idx]:.2f}") +ax2.set_xlabel("information purchased λ", fontsize=11) +ax2.set_ylabel("marginal value / cost", fontsize=11) ax2.legend(fontsize=10) plt.tight_layout() plt.show() ``` -最优投资 $\theta^*$ 出现在边际价值等于边际成本的地方。 +最优购买量 $\lambda^*$ 出现在边际价值等于边际成本的地方。 + +边际价值先上升后下降。 + +在 $\lambda = 0$ 附近,信息的价值是凸的:它仅随实验准确度呈二次方增长。 -由于实验精度在 $\theta$ 上具有收益递减,投资的边际价值最终会降到上升的边际成本以下,从而产生一个真正的内部最优。 +{cite:t}`radner_stiglitz1984` 表明,这种信息价值的非凹性是普遍存在的,因此随着价格下降,对信息的需求可能从零跳跃到一个正值。 -提高 $c$ 会使边际成本曲线上移并减小 $\theta^*$ ,而更不对称的先验会使边际价值曲线移动并改变最优。 +由于准确度存在边际递减效应,边际价值最终会低于不断上升的边际成本,这在此处产生了一个内部最优解。 + +提高 $c$ 会使边际成本曲线上移,从而降低 $\lambda^*$,而更不对称的先验分布会使边际价值曲线发生变化,从而改变最优解。 ## 应用 2:序贯实验设计 @@ -1061,6 +1077,8 @@ plt.show() 如果一个实验在每一阶段都比另一个更具信息量,那么布莱克韦尔序倾向于在每一时期都使用更好的实验。 +{doc}`wald_friedman` 和 {doc}`wald_friedman_2` 研究了一个互补的问题:何时停止从一个固定实验中抽样。 + 我们现在为不同质量的实验模拟序贯信念更新。 ```{code-cell} ipython3 @@ -1116,6 +1134,8 @@ plot_sequential_beliefs([0.2, 0.5, 0.9], prior2, T=30) 更具信息量的实验使信念更快地收敛到真相。 +{doc}`likelihood_ratio_process` 表明,对数似然比以一个等于实验两行之间库尔贝克-莱布勒散度的速率漂移,并且该散度随 $\theta$ 的增大而上升。 + 在正确的先验下,后验过程是一个鞅。 ```{code-cell} ipython3 @@ -1167,27 +1187,9 @@ check_martingale_mean(μ_info, prior, T=20, n_paths=5000) 这是后验鞅性质的无条件蕴含。 -## 小结 - -布莱克韦尔定理在统计实验上确定了一个 *偏序*,具有三个等价的刻画: - -| 标准 | 条件 | -|-----------|-----------| -| 经济学 | 每个决策者弱地偏好 $\mu$ 甚于 $\nu$ : $B(\mu, A, u) \supseteq B(\nu, A, u)$ | -| 充分性 | $\nu$ 是 $\mu$ 的混淆:对某个马尔可夫矩阵 $Q$ 有 $\nu = \mu Q$ | -| 不确定性 | 对每个先验 $p$ 和每个凹函数 $U$ , $\mu$ 更多地降低期望不确定性 | - -基尔斯特罗姆的贝叶斯阐述将 *后验分布* 置于中心。 - -一个更具信息量的实验会生成一个更为分散、但均值与先验相同的后验分布。 - -恰当的概率语言是后验信念单纯形上的凸序。 - -在两状态情形下,这简化为 $[0, 1]$ 上熟悉的 SOSD / 积分 CDF 检验。 - -德格鲁特的贡献在于将比较从特定效用函数扩展到全部凹不确定性函数类。 - +{doc}`merging_of_opinions` 研究了此类信念鞅的几乎必然收敛性,以及关于意见融合的布莱克韦尔-杜宾斯定理。 +(bk_data_processing)= ## 数据处理不等式与粗粒化 布莱克韦尔的条件——对某个马尔可夫核 $Q$ 有 $\nu = \mu Q$ ——与信息论、信息几何和机器学习中支撑 **数据处理不等式**(DPI)和 **粗粒化定理** 的数学操作是同一个。 @@ -1213,6 +1215,8 @@ $$ f-散度这一类别是由 {cite:t}`ali1966` 、 {cite:t}`csiszar1963` 和 {cite:t}`morimoto1963` 独立引入的;另见 {cite:t}`liese2012` 。 +{doc}`divergence_measures` 针对连续分布研究了其中若干种散度。 + ```{prf:theorem} 数据处理不等式 :label: thm-data-processing @@ -1247,6 +1251,10 @@ $$ 只要 $\mu \geq \nu$ 在布莱克韦尔序中成立。 +对两个状态而言,逆命题也成立(采用关于零概率的通常约定):如果对每个凸函数 $f$ 都有 $D_f(\mu_1 \| \mu_2) \geq D_f(\nu_1 \| \nu_2)$ ,那么 $\mu \geq \nu$ 。 + +当状态数多于两个时,各行之间的散度并不能刻画布莱克韦尔序。 + 因此一个更具信息量的实验总是会产生 *更分离的* 条件信号分布,在每个 f-散度的意义下同时如此。 由此,DPI 是关于状态 *可区分性* 的一个陈述:混淆一个实验会使得在每种统计可分性度量下,状态都更难被区分。 @@ -1259,7 +1267,9 @@ $$ DPI 有一个无穷小的、微分几何的伴侣。 -**陈氏定理** {cite}`chentsov1981` 断言, **Fisher 信息矩阵** $I_F(\theta)$ 至多相差一个常数重缩放,是统计流形上在每个马尔可夫态射(粗粒化)下都收缩的 *唯一* 黎曼度量: +**陈氏定理** {cite}`chentsov1981` 断言, **Fisher 信息度量** 至多相差一个常数因子,是概率单纯形上在马尔可夫嵌入(由充分统计量诱导的变换)下不变的 *唯一* 黎曼度量。 + +Fisher 信息矩阵 $I_F(\theta)$ 还在每个马尔可夫核下收缩: $$ I_F(\theta;\, \mu) \succeq I_F(\theta;\, \mu\kappa) @@ -1268,7 +1278,9 @@ $$ 等式成立当且仅当 $\kappa$ 是关于 $\theta$ 的充分统计量。 -唯一性条款意义深远:它说 Fisher 信息不仅仅是碰巧在粗粒化下收缩的 *某一个* 度量,而是具有该性质的 *唯一一个* 度量。 +唯一性条款说明,在所有黎曼度量中,唯有 Fisher 度量在充分统计量下保持不变。 + +在 {doc}`gallant_tauchen` 中,当辅助模型嵌套结构模型时,结构模型的 Fisher 信息设定了得分匹配所能达到的效率界限。 关于信息几何及其与充分性联系的详尽处理,参见 {cite:t}`amari_nagaoka2000` 。 @@ -1292,7 +1304,7 @@ $$ I(T;\, Y) \leq I(X;\, Y), $$ -等式成立当且仅当 $T$ 是给定 $X$ 时关于 $Y$ 的 **充分统计量**。 +等式成立当且仅当 $T$ 是 $X$ 关于 $Y$ 的 **充分统计量**,也就是说,如果 $Y - T - X$ 也构成一个马尔可夫链。 布莱克韦尔序解释了为什么对 $X$ 的任何确定性或随机后处理都无法增加与 $Y$ 的互信息:应用于 $X$ 的任何马尔可夫核都是布莱克韦尔意义下的混淆,而 DPI 是粗粒化定理的互信息形式。 @@ -1325,11 +1337,12 @@ DPI 反过来说的是同一件事:混淆(降低 $\theta$ )只会收缩这 | 充分性( $Q$ 不丢弃任何东西) | DPI 中的等式;在二元模型中,一个严格凸的 $f$ 就已刻画充分性 | | 德格鲁特价值 $I(\mu; U_H)$ | 互信息 $I(\tilde{x}_\mu;\, \tilde{s})$ (香农 DPI) | | $\mu$ 与 $\nu$ 下的后验展开 | $\mu$ 下各行之间的 $D_f$ 更大 | -| 布莱克韦尔定理(经济学 $\Leftrightarrow$ 混淆) | 对所有 $f$ 的 DPI $\Leftrightarrow$ 单个马尔可夫核见证占优 | -| 陈氏唯一性定理 | Fisher 信息是唯一在粗粒化下收缩的度量 | +| 两状态下的布莱克韦尔定理 | 对所有 $f$ 的 $D_f$ 占优 $\Leftrightarrow$ 单个马尔可夫核见证占优 | +| 陈氏唯一性定理 | Fisher 信息是在马尔可夫嵌入(充分统计量)下唯一不变的度量;它也在马尔可夫核下收缩 | | 信息瓶颈 $I(T;Y) \leq I(X;Y)$ | 应用于马尔可夫链 $Y{-}X{-}T$ 的互信息 DPI | +(bk_lr_learning)= ## 与贝叶斯似然比学习的关系 讲座 {doc}`likelihood_bayes` 是这里所发展框架的一个动态的两状态特例。 @@ -1338,6 +1351,8 @@ DPI 反过来说的是同一件事:混淆(降低 $\theta$ )只会收缩这 那么单个观测是一个具有行 $f(\cdot)$ 和 $g(\cdot)$ 的布莱克韦尔实验,而历史 $w^t = (w_1, \ldots, w_t)$ 定义了一个更丰富的实验 $\mu_t$ 。 +这里我们将第一次抽取的时间标为 $t = 1$ ,并把先验写为 $\pi_0$ ,与 {doc}`likelihood_ratio_process` 中一致;而 {doc}`likelihood_bayes` 将第一次抽取的时间标为 $t = 0$ ,并把先验写为 $\pi_{-1}$ 。 + 由于总是可以丢弃最后 $t-s$ 个观测,对每个 $t > s$ , $\mu_t$ 都布莱克韦尔占优 $\mu_s$ 。 似然比过程 @@ -1375,6 +1390,276 @@ $$ | $\pi_t$ 在各历史上的分布 | $\hat{\mu}^c$ (基尔斯特罗姆的后验分布) | | 鞅性质 $E[\pi_t] = \pi_0$ | $\hat{\mu}^c$ 的均值保持 | | $\pi_t \to 0$ 或 $1$ 几乎必然 | 后验向顶点展开(极限中的 MPS) | -| 互信息 $I(\mu_t; U_H)$ | 德格鲁特信息价值 | +| $\pi_t$ 的熵的期望下降 | 德格鲁特价值 $I(\mu_t; U_H)$ ,即互信息 | | 更多抽取 $\Rightarrow$ 对所有决策者更好 | 布莱克韦尔序 $\mu_t \geq \mu_s$ | -| 混淆(丢弃最后 $t - s$ 次抽取) | 满足 $\mu_s = \mu_t Q$ 的随机变换 $Q$ | \ No newline at end of file +| 混淆(丢弃最后 $t - s$ 次抽取) | 满足 $\mu_s = \mu_t Q$ 的随机变换 $Q$ | + +## 小结 + +布莱克韦尔定理在统计实验上确定了一个 *偏序*,具有三个等价的刻画: + +| 标准 | 条件 | +|-----------|-----------| +| 经济学 | 每个决策者弱地偏好 $\mu$ 甚于 $\nu$ : $B(\mu, A, u) \supseteq B(\nu, A, u)$ | +| 充分性 | $\nu$ 是 $\mu$ 的混淆:对某个马尔可夫矩阵 $Q$ 有 $\nu = \mu Q$ | +| 不确定性 | 对每个先验 $p$ 和每个凹函数 $U$ , $\mu$ 更多地降低期望不确定性 | + +基尔斯特罗姆的贝叶斯阐述将 *后验分布* 置于中心。 + +一个更具信息量的实验会生成一个更为分散、但均值与先验相同的后验分布。 + +恰当的概率语言是后验信念单纯形上的凸序。 + +在两状态情形下,这简化为 $[0, 1]$ 上熟悉的 SOSD / 积分 CDF 检验。 + +德格鲁特的贡献在于将比较从特定效用函数扩展到全部凹不确定性函数类。 + +布莱克韦尔序蕴含了每个 f-散度的数据处理不等式,而 {doc}`likelihood_bayes` 中的似然比学习则是该框架的一个动态特例。 + +## 练习 + +```{exercise} +:label: bk_ex1 + +第一节发现没有随机变换能将 $\nu = \mu Q$ 映射回 $\mu$,但该节只提供了一个数值残差作为证据。 + +本练习提供一个证明。 + +假设 $\mu = \nu Q'$ 对于某个马尔可夫矩阵 $Q'$ 成立,即 $\tilde{x}_\mu$ 是通过一个不依赖于 $\tilde{s}$ 的随机化从 $\tilde{x}_\nu$ 生成的。 + +1. 证明 $\mu$ 下的每个后验都是 $\nu$ 下后验的加权平均: + +$$ +p^\mu(x) = \sum_{y} \Pr(\tilde{x}_\nu = y \mid \tilde{x}_\mu = x) \, p^\nu(y) . +$$ + +2. 在均匀先验下,计算第一节中 $\mu$ 和 $\nu$ 生成的 $s_1$ 的后验概率。 + +3. 得出 $\mu$ 不是 $\nu$ 的模糊化这一结论。 +``` + +```{solution-start} bk_ex1 +:class: dropdown +``` + +对于第 1 部分,状态和两个信号构成一个马尔可夫链 $\tilde{s} \to \tilde{x}_\nu \to \tilde{x}_\mu$,因为 $Q'$ 不依赖于状态。 + +因此 $\Pr(\tilde{s} = s_i \mid \tilde{x}_\nu = y, \tilde{x}_\mu = x) = \Pr(\tilde{s} = s_i \mid \tilde{x}_\nu = y)$,并且 + +$$ +p_i^\mu(x) += \sum_{y} \Pr(\tilde{x}_\nu = y \mid \tilde{x}_\mu = x) \, \Pr(\tilde{s} = s_i \mid \tilde{x}_\nu = y) += \sum_{y} \Pr(\tilde{x}_\nu = y \mid \tilde{x}_\mu = x) \, p_i^\nu(y) . +$$ + +因此,被模糊化的实验的每个后验都落在原始实验后验的凸包内。 + +```{code-cell} ipython3 +c2 = np.array([0.5, 0.5]) +post_μ1, _ = compute_posteriors(μ, c2) +post_ν1, _ = compute_posteriors(ν, c2) + +lo, hi = post_ν1[:, 0].min(), post_ν1[:, 0].max() +outside = (post_μ1[:, 0] < lo - 1e-12) | (post_μ1[:, 0] > hi + 1e-12) + +print("posteriors on s1 under μ:", post_μ1[:, 0].round(4)) +print("posteriors on s1 under ν:", post_ν1[:, 0].round(4)) +print(f"interval spanned by ν's posteriors: [{lo:.4f}, {hi:.4f}]") +print("μ's posteriors outside that interval:", post_μ1[outside, 0].round(4)) +``` + +在 $\nu$ 下,$s_1$ 的后验为 $3/4$ 和 $1/4$。 + +在 $\mu$ 下,它们为 $6/7$、$1/2$ 和 $1/7$。 + +后验 $6/7$ 和 $1/7$ 落在 $[1/4, 3/4]$ 之外,因此没有马尔可夫矩阵 $Q'$ 能从 $\nu$ 产生 $\mu$。 + +这一论证解释了第一节中出现的较大残差:模糊化只能将后验拉向先验,而 $\mu$ 使后验远离先验的程度超出了 $\nu$ 所能达到的范围。 + +```{solution-end} +``` + +```{exercise} +:label: bk_ex2 + +布莱克韦尔的序是一个偏序,{doc}`pricing_information` 正是建立在这一事实之上。 + +考虑两个具有两个状态和两个信号的实验, + +$$ +\mu_a = \begin{bmatrix} 1 & 0 \\ 0.5 & 0.5 \end{bmatrix} , +\qquad +\mu_b = \begin{bmatrix} 0.5 & 0.5 \\ 0 & 1 \end{bmatrix} , +$$ + +以及均匀先验。 + +1. 计算每个实验下 $s_1$ 后验概率的分布,以及信号与状态之间的互信息。 + +2. 使用看涨期权检验 $\mathbb{E}[\max(p - t, 0)]$ 证明这两个后验分布均不是对方的均值保持展开。 + +3. 对于凹的不确定性函数 $U_t(p) = -\max(p_1 - t, 0)$,取 $t = 0.2$ 和 $t = 0.6$,计算每个实验的德格鲁特价值,并解释结果。 +``` + +```{solution-start} bk_ex2 +:class: dropdown +``` + +在 $\mu_a$ 下,信号 $x_2$ 只在状态 $s_2$ 中出现,因此它揭示了 $s_2$。 + +在 $\mu_b$ 下,信号 $x_1$ 只在状态 $s_1$ 中出现,因此它揭示了 $s_1$。 + +```{code-cell} ipython3 +μ_a = np.array([[1.0, 0.0], + [0.5, 0.5]]) +μ_b = np.array([[0.5, 0.5], + [0.0, 1.0]]) + +for name, m in [("μ_a", μ_a), ("μ_b", μ_b)]: + posts, probs = compute_posteriors(m, c2) + print(f"{name}: posteriors on s1 = {posts[:, 0].round(4)}, " + f"probabilities = {probs.round(4)}, " + f"mutual information = {degroot_value(m, c2, entropy):.4f}") +``` + +这两个后验分布互为镜像。 + +重新标记状态和信号可以将一个实验映射为另一个实验,因此两者具有相同的互信息。 + +```{code-cell} ipython3 +def call_values(m, prior, ts): + "E[max(p_1 - t, 0)] under experiment m for each threshold t." + posts, probs = compute_posteriors(m, prior) + return np.array([(np.maximum(posts[:, 0] - t, 0) * probs).sum() for t in ts]) + +ts = np.linspace(0, 1, 201) +diff_ab = call_values(μ_a, c2, ts) - call_values(μ_b, c2, ts) + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.plot(ts, diff_ab, linewidth=2) +ax.axhline(0, color="black", linewidth=1) +ax.set_xlabel("threshold $t$") +ax.set_ylabel(r"$E[\max(p - t, 0)]$ under $\mu_a$ minus under $\mu_b$") +plt.show() +``` + +该差值出现了符号变化。 + +这两个后验分布都不是对方的均值保持展开,因此根据基尔斯特罗姆定理,这两个实验互相都不是布莱克韦尔充分的。 + +```{code-cell} ipython3 +def U_call(t): + "The concave uncertainty function -max(p_1 - t, 0)." + return lambda p: -max(p[0] - t, 0.0) + +for t in (0.2, 0.6): + print(f"t = {t}: I(μ_a) = {degroot_value(μ_a, c2, U_call(t)):.4f}, " + f"I(μ_b) = {degroot_value(μ_b, c2, U_call(t)):.4f}") +``` + +当 $t = 0.2$ 时,$\mu_a$ 的价值为 $0.05$,$\mu_b$ 的价值为零。 + +当 $t = 0.6$ 时,排名发生了反转。 + +除符号和一个仿射项外,$U_t$ 是一个在两种行动间选择、并在信念为 $t$ 处切换行动的决策者的价值函数。 + +在 $t = 0.2$ 处切换的决策者只看重那些将后验推低于 $0.2$ 的信号,而 $\mu_b$ 从未做到这一点。 + +在 $t = 0.6$ 处切换的决策者认为 $\mu_b$ 中揭示 $s_1$ 的信号比 $\mu_a$ 中将后验提高到 $2/3$ 的信号更有价值。 + +互信息对两个实验的排名相同,但决策者对它们的看法却存在分歧。 + +单一的不确定性函数无法确定布莱克韦尔比较的结果。 + +```{solution-end} +``` + +```{exercise} +:label: bk_ex3 + +本练习将布莱克韦尔的序与 {doc}`likelihood_bayes` 中的学习动态联系起来。 + +设单次抽取来自实验 `make_experiment(θ)`,其中 $\theta = 0.3$,因此信号与状态匹配的概率为 $(1 + \theta) / 2$。 + +观察 $t$ 次独立抽取。 + +1. 解释为什么等于 $x_1$ 的抽取次数 $k$ 是一个充分统计量,并写出 $k$ 对应的 $2 \times (t + 1)$ 实验矩阵 $\mu_t$。 + +2. 构造丢弃 $t + 1$ 次抽取中最后一次的马尔可夫矩阵 $Q_t$,并通过数值方法验证 $\mu_t = \mu_{t+1} Q_t$。 + +3. 在均匀先验下,使用看涨期权检验来验证对于 $t = 1, \ldots, 29$,$t + 1$ 次抽取后的后验分布是 $t$ 次抽取后的后验分布的均值保持展开。 + +4. 绘制 $k$ 与状态之间的互信息随 $t$ 变化的图像,并将其与上界 $\log 2$ 进行比较。 +``` + +```{solution-start} bk_ex3 +:class: dropdown +``` + +记 $a = (1 + \theta)/2$ 以及 $b = (1 - \theta)/2$。 + +在状态 $s_1$ 中,$t$ 次抽取中含有 $k$ 个 $x_1$ 的似然为 $a^k b^{t-k}$,在状态 $s_2$ 中为 $b^k a^{t-k}$。 + +似然比仅通过 $k$ 依赖于数据,因此 $k$ 是充分的。 + +$\mu_t$ 的各行是二项分布 $\text{Bin}(t, a)$ 和 $\text{Bin}(t, b)$。 + +这些抽取是可交换的,正如 {doc}`exchangeable` 中所讨论的那样。 + +给定 $t + 1$ 次抽取中有 $k'$ 个 $x_1$,无论在哪种状态下,最后一次抽取等于 $x_1$ 的概率均为 $k' / (t + 1)$。 + +丢弃它会以该概率将 $k'$ 移动到 $k' - 1$,否则 $k'$ 保持不变。 + +该核不依赖于状态,因此它是一个模糊化。 + +```{code-cell} ipython3 +from scipy.stats import binom + +def draws_experiment(θ, t): + "Experiment matrix for the number of x_1 signals in t independent draws." + a, b = (1 + θ) / 2, (1 - θ) / 2 + k = np.arange(t + 1) + return np.vstack([binom.pmf(k, t, a), binom.pmf(k, t, b)]) + +def discard_last(t): + "Markov matrix from k' in {0, ..., t+1} to k in {0, ..., t}." + Q_t = np.zeros((t + 2, t + 1)) + for kp in range(t + 2): + if kp >= 1: + Q_t[kp, kp - 1] = kp / (t + 1) + if kp <= t: + Q_t[kp, kp] = 1 - kp / (t + 1) + return Q_t + +θ_ex = 0.3 +for t in (1, 4, 9): + err = np.abs(draws_experiment(θ_ex, t + 1) @ discard_last(t) + - draws_experiment(θ_ex, t)).max() + print(f"t = {t}: max |μ_(t+1) Q_t - μ_t| = {err:.1e}") + +is_mps = all( + (call_values(draws_experiment(θ_ex, t + 1), c2, ts) + - call_values(draws_experiment(θ_ex, t), c2, ts)).min() >= -1e-12 + for t in range(1, 30)) +print(f"\nposteriors after t + 1 draws are an MPS of those after t draws: {is_mps}") +``` + +```{code-cell} ipython3 +t_grid = np.arange(1, 81) +mi = [degroot_value(draws_experiment(θ_ex, t), c2, entropy) for t in t_grid] + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.plot(t_grid, mi, linewidth=2, label="mutual information") +ax.axhline(np.log(2), color="black", linestyle="--", linewidth=1, label=r"$\log 2$") +ax.set_xlabel("number of draws $t$") +ax.set_ylabel("mutual information") +ax.legend() +plt.show() +``` + +每多一次抽取就会使后验分布更加分散,而其均值始终保持在先验处,这正是 {doc}`likelihood_bayes` 中研究的鞅性质。 + +随着后验集中于真实状态,互信息逐渐上升,趋向于均匀先验的熵 $\log 2$。 + +```{solution-end} +``` diff --git a/lectures/divergence_measures.md b/lectures/divergence_measures.md index 659a0e9d..569e1d78 100644 --- a/lectures/divergence_measures.md +++ b/lectures/divergence_measures.md @@ -21,6 +21,7 @@ translation: Comparing divergence measures: 比较散度度量 KL divergence and maximum-likelihood estimation: KL散度和最大似然估计 Related lectures: 相关讲座 + Exercises: 练习 --- (divergence_measures)= @@ -46,7 +47,9 @@ translation: * 这意味着没有"确凿证据"事件的发生能让统计学家确定数据一定服从其中某一个概率分布 -统计散度是一个将两个概率分布映射到非负实数的**函数**。 +统计散度是一个将两个概率分布映射到 $[0, +\infty]$ 中某个数的**函数**。 + +当且仅当两个分布相等时,该数值为零。 统计散度函数在统计学、信息论和现在许多人称之为"机器学习"的领域中发挥着重要作用。 @@ -72,17 +75,19 @@ from numba import vectorize, jit from math import gamma from scipy.integrate import quad from scipy.optimize import minimize_scalar +from scipy.special import betaln, digamma +from scipy.stats import beta as beta_dist import pandas as pd from IPython.display import display, Math ``` ## 熵、交叉熵、KL散度入门 -在深入之前,我们先介绍一些有用的基本概念。 +在深入之前,我们先介绍一些有用的基本概念。 -我们暂时假设 $f$ 和 $g$ 是离散随机变量在状态空间 $I = \{1, 2, \ldots, n\}$ 上的两个概率质量函数,满足 $f_i \geq 0, \sum_{i} f_i =1, g_i \geq 0, \sum_{i} g_i =1$。 +我们暂时假设 $f$ 和 $g$ 是离散随机变量在状态空间 $I = \{1, 2, \ldots, n\}$ 上的两个概率质量函数,满足 $f_i \geq 0, \sum_{i} f_i =1, g_i \geq 0, \sum_{i} g_i =1$。 -我们遵循一些统计学家和信息论学家的做法,将从分布 $f$ 中观察到单次抽样 $x = i$ 所关联的**惊奇度**或**惊奇量**定义为 +我们遵循一些统计学家和信息论学家的做法,将从分布 $f$ 中观察到单次抽样 $x = i$ 所关联的**惊奇度**或**惊奇量**定义为 $$ \log\left(\frac{1}{f_i}\right) @@ -97,17 +102,17 @@ $$ Claude Shannon {cite}`shannon1948mathematical` 将 $H(f)$ 称为分布 $f$ 的**熵**。 ```{note} -通过对 $\{f_1, f_2, \ldots, f_n\}$ 在约束 $\sum_i f_i = 1$ 下最大化 $H(f)$,我们可以验证使熵最大化的分布是均匀分布 +通过对 $\{f_1, f_2, \ldots, f_n\}$ 在约束 $\sum_i f_i = 1$ 下最大化 $H(f)$,我们可以验证使熵最大化的分布是均匀分布 $ f_i = \frac{1}{n} . $ -均匀分布的熵 $H(f)$ 显然等于 $- \log(n)$。 +均匀分布的熵 $H(f)$ 等于 $\log n$。 ``` -Kullback 和 Leibler {cite}`kullback1951information` 将单次抽样 $x$ 用于区分 $f$ 和 $g$ 所提供的信息量定义为对数似然比 +{cite:t}`kullback1951information` 将单次抽样 $x = i$ 用于区分 $f$ 和 $g$ 所提供的信息量定义为对数似然比 $$ -\log \frac{f(x)}{g(x)} +\log \frac{f_i}{g_i} $$ 以下两个概念被广泛用于比较两个分布 $f$ 和 $g$。 @@ -144,8 +149,9 @@ D_{KL}(f \parallel g) &= \sum_{i} f_i \log\left[\frac{f_i}{g_i}\right] \\ 记住$H(f)$是从$f$中抽取$x$时的预期惊异度。 -那么上述等式告诉我们,KL散度是当预期$x$是从$f$中抽取而实际上是从$g$中抽取时产生的预期"额外惊异度"。 +交叉熵 $H(f,g) = \sum_i f_i \log(1/g_i)$ 是当$x$从$f$中抽取,但用$g$来计算惊异度时的预期惊异度。 +那么上述等式告诉我们,KL散度是当预期$x$是从$g$中抽取而实际上是从$f$中抽取时产生的预期"额外惊异度"。 ## 两个Beta分布:运行示例 @@ -211,6 +217,8 @@ $$ 我们可以将$D_{KL}(f\|g)$解释为当数据由$f$生成而我们使用$g$时产生的预期超额对数损失(预期超额意外性)。 +除非$f$关于$g$绝对连续($f \ll g$),也就是说除非在$f(x) > 0$的地方都有$g(x) > 0$,否则$D_{KL}(f\|g) = +\infty$。 + 它有几个重要的性质: - 非负性(Gibbs不等式):$D_{KL}(f\|g) \ge 0$,当且仅当$f$几乎处处等于$g$时取等号 @@ -219,15 +227,35 @@ $$ $D_{KL}(f\|g) = H(f,g) - H(f)$,其中$H(f,g)$是交叉熵,$H(f)$是$f$的Shannon熵 - 链式法则:对于联合分布$f(x, y)$和$g(x, y)$, $D_{KL}(f(x,y)\|g(x,y)) = D_{KL}(f(x)\|g(x)) + E_{f}\left[D_{KL}(f(y|x)\|g(y|x))\right]$ +- 数据处理不等式:如果马尔可夫核$\kappa$将$x$映射为更粗粒度的信号$y$,并且$f\kappa$和$g\kappa$表示$y$的诱导分布,那么$D_{KL}(f\kappa\|g\kappa) \le D_{KL}(f\|g)$。 + +数据处理不等式说明,对数据进行粗化处理不能使$f$和$g$更容易区分。 + +{doc}`blackwell_kihlstrom` 中关于 {ref}`数据处理不等式与粗粒度化 ` 的部分将其与布莱克韦尔的实验排序联系起来。 + +下面定义的JS散度和切尔诺夫熵也满足数据处理不等式。 KL散度在统计推断中扮演着核心角色,包括模型选择和假设检验。 -{doc}`likelihood_ratio_process`描述了KL散度与预期对数似然比之间的联系, -而讲座{doc}`wald_friedman`将其与序贯概率比检验的测试性能联系起来。 +{doc}`likelihood_ratio_process` 描述了KL散度与预期对数似然比之间的联系。 + +{doc}`wald_friedman` 将KL散度与序贯概率比检验的预期停止时间联系起来。 + +{doc}`mix_model` 使用两个KL散度来确定当数据来自贝叶斯模型所排除的$f$和$g$的混合分布时,贝叶斯后验概率的极限。 让我们计算示例分布$f$和$g$之间的KL散度。 +U形贝塔密度在$0$或$1$处发散。 + +我们对整个$(0,1)$区间进行积分,并在$1/2$处将区间分割,以便`quad`每次只处理一个端点奇异性。 + ```{code-cell} ipython3 +def integrate(F): + """在(0, 1)上积分F,在1/2处将区间分割。""" + left, _ = quad(F, 0, 0.5, limit=200) + right, _ = quad(F, 0.5, 1, limit=200) + return left + right + def compute_KL(f, g): """ 通过数值积分计算KL散度KL(f, g) @@ -236,8 +264,7 @@ def compute_KL(f, g): fw = f(w) gw = g(w) return fw * np.log(fw / gw) - val, _ = quad(integrand, 1e-5, 1-1e-5) - return val + return integrate(integrand) # 计算我们示例分布之间的KL散度 kl_fg = compute_KL(f, g) @@ -249,7 +276,13 @@ print(f"KL(g, f) = {kl_gf:.4f}") KL散度的不对称性具有重要的实际意义。 -$D_{KL}(f\|g)$ 惩罚那些 $f > 0$ 但 $g$ 接近零的区域,反映了使用 $g$ 来建模 $f$ 的代价,反之亦然。 +$D_{KL}(f\|g)$ 会严重惩罚那些 $f > 0$ 但 $g$ 接近零的区域,因为$f$在那里将权重赋予了较大的$\log(f/g)$值。 + +$D_{KL}(f\|g)$ 几乎不惩罚那些 $g > 0$ 但 $f$ 接近零的区域,因为$f$在那里几乎没有权重。 + +$D_{KL}(g\|f)$ 则将这些角色互换。 + +在我们的例子中,$g$在$x = 0$处为零,而$f$在该处等于$1$,因此$D_{KL}(f\|g)$超过了$D_{KL}(g\|f)$。 ## Jensen-Shannon散度 @@ -291,17 +324,22 @@ JS散度具有以下几个有用的性质: - 其平方根$\sqrt{JS}$在概率分布空间上是一个度量(Jensen-Shannon距离)。 - JS散度等于二元随机变量$Z \sim \text{Bernoulli}(1/2)$(用于指示源)与样本$X$之间的互信息,其中当$Z=0$时$X$从$f$抽样,当$Z=1$时从$g$抽样。 -Jensen-Shannon散度在某些生成模型的优化中起着关键作用,因为它是有界的、对称的,且比KL散度更平滑,通常能为训练提供更稳定的梯度。 +Jensen-Shannon散度出现在生成对抗网络的原始构想中:当判别器达到最优时,生成器所最小化的目标是 $2\, JS(p_{\text{data}}, p_{\text{model}}) - \log 4$ {cite}`goodfellow2014`。 + +有界性是有代价的。 + +当两个分布的支持几乎不相交时,$JS$ 会接近其上限 $\log 2$,并且在模型参数上几乎是平坦的,这使得基于梯度的训练陷入停滞 {cite}`arjovsky2017`。 让我们计算示例分布$f$和$g$之间的JS散度 ```{code-cell} ipython3 def compute_JS(f, g): """计算Jensen-Shannon散度。""" - def m(w): - return 0.5 * (f(w) + g(w)) - js_div = 0.5 * compute_KL(f, m) + 0.5 * compute_KL(g, m) - return js_div + def integrand(w): + fw, gw = f(w), g(w) + mw = 0.5 * (fw + gw) + return 0.5 * fw * np.log(fw / mw) + 0.5 * gw * np.log(gw / mw) + return integrate(integrand) js_div = compute_JS(f, g) print(f"Jensen-Shannon散度 JS(f,g) = {js_div:.4f}") @@ -316,36 +354,61 @@ $$ 其中: - $\alpha_i \geq 0$ 且 $\sum_{i=1}^n \alpha_i = 1$,以及 -- $H(f) = -\int f(x) \log f(x) dx$ 是分布 $f$ 的**香农熵** +- $H(f) = -\int f(x) \log f(x) dx$ 是密度 $f$ 的**微分熵** + +与概率质量函数的熵不同,微分熵可以为负:$[0, 1/2]$ 上的均匀密度的微分熵为 $-\log 2$。 + +尽管如此,$JS_\alpha$ 仍是非负的,因为 $H$ 是凹函数。 ## Chernoff 熵 Chernoff 熵源自[大偏差理论](https://en.wikipedia.org/wiki/Large_deviations_theory)的早期应用,该理论通过提供罕见事件的指数衰减率来改进中心极限近似。 -对于密度函数 $f$ 和 $g$,Chernoff 熵为 +对于密度函数 $f$ 和 $g$,Chernoff 熵(由 {cite:t}`chernoff1952` 引入,信息论学家称之为 Chernoff 信息)为 $$ -C(f,g) = - \log \min_{\phi \in (0,1)} \int f^{\phi}(x) g^{1-\phi}(x) \, dx. +C(f,g) = - \log \min_{\phi \in (0,1)} \rho(\phi), \qquad +\rho(\phi) = \int f^{\phi}(x) g^{1-\phi}(x) \, dx. $$ 注释: -- 内部积分是 **Chernoff 系数**。 +- 积分 $\rho(\phi)$ 是 **Chernoff 系数**。 - 当 $\phi=1/2$ 时,它变成 **Bhattacharyya 系数** $\int \sqrt{f g}$。 -- 在具有 $T$ 个独立同分布观测的二元假设检验中,最优错误概率以 $e^{-C(f,g) T}$ 的速率衰减。 +- 在具有 $T$ 个独立同分布观测、且对 $f$ 和 $g$ 的先验概率相等的二元假设检验中,可达到的最小错误概率 $P_e(T)$ 以指数速率 $C(f,g)$ 衰减:$-\frac{1}{T} \log P_e(T) \rightarrow C(f,g)$。 + +{doc}`merging_of_opinions` 将 Bhattacharyya 系数称为 Hellinger 亲和度。 + +该讲座中的 Kakutani 定理表明,当 $\int \sqrt{fg} < 1$ 时,从 $f$ 和从 $g$ 中抽取的无限独立同分布序列的分布是相互奇异的。 我们将在 {doc}`likelihood_ratio_process` 讲座中看到第三点的一个例子, 我们将在模型选择的背景下研究 Chernoff 熵。 -让我们计算示例分布 $f$ 和 $g$ 之间的 Chernoff 熵。 +Chernoff 熵介于 Bhattacharyya 距离 $-\log \int \sqrt{fg}$ 与两个 KL 散度的组合之间: + +$$ +-\log \int \sqrt{f g} \, dx +\;\le\; C(f,g) +\;\le\; \frac{D_{KL}(f\|g)\, D_{KL}(g\|f)}{D_{KL}(f\|g) + D_{KL}(g\|f)} +\;\le\; \min\{D_{KL}(f\|g),\, D_{KL}(g\|f)\} . +$$ (eq:chernoff_sandwich) + +当 $f$ 和 $g$ 在同一集合上为正时,$\log \rho(\phi)$ 是 $\phi$ 的凸函数,在 $\phi = 0$ 和 $\phi = 1$ 处均等于 $0$。 + +它在 $\phi = 0$ 处的斜率为 $-D_{KL}(g\|f)$,在 $\phi = 1$ 处的斜率为 $D_{KL}(f\|g)$。 + +{eq}`eq:chernoff_sandwich` 中的下界在 $\phi = 1/2$ 处取 $\log \rho$ 的值;上界则使用两端点处的切线,这两条切线都位于 $\log \rho$ 之下。 + +{ref}`div_ex2` 要求你证明这些论断。 + +让我们计算示例分布 $f$ 和 $g$ 之间的 Chernoff 熵,并验证 {eq}`eq:chernoff_sandwich` 中的界。 ```{code-cell} ipython3 def chernoff_integrand(ϕ, f, g): """计算给定 ϕ 的 Chernoff 熵中的积分。""" def integrand(w): return f(w)**ϕ * g(w)**(1-ϕ) - result, _ = quad(integrand, 1e-5, 1-1e-5) - return result + return integrate(integrand) def compute_chernoff_entropy(f, g): """计算 Chernoff 熵 C(f,g)。""" @@ -360,11 +423,63 @@ def compute_chernoff_entropy(f, g): C_fg, ϕ_optimal = compute_chernoff_entropy(f, g) print(f"Chernoff 熵 C(f,g) = {C_fg:.4f}") print(f"最优 ϕ = {ϕ_optimal:.4f}") + +bhattacharyya = -np.log(chernoff_integrand(0.5, f, g)) +kl_bound = kl_fg * kl_gf / (kl_fg + kl_gf) +print(f"{bhattacharyya:.4f} ≤ {C_fg:.4f} ≤ {kl_bound:.4f} " + f"≤ {min(kl_fg, kl_gf):.4f}") ``` ## 比较散度度量 -我们现在比较几对Beta分布之间的这些度量 +我们现在比较几对Beta分布之间的这些度量。 + +对于Beta密度,KL散度和切尔诺夫系数都有封闭形式解。 + +设 $B(a,b)$ 为Beta函数,$\psi = \Gamma'/\Gamma$ 为双伽玛函数。 + +那么 + +$$ +D_{KL}\bigl(\text{Beta}(a_1,b_1)\,\|\,\text{Beta}(a_2,b_2)\bigr) += \log\frac{B(a_2,b_2)}{B(a_1,b_1)} + (a_1-a_2)\psi(a_1) + (b_1-b_2)\psi(b_1) ++ (a_2-a_1+b_2-b_1)\psi(a_1+b_1) +$$ + +以及 + +$$ +\rho(\phi) = \frac{B\bigl(\phi a_1 + (1-\phi) a_2,\ \phi b_1 + (1-\phi) b_2\bigr)} +{B(a_1,b_1)^{\phi}\, B(a_2,b_2)^{1-\phi}} . +$$ + +{ref}`div_ex1` 要求你推导这些公式。 + +JS散度没有封闭形式解,因此我们通过在 $(0,1)$ 上进行数值积分来计算它。 + +积分必须覆盖整个区间:Beta$(0.1, 0.2)$ 将四分之一的概率质量分布在 $[10^{-5}, 1-10^{-5}]$ 之外。 + +```{code-cell} ipython3 +def KL_beta(a1, b1, a2, b2): + """以封闭形式计算 KL(Beta(a1, b1) ‖ Beta(a2, b2))。""" + return (betaln(a2, b2) - betaln(a1, b1) + + (a1 - a2) * digamma(a1) + (b1 - b2) * digamma(b1) + + (a2 - a1 + b2 - b1) * digamma(a1 + b1)) + +def log_chernoff_coef_beta(ϕ, a1, b1, a2, b2): + """以封闭形式计算 Beta(a1, b1) 和 Beta(a2, b2) 的 log ρ(ϕ)。""" + return (betaln(ϕ * a1 + (1 - ϕ) * a2, ϕ * b1 + (1 - ϕ) * b2) + - ϕ * betaln(a1, b1) - (1 - ϕ) * betaln(a2, b2)) + +def chernoff_beta(a1, b1, a2, b2): + """计算两个Beta密度的切尔诺夫熵及使其最小化的 ϕ。""" + res = minimize_scalar(log_chernoff_coef_beta, bounds=(0, 1), + args=(a1, b1, a2, b2), method='bounded') + return -res.fun, res.x + +mass_out = beta_dist.cdf(1e-5, 0.1, 0.2) + beta_dist.sf(1 - 1e-5, 0.1, 0.2) +print(f"Mass of Beta(0.1, 0.2) outside [1e-5, 1-1e-5] = {mass_out:.3f}") +``` ```{code-cell} ipython3 :tags: [hide-input] @@ -389,29 +504,23 @@ distribution_pairs = [ # 创建比较表 results = [] -for i, ((f_a, f_b), (g_a, g_b)) in enumerate(distribution_pairs): - f = jit(lambda x, a=f_a, b=f_b: p(x, a, b)) - g = jit(lambda x, a=g_a, b=g_b: p(x, a, b)) - kl_fg = compute_KL(f, g) - kl_gf = compute_KL(g, f) - js_div = compute_JS(f, g) - chernoff_ent, _ = compute_chernoff_entropy(f, g) +for (f_a, f_b), (g_a, g_b) in distribution_pairs: + f_pair = jit(lambda x, a=f_a, b=f_b: p(x, a, b)) + g_pair = jit(lambda x, a=g_a, b=g_b: p(x, a, b)) results.append({ 'Pair (f, g)': f"\\text{{Beta}}({f_a},{f_b}), \\text{{Beta}}({g_a},{g_b})", - 'KL(f, g)': f"{kl_fg:.4f}", - 'KL(g, f)': f"{kl_gf:.4f}", - 'JS': f"{js_div:.4f}", - 'C': f"{chernoff_ent:.4f}" + 'KL(f, g)': KL_beta(f_a, f_b, g_a, g_b), + 'KL(g, f)': KL_beta(g_a, g_b, f_a, f_b), + 'JS': compute_JS(f_pair, g_pair), + 'C': chernoff_beta(f_a, f_b, g_a, g_b)[0] }) -df = pd.DataFrame(results) # 按JS散度排序 -df['JS_numeric'] = df['JS'].astype(float) -df = df.sort_values('JS_numeric').drop('JS_numeric', axis=1) +df = pd.DataFrame(results).sort_values('JS') columns = ' & '.join([f'\\text{{{col}}}' for col in df.columns]) rows = ' \\\\\n'.join( - [' & '.join([f'{val}' for val in row]) + [' & '.join([row[0]] + [f'{val:.4f}' for val in row[1:]]) for row in df.values]) latex_code = rf""" @@ -425,14 +534,20 @@ latex_code = rf""" display(Math(latex_code)) ``` -当我们改变Beta分布的参数时,我们可以清楚地看到各种散度测度之间的协同变化。 +JS散度和切尔诺夫熵对这十四对分布的排序相同。 + +两个KL散度对它们的排序则有所不同。 + +对于 $g = $ Beta$(0.1, 0.2)$,$KL(g, f)$ 在表中是迄今为止最大的,因为 $g$ 的大部分质量集中在端点附近,而在那里 $g$ 远大于 $f = 1$。 + +对于 $g = $ Beta$(4, 1)$ 和 Beta$(5, 1)$,$KL(f, g)$ 超过了其在 Beta$(0.1, 0.2)$ 情形下的值,因为这些 $g$ 在 $0$ 处趋于零,而 $f = 1$。 接下来我们可视化KL散度、JS散度和切尔诺夫熵之间的关系。 ```{code-cell} ipython3 -kl_fg_values = [float(result['KL(f, g)']) for result in results] -js_values = [float(result['JS']) for result in results] -chernoff_values = [float(result['C']) for result in results] +kl_fg_values = [result['KL(f, g)'] for result in results] +js_values = [result['JS'] for result in results] +chernoff_values = [result['C'] for result in results] fig, axes = plt.subplots(1, 2, figsize=(12, 5)) @@ -471,13 +586,13 @@ def plot_dist_diff(para_grid): fig, axes = plt.subplots(3, 2, figsize=(15, 12)) divergence_data = [] - for i, ((f_a, f_b), (g_a, g_b)) in enumerate(param_grid): + for i, ((f_a, f_b), (g_a, g_b)) in enumerate(para_grid): row, col = divmod(i, 2) f = jit(lambda x, a=f_a, b=f_b: p(x, a, b)) g = jit(lambda x, a=g_a, b=g_b: p(x, a, b)) - kl_fg = compute_KL(f, g) + kl_fg = KL_beta(f_a, f_b, g_a, g_b) js_div = compute_JS(f, g) - chernoff_ent, _ = compute_chernoff_entropy(f, g) + chernoff_ent, _ = chernoff_beta(f_a, f_b, g_a, g_b) divergence_data.append({ 'f_params': (f_a, f_b), 'g_params': (g_a, g_b), @@ -506,54 +621,409 @@ def plot_dist_diff(para_grid): divergence_data = plot_dist_diff(param_grid) ``` +(dm_kl_mle)= ## KL散度和最大似然估计 -给定n个观测样本 $X = \{x_1, x_2, \ldots, x_n\}$,**经验分布**为 +设 $x_1, x_2, \ldots, x_N$ 是从密度 $p_0$ 中独立同分布抽取的样本。 + +统计学家通过最大似然法拟合参数密度族 $\{p_\theta\}$。 + +**经验分布** $p_e$ 对每个观测值赋予概率 $1/N$: + +$$ +p_e(x) = \frac{1}{N} \sum_{i=1}^N \delta(x - x_i) , +$$ + +其中 $\delta(x - x_i)$ 是中心在 $x_i$ 的狄拉克德尔塔函数;它满足对于 $x \neq x_i$ 有 $\delta(x - x_i) = 0$,且 $\int \delta(x - x_i) \, dx = 1$。 -$$p_e(x) = \frac{1}{n} \sum_{i=1}^n \delta(x - x_i)$$ +参数 $\theta$ 的对数似然函数为 -其中 $\delta(x - x_i)$ 是中心在 $x_i$ 的狄拉克德尔塔函数: +$$ +\ell_N(\theta) = \sum_{i=1}^N \log p_\theta(x_i) . +$$ + +平均对数似然是在 $p_e$ 下的期望: $$ -\delta(x - x_i) = \begin{cases} -+\infty & \text{如果 } x = x_i \\ -0 & \text{如果 } x \neq x_i -\end{cases} +\frac{1}{N} \ell_N(\theta) = \int p_e(x) \log p_\theta(x) \, dx = - H(p_e, p_\theta) , $$ -- **离散概率测度**:对每个观测数据点赋予概率 $\frac{1}{n}$ -- **经验期望**:$\langle X \rangle_{p_e} = \frac{1}{n} \sum_{i=1}^n x_i = \bar{\mu}$ -- **支撑集**:仅在观测数据点 $\{x_1, x_2, \ldots, x_n\}$ 上 +其中 $H(p_e, p_\theta)$ 是上文入门部分定义的交叉熵。 + +最大似然法选择 $\theta$ 以最小化交叉熵 $H(p_e, p_\theta)$。 + +KL散度 $D_{KL}(p_e \| p_\theta)$ 在这里没有用处。 + +当 $p_\theta$ 是一个密度函数时,$p_e$ 将概率一赋予有限集合 $\{x_1, \ldots, x_N\}$,而 $p_\theta$ 对该集合赋予的概率为零。 + +因此 $p_e$ 相对于 $p_\theta$ 不是绝对连续的,对于任意 $\theta$ 都有 $D_{KL}(p_e \| p_\theta) = +\infty$。 -从经验分布 $p_e$ 到参数模型 $p_\theta(x)$ 的KL散度为: +KL散度是通过总体分布引入的。 -$$D_{KL}(p_e \parallel p_\theta) = \int p_e(x) \log \frac{p_e(x)}{p_\theta(x)} dx$$ +根据强大数定律,对每个 $\theta$ -利用狄拉克德尔塔函数的数学性质,可得 +$$ +\frac{1}{N} \ell_N(\theta) \rightarrow E_{p_0} \log p_\theta(X) = - H(p_0) - D_{KL}(p_0 \| p_\theta) +\quad \text{几乎必然成立}, +$$ -$$D_{KL}(p_e \parallel p_\theta) = \sum_{i=1}^n \frac{1}{n} \log \frac{\left(\frac{1}{n}\right)}{p_\theta(x_i)}$$ +其中等式来自密度情形下的 {eq}`eq:KLcross`,并且我们假设熵 $H(p_0)$ 是有限的。 -$$= \frac{1}{n} \sum_{i=1}^n \log \frac{1}{n} - \frac{1}{n} \sum_{i=1}^n \log p_\theta(x_i)$$ +熵 $H(p_0)$ 不依赖于 $\theta$。 -$$= -\log n - \frac{1}{n} \sum_{i=1}^n \log p_\theta(x_i)$$ +最大似然法是对 $\theta$ 最小化 $D_{KL}(p_0 \| p_\theta)$ 的样本类比。 -由于参数 $\theta$ 的对数似然函数为: +如果对于某个 $\theta_0$ 有 $p_0 = p_{\theta_0}$,则吉布斯不等式意味着 $\theta_0$ 使 $D_{KL}(p_0 \| p_\theta)$ 最小化。 + +如果该分布族中没有任何成员等于 $p_0$,那么在正则条件下,最大似然估计量会收敛到**伪真值** $$ -\ell(\theta; X) = \sum_{i=1}^n \log p_\theta(x_i) , +\theta^* = \arg\min_\theta D_{KL}(p_0 \| p_\theta) , $$ -因此最大似然选择参数以最小化 +即该分布族中在KL散度意义下最接近 $p_0$ 的成员 {cite}`White1982`。 + +在积分号下求导可得 + +$$ +\nabla_\theta D_{KL}(p_0 \| p_\theta) = - E_{p_0} \nabla_\theta \log p_\theta(X) . +$$ -$$ D_{KL}(p_e \parallel p_\theta) $$ +期望得分是KL散度的负梯度,并且在 $\theta^*$ 处为零。 -因此,MLE等价于最小化从经验分布到统计模型$p_\theta$的KL散度。 +{doc}`gallant_tauchen` 基于这一事实构建了一个估计量。 + +{doc}`mle` 描述了如何计算最大似然估计。 + +{ref}`div_ex3` 将一个设定有误的贝塔模型拟合到由混合分布生成的数据上。 ## 相关讲座 本讲座介绍了我们将在其他地方遇到的工具。 -- 其他应用散度度量与统计推断之间联系的quantecon讲座包括{doc}`likelihood_ratio_process`、{doc}`wald_friedman`和{doc}`mix_model`。 +- 其他应用散度度量与统计推断之间联系的 quantecon 讲座包括 {doc}`likelihood_ratio_process`、{doc}`wald_friedman` 和 {doc}`mix_model`。 + +- 在研究 Lawrence Blume 和 David Easley 的异质信念和金融市场模型的 {doc}`likelihood_ratio_process_2` 中,统计散度函数也占据核心地位。 + +- {doc}`imp_sample` 使用了 $\chi^2$ 散度 $\chi^2(f\|q) = \int (f - q)^2 / q \, dx = \int f^2/q \, dx - 1$,该值等于重要性权重 $f/q$ 在 $q$ 下的方差。 + +- {doc}`merging_of_opinions` 使用了巴塔查里亚系数(又称海林格亲和度)来判断两个贝叶斯学派的观点何时会趋于一致。 + +## 练习 + +```{exercise} +:label: div_ex1 + +设 $X \sim \text{Beta}(a, b)$,其在 $(0,1)$ 上的密度为 $x^{a-1}(1-x)^{b-1}/B(a,b)$。 + +1. 对 $B(a,b) = \int_0^1 x^{a-1}(1-x)^{b-1} dx$ 关于 $a$ 和 $b$ 求导,证明 $E \log X = \psi(a) - \psi(a+b)$ 以及 $E \log(1-X) = \psi(b) - \psi(a+b)$。 +2. 利用第 1 部分推导出上文所述 $D_{KL}\bigl(\text{Beta}(a_1,b_1)\,\|\,\text{Beta}(a_2,b_2)\bigr)$ 的闭式解。 +3. 证明当 $f$ 和 $g$ 是贝塔密度时,$f^\phi g^{1-\phi}$ 正比于某个贝塔密度,并利用这一事实推导出 $\rho(\phi)$ 的闭式解。 +4. 设 $f = \text{Beta}(1,1)$,$g = \text{Beta}(0.1, 0.2)$。通过对截断区间 $[10^{-5}, 1-10^{-5}]$ 应用 `quad`,计算 $KL(g, f)$、$JS(f, g)$ 和 $C(f, g)$。将结果与上表中的值进行比较,并解释差异的原因。 +``` + +```{solution-start} div_ex1 +:class: dropdown +``` + +**第 1 部分。** 在积分号下求导,可得 + +$$ +\frac{\partial B(a,b)}{\partial a} = \int_0^1 \log x \; x^{a-1}(1-x)^{b-1} dx = B(a,b) \, E \log X . +$$ + +由于 $B(a,b) = \Gamma(a)\Gamma(b)/\Gamma(a+b)$, + +$$ +E \log X = \frac{\partial \log B(a,b)}{\partial a} = \psi(a) - \psi(a+b) . +$$ + +用 $b$ 代替 $a$ 做相同的论证,可得 $E \log(1-X) = \psi(b) - \psi(a+b)$。 + +**第 2 部分。** 设 $f = \text{Beta}(a_1, b_1)$,$g = \text{Beta}(a_2, b_2)$。 + +则 + +$$ +\log f(x) - \log g(x) = (a_1 - a_2) \log x + (b_1 - b_2) \log(1-x) + \log B(a_2, b_2) - \log B(a_1, b_1) . +$$ + +对 $f$ 取期望并利用第 1 部分,可得 + +$$ +D_{KL}(f\|g) = \log\frac{B(a_2,b_2)}{B(a_1,b_1)} ++ (a_1 - a_2)\bigl[\psi(a_1) - \psi(a_1+b_1)\bigr] ++ (b_1 - b_2)\bigl[\psi(b_1) - \psi(a_1+b_1)\bigr] , +$$ + +整理后即可得到正文中的公式。 + +**第 3 部分。** 设 $a_\phi = \phi a_1 + (1-\phi) a_2$,$b_\phi = \phi b_1 + (1-\phi) b_2$。 + +则 + +$$ +f(x)^\phi g(x)^{1-\phi} = \frac{x^{a_\phi - 1}(1-x)^{b_\phi - 1}}{B(a_1,b_1)^\phi B(a_2,b_2)^{1-\phi}} , +$$ + +这正比于 Beta$(a_\phi, b_\phi)$ 的密度。 + +在 $(0,1)$ 上积分,可得 + +$$ +\rho(\phi) = \frac{B(a_\phi, b_\phi)}{B(a_1,b_1)^\phi B(a_2,b_2)^{1-\phi}} . +$$ + +**第 4 部分。** 以下代码在截断区间上重复了上述计算。 + +```{code-cell} ipython3 +def KL_truncated(f, g): + """KL(f, g) by quad over [1e-5, 1-1e-5].""" + integrand = lambda w: f(w) * np.log(f(w) / g(w)) + return quad(integrand, 1e-5, 1 - 1e-5)[0] + +def chernoff_truncated(f, g): + """Chernoff entropy by quad over [1e-5, 1-1e-5].""" + ρ = lambda ϕ: quad(lambda w: f(w)**ϕ * g(w)**(1-ϕ), + 1e-5, 1 - 1e-5)[0] + res = minimize_scalar(ρ, bounds=(0, 1), method='bounded') + return -np.log(res.fun) + +f_ex = jit(lambda x: p(x, 1, 1)) +g_ex = jit(lambda x: p(x, 0.1, 0.2)) +m_ex = lambda x: 0.5 * (f_ex(x) + g_ex(x)) + +truncated = [KL_truncated(g_ex, f_ex), + 0.5 * KL_truncated(f_ex, m_ex) + 0.5 * KL_truncated(g_ex, m_ex), + chernoff_truncated(f_ex, g_ex)] +accurate = [KL_beta(0.1, 0.2, 1, 1), + compute_JS(f_ex, g_ex), + chernoff_beta(1, 1, 0.1, 0.2)[0]] + +for name, t, a in zip(['KL(g, f)', 'JS(f, g)', 'C(f, g)'], truncated, accurate): + print(f"{name}: truncated = {t:.4f}, accurate = {a:.4f}") +print(f"Mass of g outside the truncated interval = {mass_out:.4f}") +``` + +密度 $g = \text{Beta}(0.1, 0.2)$ 有四分之一的概率质量落在 $[10^{-5}, 1-10^{-5}]$ 之外,而在该区域 $g$ 的值极大,$f = 1$。 + +$KL(g, f) = \int g \log g$ 中被忽略的部分很大,因为那里的 $\log g$ 很大。 + +$JS(f, g)$ 中被忽略的部分接近 $\frac{1}{2} \times 0.25 \times \log 2 \approx 0.087$,因为在 $g \gg f$ 的地方,$g \log\bigl(2g/(f+g)\bigr) \approx g \log 2$。 + +截断同样会漏算 $\rho(\phi)$ 的一部分,这会降低 $\rho$ 的值,并使计算得到的切尔诺夫熵偏高。 + +```{solution-end} +``` + +```{exercise} +:label: div_ex2 + +设 $f$ 和 $g$ 是在同一集合上为正的密度,并令 $\rho(\phi) = \int f^\phi g^{1-\phi} dx$。 + +1. 利用赫尔德不等式证明 $\log \rho(\phi)$ 在 $[0,1]$ 上是凸函数。 +2. 证明 $\log\rho(0) = \log\rho(1) = 0$,$\log \rho$ 在 $\phi = 0$ 处的导数为 $-D_{KL}(g\|f)$,在 $\phi = 1$ 处的导数为 $D_{KL}(f\|g)$。 +3. 由此推导出 {eq}`eq:chernoff_sandwich` 中的界。 +4. 对上表中的每一对分布进行数值验证,并针对我们例子中的 $f$ 和 $g$,绘制 $-\log\rho(\phi)$ 及其两条切线。 +``` + +```{solution-start} div_ex2 +:class: dropdown +``` + +**第 1 部分。** 取 $\phi_1, \phi_2 \in [0,1]$,$\lambda \in (0,1)$,令 $\phi = \lambda \phi_1 + (1-\lambda) \phi_2$。 + +写成 + +$$ +f^\phi g^{1-\phi} = \left(f^{\phi_1} g^{1-\phi_1}\right)^{\lambda} \left(f^{\phi_2} g^{1-\phi_2}\right)^{1-\lambda} . +$$ + +以指数 $1/\lambda$ 和 $1/(1-\lambda)$ 应用赫尔德不等式,可得 + +$$ +\rho(\phi) \le \rho(\phi_1)^{\lambda} \rho(\phi_2)^{1-\lambda} . +$$ + +取对数即得 $\log \rho(\phi) \le \lambda \log\rho(\phi_1) + (1-\lambda) \log\rho(\phi_2)$。 + +**第 2 部分。** 因为 $f$ 和 $g$ 在同一集合上为正,所以 $\rho(0) = \int g = 1$,$\rho(1) = \int f = 1$。 + +在积分号下求导,可得 + +$$ +\frac{d \log \rho(\phi)}{d\phi} = \frac{1}{\rho(\phi)} \int f^\phi g^{1-\phi} \log \frac{f}{g} \, dx . +$$ + +在 $\phi = 0$ 处,导数为 $\int g \log(f/g) = -D_{KL}(g\|f)$。 + +在 $\phi = 1$ 处,导数为 $\int f \log(f/g) = D_{KL}(f\|g)$。 + +**第 3 部分。** 下界成立是因为 $C(f,g) = -\min_\phi \log\rho(\phi) \ge -\log \rho(1/2)$。 + +凸函数位于其切线之上,所以 + +$$ +\log \rho(\phi) \ge -\phi\, D_{KL}(g\|f) +\quad \text{且} \quad +\log \rho(\phi) \ge -(1-\phi)\, D_{KL}(f\|g) . +$$ + +因此 + +$$ +-\log\rho(\phi) \le \min\bigl\{\phi\, D_{KL}(g\|f),\ (1-\phi)\, D_{KL}(f\|g)\bigr\} . +$$ + +右边在两条直线相交处取得最大值,即在 $\phi = D_{KL}(f\|g)/\bigl(D_{KL}(f\|g) + D_{KL}(g\|f)\bigr)$ 处,此时右边等于 $D_{KL}(f\|g)\, D_{KL}(g\|f)/\bigl(D_{KL}(f\|g) + D_{KL}(g\|f)\bigr)$。 + +对左边关于 $\phi$ 取最大值,即得中间的不等式。 + +最后一个不等式成立是因为对正数 $x$ 和 $y$,有 $xy/(x+y) \le \min\{x, y\}$。 + +**第 4 部分。** 我们对上表中的每一对分布检验这些界。 + +```{code-cell} ipython3 +for (f_a, f_b), (g_a, g_b) in distribution_pairs: + K_fg = KL_beta(f_a, f_b, g_a, g_b) + K_gf = KL_beta(g_a, g_b, f_a, f_b) + lower = -log_chernoff_coef_beta(0.5, f_a, f_b, g_a, g_b) + C, _ = chernoff_beta(f_a, f_b, g_a, g_b) + upper = K_fg * K_gf / (K_fg + K_gf) + holds = lower <= C <= upper <= min(K_fg, K_gf) + print(f"Beta({g_a},{g_b}): {lower:.4f} ≤ {C:.4f} ≤ {upper:.4f} " + f"≤ {min(K_fg, K_gf):.4f} {holds}") +``` + +下图针对 $f = \text{Beta}(1,1)$ 和 $g = \text{Beta}(3,1.2)$,绘制了 $-\log \rho(\phi)$ 及其两条切线。 + +```{code-cell} ipython3 +ϕ_grid = np.linspace(0, 1, 200) +K_fg = KL_beta(F_a, F_b, G_a, G_b) +K_gf = KL_beta(G_a, G_b, F_a, F_b) +C_ex, ϕ_star = chernoff_beta(F_a, F_b, G_a, G_b) + +fig, ax = plt.subplots(figsize=(8, 5)) +ax.plot(ϕ_grid, -log_chernoff_coef_beta(ϕ_grid, F_a, F_b, G_a, G_b), + lw=2, label=r'$-\log \rho(\phi)$') +ax.plot(ϕ_grid, ϕ_grid * K_gf, 'k--', lw=1, + label=r'$\phi \, D_{KL}(g\|f)$') +ax.plot(ϕ_grid, (1 - ϕ_grid) * K_fg, 'k:', lw=1, + label=r'$(1-\phi) \, D_{KL}(f\|g)$') +ax.axhline(C_ex, color='C1', lw=1, label=r'$C(f,g)$') +ax.axvline(ϕ_star, color='C1', lw=1, ls='--') +ax.set_ylim(0, 0.4) +ax.set_xlabel(r'$\phi$') +ax.legend() +plt.show() +``` + +```{solution-end} +``` + +```{exercise} +:label: div_ex3 + +设数据 $x_1, \ldots, x_N$ 是从以下混合分布中独立同分布抽取的样本 + +$$ +h(x) = \frac{1}{2} f(x) + \frac{1}{2} g(x) +$$ + +其中 $f = \text{Beta}(1,1)$ 和 $g = \text{Beta}(3, 1.2)$ 是我们例子中的密度。 + +一位统计学家用最大似然法拟合 Beta$(a, b)$ 分布族。 + +该分布族不包含 $h$。 + +1. 证明伪真值 $(a^*, b^*) = \arg\min_{a,b} D_{KL}\bigl(h \,\|\, \text{Beta}(a,b)\bigr)$ 满足方程 $\psi(a) - \psi(a+b) = E_h \log X$ 和 $\psi(b) - \psi(a+b) = E_h \log (1-X)$。 +2. 证明最大似然估计量 $(\hat a_N, \hat b_N)$ 满足相同的方程,只是其中的期望被替换为 $\log x_i$ 和 $\log(1-x_i)$ 的样本均值。 +3. 计算 $(a^*, b^*)$,并将 $h$ 与 Beta$(a^*, b^*)$ 密度绘制在一起进行比较。 +4. 模拟样本量为 $N = 10^2, 10^3, \ldots, 10^6$ 的样本,验证 $(\hat a_N, \hat b_N)$ 是否趋近于 $(a^*, b^*)$。 +``` + +```{solution-start} div_ex3 +:class: dropdown +``` + +**第 1、2 部分。** Beta$(a,b)$ 的对数密度为 + +$$ +\log p_{a,b}(x) = (a-1) \log x + (b-1) \log(1-x) - \log B(a,b) . +$$ + +因此 + +$$ +D_{KL}(h \| p_{a,b}) = E_h \log h(X) + Q(a, b; s_1, s_2), +\qquad +Q(a, b; s_1, s_2) = \log B(a,b) - (a-1) s_1 - (b-1) s_2 , +$$ + +其中 $s_1 = E_h \log X$,$s_2 = E_h \log(1-X)$。 + +平均负对数似然为 $-\ell_N(a,b)/N = Q(a, b; \hat s_1, \hat s_2)$,其中 $\hat s_1$ 和 $\hat s_2$ 分别是 $\log x_i$ 和 $\log(1-x_i)$ 的样本均值。 -- 在研究Lawrence Blume和David Easley的异质信念和金融市场模型的{doc}`likelihood_ratio_process_2`中,统计散度函数也占据核心地位。 +函数 $\log B(a,b)$ 是凸函数,因此 $Q$ 关于 $(a, b)$ 也是凸函数。 +根据 {ref}`div_ex1` 第 1 部分,$\partial \log B(a,b)/\partial a = \psi(a) - \psi(a+b)$,$\partial \log B(a,b)/\partial b = \psi(b) - \psi(a+b)$。 + +令 $Q$ 的梯度为零,即可得到题目所述的方程,其中伪真值对应 $(s_1, s_2)$,最大似然估计量对应 $(\hat s_1, \hat s_2)$。 + +**第 3 部分。** 根据 {ref}`div_ex1` 第 1 部分及期望的线性性,可得 $s_1$ 和 $s_2$ 的闭式解。 + +我们在 $(\log a, \log b)$ 上对 $Q$ 进行最小化,以保证 $a$ 和 $b$ 为正。 + +```{code-cell} ipython3 +from scipy.optimize import minimize + +def Q(z, s1, s2): + a, b = np.exp(z) + return betaln(a, b) - (a - 1) * s1 - (b - 1) * s2 + +def fit_beta(s1, s2): + res = minimize(Q, x0=np.zeros(2), args=(s1, s2), method='BFGS') + return np.exp(res.x) + +E_log_x = lambda a, b: digamma(a) - digamma(a + b) +s1 = 0.5 * E_log_x(F_a, F_b) + 0.5 * E_log_x(G_a, G_b) +s2 = 0.5 * E_log_x(F_b, F_a) + 0.5 * E_log_x(G_b, G_a) + +a_star, b_star = fit_beta(s1, s2) +print(f"pseudo-true value: a* = {a_star:.4f}, b* = {b_star:.4f}") + +h = lambda x: 0.5 * p(x, F_a, F_b) + 0.5 * p(x, G_a, G_b) +p_star = lambda x: p(x, a_star, b_star) +print(f"KL(h, Beta(a*, b*)) = {compute_KL(h, p_star):.4f}") + +x_grid = np.linspace(0.001, 0.999, 500) +plt.figure(figsize=(8, 5)) +plt.plot(x_grid, h(x_grid), lw=2, label='$h$ (data)') +plt.plot(x_grid, p_star(x_grid), lw=2, ls='--', + label=f'Beta({a_star:.3f}, {b_star:.3f})') +plt.xlabel('x') +plt.ylabel('density') +plt.legend() +plt.show() +``` + +**第 4 部分。** 我们从 $h$ 中抽取样本,并根据样本矩计算 $(\hat a_N, \hat b_N)$。 + +```{code-cell} ipython3 +rng = np.random.default_rng(1234) + +for N in [10**2, 10**3, 10**4, 10**5, 10**6]: + from_f = rng.random(N) < 0.5 + x = np.where(from_f, rng.beta(F_a, F_b, N), rng.beta(G_a, G_b, N)) + a_hat, b_hat = fit_beta(np.mean(np.log(x)), np.mean(np.log1p(-x))) + print(f"N = {N:>7}: a_hat = {a_hat:.4f}, b_hat = {b_hat:.4f}") +``` + +这些估计值逐渐趋近于 $(a^*, b^*)$,即贝塔分布族中在 KL 散度意义下最接近 $h$ 的成员。 + +{doc}`mix_model` 研究了一位贝叶斯主义者,其模型只包含 $f$ 和 $g$,却观测到来自 $h$ 的数据;从 $h$ 到 $f$ 和到 $g$ 的 KL 散度决定了该贝叶斯主义者信念的最终落点。 + +{doc}`gallant_tauchen` 将辅助模型的伪真值用作某个估计量的目标。 + +```{solution-end} +``` diff --git a/lectures/exchangeable.md b/lectures/exchangeable.md index 2a96ea09..c64ec78f 100644 --- a/lectures/exchangeable.md +++ b/lectures/exchangeable.md @@ -18,6 +18,7 @@ translation: A setting in which past observations are informative: 过去观测具有信息性的情况 Relationship between IID and exchangeable: IID和可交换之间的关系 Exchangeability: 可交换性 + Exchangeability::De Finetti's theorem: 德菲内蒂定理 Bayes' Law: 贝叶斯定律 More details about Bayesian updating: 关于贝叶斯更新的更多细节 More details about Bayesian updating::The likelihood ratio: 似然比 @@ -29,9 +30,10 @@ translation: Appendix::Rates of convergence: 收敛速率 Appendix::Graph of ensemble dynamics of $\pi_t$: $\pi_t$ 的集合动态图 Sequels: 后续内容 + Exercises: 练习 --- -(odu_v3)= +(exchangeable)= ```{raw} jupyter
@@ -50,13 +52,13 @@ translation: 本讲座研究通过贝叶斯定律进行的学习。 -我们涉及由Bruno DeFinetti {cite}`definetti`发明的贝叶斯统计推断的基础。 +我们涉及由 {cite:t}`definetti` 发明的贝叶斯统计推断的基础。 -DeFinetti的工作对经济学家的相关性在David Kreps的{cite}`Kreps88`第11章中得到了有力的阐述。 +德·芬内蒂的工作对经济学家的相关性在David Kreps的 {cite}`Kreps88` 第11章中得到了有力的阐述。 我们下面研究的一个例子是 {doc}`odu` 的一个关键组成部分。 -该讲座扩充了McCall的经典工作搜索模型{cite}`McCall1970`(在 {doc}`mccall_model` 中研究过),通过为失业劳动者提供一个统计推断问题来展示。 +该讲座扩充了McCall的经典工作搜索模型 {cite}`McCall1970` (在 {doc}`mccall_model` 中研究过),通过为失业劳动者提供一个统计推断问题来展示。 我们创建图表来说明似然比在贝叶斯定律中所起的作用。 @@ -65,15 +67,19 @@ DeFinetti的工作对经济学家的相关性在David Kreps的{cite}`Kreps88`第 除此之外,本讲座还讨论了随机变量序列的统计概念之间的联系,这些序列是: - 独立同分布的 -- 可交换的(也称为*条件*独立同分布) +- 可交换的 理解这些概念对于领会贝叶斯更新的工作原理至关重要。 -你可以在[这里](https://en.wikipedia.org/wiki/Exchangeable_random_variables)阅读关于可交换性的内容。 +你可以在 [这里](https://en.wikipedia.org/wiki/Exchangeable_random_variables) 阅读关于可交换性的内容。 -因为**可交换性**的另一个术语是**条件独立性**,我们想要回答*基于什么条件*这个问题。 +德·芬内蒂定理指出,一个无限可交换序列是**条件独立同分布**的:它在以观察者未知其取值的某个随机变量为条件时是独立同分布的。[^condind] -我们还要解释为什么独立性假设阻碍了学习,而条件独立性假设使学习成为可能。 +我们想要回答*基于什么条件*这个问题。 + +我们还要解释为什么独立性假设阻碍了学习,而序列条件独立同分布的假设使学习成为可能。 + +[^condind]: 仅有条件独立并不意味着可交换性。设 $W_t = t \theta + \varepsilon_t$,其中 $\theta$ 是一个随机变量,$\{\varepsilon_t\}$ 是独立于 $\theta$ 的独立同分布 $N(0,1)$ 序列。在以 $\theta$ 为条件时,$W_t$ 是独立的,但它们并非同分布,因此序列 $\{W_t\}$ 不是可交换的。 在下文中,我们经常使用 @@ -97,6 +103,7 @@ from math import gamma import numpy as np import scipy.optimize as op from scipy.integrate import quad +from scipy.special import expit ``` ## 独立同分布 @@ -111,19 +118,19 @@ from scipy.integrate import quad - **同分布** -如果一个序列$W_0, W_1, \ldots$的联合概率密度等于序列各个组成部分的密度的**乘积**,则称该序列是**独立分布**的。 +如果对于每个$n \geq 0$,$W_0, W_1, \ldots, W_n$的联合概率密度等于$W_0, W_1, \ldots, W_n$的边际密度的**乘积**,则称序列$W_0, W_1, \ldots$是**独立分布**的。 如果序列$W_0, W_1, \ldots$是**独立同分布**的(IID),那么除了独立性之外,对于所有$t =0, 1, \ldots$,$W_t$的边际密度都相同。 -例如,设$p(W_0, W_1, \ldots)$为序列的**联合密度**,$p(W_t)$为特定$W_t$的**边际密度**(对所有$t =0, 1, \ldots$成立)。 +例如,设$p(W_0, W_1, \ldots, W_n)$为$W_0, W_1, \ldots, W_n$的**联合密度**,$p(W_t)$为每个$W_t$共同的**边际密度**。 -那么,如果序列$W_0, W_1, \ldots$是IID的,则其联合密度满足: +那么,序列$W_0, W_1, \ldots$是IID的,当且仅当 $$ -p(W_0, W_1, \ldots) = p(W_0) p(W_1) \cdots +p(W_0, W_1, \ldots, W_n) = p(W_0) p(W_1) \cdots p(W_n) \quad \text{对所有 } n \geq 0 \text{ 成立} $$ -因此联合密度是一系列相同边际密度的乘积。 +因此每个联合密度都是一系列相同边际密度的乘积。 ### IID意味着过去的观测不能告诉我们任何关于未来观测的信息 @@ -207,16 +214,18 @@ $$ ## IID和可交换之间的关系 -在自然选择$F$的条件下,序列$W_0, W_1, \ldots$的联合密度是 +在自然选择$F$的条件下,$W_0, W_1, \ldots, W_n$的联合密度是 $$ -f(W_0) f(W_1) \cdots +f(W_0) f(W_1) \cdots f(W_n) $$ -在自然选择$G$的条件下,序列$W_0, W_1, \ldots$的联合密度为 +对任意 $n \geq 0$ 都成立。 + +在自然选择$G$的条件下,$W_0, W_1, \ldots, W_n$的联合密度为 $$ -g(W_0) g(W_1) \cdots +g(W_0) g(W_1) \cdots g(W_n) $$ 因此,**在自然选择**$F$**的条件下**,序列$W_0, W_1, \ldots$是独立同分布的。 @@ -225,23 +234,27 @@ $$ 但是部分历史的**无条件分布**又如何呢? -$W_0, W_1, \ldots$的无条件分布显然是 +$W_0, W_1, \ldots, W_n$的无条件联合密度显然是 ```{math} :label: eq_definetti -h(W_0, W_1, \ldots ) \equiv \tilde \pi [f(W_0) f(W_1) \cdots \ ] + ( 1- \tilde \pi) [g(W_0) g(W_1) \cdots \ ] +h(W_0, W_1, \ldots, W_n ) \equiv \tilde \pi [f(W_0) f(W_1) \cdots f(W_n)] + ( 1- \tilde \pi) [g(W_0) g(W_1) \cdots g(W_n)], \quad n \geq 0 ``` -在无条件分布$h(W_0, W_1, \ldots )$下,序列$W_0, W_1, \ldots$**不是**独立同分布的。 +在无条件分布 {eq}`eq_definetti` 下,序列$W_0, W_1, \ldots$**不是**独立同分布的。 -要验证这个说法,只需注意到,例如 +要验证这个说法,设 $h(W_t) = \tilde \pi f(W_t) + (1-\tilde \pi) g(W_t)$ 为 $W_t$ 的边缘密度。 -$$ -h(W_0, W_1) = \tilde \pi f(W_0)f (W_1) + (1 - \tilde \pi) g(W_0)g(W_1) \neq - (\tilde \pi f(W_0) + (1-\tilde \pi) g(W_0))( - \tilde \pi f(W_1) + (1-\tilde \pi) g(W_1)) -$$ +那么 + +```{math} +:label: eq_hcov + +h(W_0, W_1) - h(W_0) h(W_1) = \tilde \pi (1 - \tilde \pi) \bigl(f(W_0) - g(W_0)\bigr) \bigl(f(W_1) - g(W_1)\bigr) +``` + +当 $f(W_0) \neq g(W_0)$ 且 $f(W_1) \neq g(W_1)$ 时,上式右边不为零,因此联合密度 $h(W_0, W_1)$ 不等于边缘密度 $h(W_0)$ 与 $h(W_1)$ 的乘积。 因此,条件分布 @@ -254,6 +267,8 @@ $$ 所以过去确实包含了可以用来了解未来的信息。 +练习 {ref}`exchangeable_ex1` 利用 {eq}`eq_hcov` 来说明 $W_0$ 和 $W_1$ 是正相关的。 + ## 可交换性 虽然序列 $W_0, W_1, \ldots$ 不是独立同分布的,但可以验证它是**可交换的**,这意味着"重新排序"的联合分布 $h(W_0, W_1)$ 和 $h(W_1, W_0)$ 满足 @@ -270,10 +285,54 @@ $$ 贝叶斯统计学家将混合参数 $\tilde \pi \in (0,1)$ 解释为决策者的主观信念——决策者的**先验概率**——即自然选择了概率分布 $F$ 的概率。 -```{note} -DeFinetti {cite}`definetti` 建立了一个相关的可交换过程表示,该过程是通过混合参数为 $\theta \in (0,1)$ 的独立同分布伯努利随机变量序列,以及混合概率密度 $\pi(\theta)$ 得到的,贝叶斯统计学家会将这个混合概率密度解释为未知伯努利参数 $\theta$ 的先验分布。 +### 德菲内蒂定理 + +正如 {cite:t}`definetti` 所证明的,每一个无限可交换序列都是独立同分布序列的混合。 + +对于二元随机变量 $W_t \in \{0, 1\}$,德菲内蒂定理指出,无限序列 $W_0, W_1, \ldots$ 是可交换的,当且仅当存在 $[0,1]$ 上的一个概率测度 $\mu$,使得 + +```{math} +:label: eq_definetti_bernoulli + +\textrm{Prob}(W_0 = w_0, \ldots, W_{n-1} = w_{n-1}) = \int_0^1 \theta^{k} (1-\theta)^{n-k} \mu(d\theta), \quad k = \sum_{t=0}^{n-1} w_t ``` +对任意 $n \geq 1$ 和任意 $(w_0, \ldots, w_{n-1}) \in \{0,1\}^n$ 都成立。 + +混合测度 $\mu$ 是唯一的。 + +它是极限相对频率的概率分布 + +$$ +\theta = \lim_{n \rightarrow \infty} \frac{1}{n} \sum_{t=0}^{n-1} W_t , +$$ + +该极限以概率一存在。 + +给定 $\theta$ 的条件下,$W_t$ 是成功概率为 $\theta$ 的独立同分布伯努利随机变量。 + +这回答了"以什么为条件?"这个问题:以极限相对频率 $\theta$ 为条件。 + +贝叶斯统计学家将 $\mu$ 解释为对未知伯努利参数 $\theta \in [0,1]$ 的先验概率分布。 + +测度 $\mu$ 不必有密度;它可以在有限多个点上赋予正概率。 + +{cite:t}`HewittSavage1955` 将德菲内蒂定理推广到了取值于更一般空间的序列。 + +在他们的版本中,混合测度是关于 $W$ 的概率分布的概率分布,而条件变量是 $W_0, W_1, \ldots$ 的极限经验分布。 + +方程 {eq}`eq_definetti` 是其中一个实例,它采用一个两点混合测度,赋予 $F$ 概率 $\tilde \pi$,赋予 $G$ 概率 $1 - \tilde \pi$。 + +在这个实例中,$W_0, W_1, \ldots$ 的极限经验分布在自然选择了 $F$ 时为 $F$,在自然选择了 $G$ 时为 $G$。 + +德菲内蒂定理要求序列是无限的。 + +练习 {ref}`exchangeable_ex1` 描述了一个有限可交换序列,它不是独立同分布序列的混合。 + +{doc}`merging_of_opinions` 中的贝塔-伯努利模型是 {eq}`eq_definetti_bernoulli` 的一个实例,其中 $\mu$ 是贝塔分布。 + +练习 {ref}`exchangeable_ex3` 描述了一个能生成它的瓮模型方案。 + ## 贝叶斯定律 我们在上面注意到,在我们的示例模型中,从可交换但非独立同分布过程的历史数据中可以学到关于未来的一些信息。 @@ -282,7 +341,11 @@ DeFinetti {cite}`definetti` 建立了一个相关的可交换过程表示,该 以及学习什么? -*关于什么*问题的答案是 $\tilde \pi$。 +*关于什么*问题的答案是:关于自然在时间 $-1$ 选择了哪个分布,$F$ 还是 $G$。 + +决策者知道他的先验概率 $\tilde \pi$。 + +他所学到的内容体现在一个后验概率中,随着数据的到来,该后验概率会偏离 $\tilde \pi$。 *如何*问题的答案是使用贝叶斯定律。 @@ -313,7 +376,9 @@ $$ \pi_{-1} = \tilde \pi $$ -在给定 $w^t$ 条件下,$w_{t+1}$ 的分布为 +在给定 $q$ 的条件下,抽取值 $w_{t+1}$ 与历史序列 $w^t$ 相互独立。 + +在给定 $w^t$ 条件下,$w_{t+1}$ 的密度为 $$ \pi_t f + (1 - \pi_t) g . @@ -329,23 +394,25 @@ $$ (eq_Bayes102) 等式 {eq}`eq_Bayes102` 源自贝叶斯法则,该法则告诉我们 $$ -\mathbb{P}\{q = f \,|\, W = w\} -= \frac{\mathbb{P}\{W = w \,|\, q = f\}\mathbb{P}\{q = f\}} -{\mathbb{P}\{W = w\}} +\mathbb{P}\{q = f \,|\, w^{t+1}\} += \frac{p(w_{t+1} \,|\, q = f, w^t)\, \mathbb{P}\{q = f \,|\, w^t\}} +{p(w_{t+1} \,|\, w^t)} $$ -其中 +其中 $p$ 表示密度,且 $$ -\mathbb{P}\{W = w\} = \sum_{a \in \{f, g\}} \mathbb{P}\{W = w \,|\, q = a \} \mathbb{P}\{q = a \} +p(w_{t+1} \,|\, w^t) = \sum_{a \in \{f, g\}} p(w_{t+1} \,|\, q = a, w^t)\, \mathbb{P}\{q = a \,|\, w^t\} . $$ +由于在给定 $q$ 的条件下 $w_{t+1}$ 与 $w^t$ 相互独立,我们有 $p(w_{t+1} \,|\, q = f, w^t) = f(w_{t+1})$ 以及 $p(w_{t+1} \,|\, q = g, w^t) = g(w_{t+1})$。 + ## 关于贝叶斯更新的更多细节 让我们仔细观察并重新整理等式{eq}`eq_Bayes102`中表示的贝叶斯法则,目的是理解**后验**概率$\pi_{t+1}$如何受到**先验**概率$\pi_t$和**似然比**的影响 $$ -l(w) = \frac{f(w)}{g(w)} +\ell(w) = \frac{f(w)}{g(w)} $$ 我们可以方便地将更新规则{eq}`eq_Bayes102`重写为 @@ -353,7 +420,7 @@ $$ $$ \pi_{t+1} =\frac{\pi_{t}f\left(w_{t+1}\right)}{\pi_{t}f\left(w_{t+1}\right)+\left(1-\pi_{t}\right)g\left(w_{t+1}\right)} =\frac{\pi_{t}\frac{f\left(w_{t+1}\right)}{g\left(w_{t+1}\right)}}{\pi_{t}\frac{f\left(w_{t+1}\right)}{g\left(w_{t+1}\right)}+\left(1-\pi_{t}\right)} - =\frac{\pi_{t}l\left(w_{t+1}\right)}{\pi_{t}l\left(w_{t+1}\right)+\left(1-\pi_{t}\right)} + =\frac{\pi_{t}\ell\left(w_{t+1}\right)}{\pi_{t}\ell\left(w_{t+1}\right)+\left(1-\pi_{t}\right)} $$ 这意味着 @@ -361,23 +428,31 @@ $$ ```{math} :label: eq_Bayes103 -\frac{\pi_{t+1}}{\pi_{t}}=\frac{l\left(w_{t+1}\right)}{\pi_{t}l\left(w_{t+1}\right)+\left(1-\pi_{t}\right)}\begin{cases} >1 & -\text{if }l\left(w_{t+1}\right)>1\\ -\leq1 & \text{if }l\left(w_{t+1}\right)\leq1 +\frac{\pi_{t+1}}{\pi_{t}}=\frac{\ell\left(w_{t+1}\right)}{\pi_{t}\ell\left(w_{t+1}\right)+\left(1-\pi_{t}\right)}\begin{cases} >1 & +\text{if }\ell\left(w_{t+1}\right)>1\\ +\leq1 & \text{if }\ell\left(w_{t+1}\right)\leq1 \end{cases} ``` -注意似然比和先验是如何相互作用,以决定观测值$w_{t+1}$是导致决策者增加还是减少他/她对分布$F$的主观概率。 +似然比本身就决定了观测值$w_{t+1}$是导致决策者增加还是减少他/她对分布$F$的主观概率。 + +当似然比$\ell(w_{t+1})$大于1时,观测值$w_{t+1}$会将分布$F$的概率$\pi$向上推动,当似然比$\ell(w_{t+1})$小于1时,观测值$w_{t+1}$会将$\pi$向下推动。 + +先验$\pi_t$会影响变动的大小: -当似然比$l(w_{t+1})$大于1时,观测值$w_{t+1}$会将分布$F$的概率$\pi$向上推动,当似然比$l(w_{t+1})$小于1时,观测值$w_{t+1}$会将$\pi$向下推动。 +$$ +\pi_{t+1} - \pi_t = \frac{\pi_t (1 - \pi_t) \bigl(\ell(w_{t+1}) - 1\bigr)}{\pi_t \ell(w_{t+1}) + 1 - \pi_t} +$$ + +当$\pi_t$趋近于$0$或$1$时,这个变动量会收缩至零。 表达式{eq}`eq_Bayes103`是我们将用来显示由贝叶斯定律引起的$\{\pi_t\}_{t=0}^\infty$动态的一些图表的基础。 -我们将绘制 $l\left(w\right)$ 来帮助我们理解学习过程是如何进行的——即,如何通过贝叶斯更新来更新自然选择分布 $f$ 的概率 $\pi$。 +我们将绘制 $\ell\left(w\right)$ 来帮助我们理解学习过程是如何进行的——即,如何通过贝叶斯更新来更新自然选择分布 $f$ 的概率 $\pi$。 我们分三步构建这幅图景,每一步产生一张图表。 -这三张图都是由相同的素材构建的:密度函数 $f$ 和 $g$,以及似然比 $l(w) = f(w)/g(w)$ 等于1时对应的 $w$ 值。 +这三张图都是由相同的素材构建的:密度函数 $f$ 和 $g$,以及似然比 $\ell(w) = f(w)/g(w)$ 等于1时对应的 $w$ 值。 $f$ 和 $g$ 都是贝塔密度函数,所以我们先从一般的贝塔密度函数开始。 @@ -393,8 +468,13 @@ def p(w, a, b): ```{code-cell} ipython3 def create_model(F_a=1, F_b=1, G_a=3, G_b=1.2): """ - 构建密度函数f和g,以及似然比l(w) = f(w) / g(w) + 构建密度函数f和g,以及似然比ℓ(w) = f(w) / g(w) 等于1时对应的两个w值。 + + 这个根查找过程假设f是均匀分布(F_a = F_b = 1),且 + G_a > 1且G_b > 1。这样g在0和1处为零,并且在内部 + 只有一个众数,在该众数处g大于1,因此 + ℓ(w) = 1 / g(w)在g的众数两侧各恰好等于1一次。 """ f = lambda w: p(w, F_a, F_b) g = lambda w: p(w, G_a, G_b) @@ -409,7 +489,7 @@ def create_model(F_a=1, F_b=1, G_a=3, G_b=1.2): ### 似然比 -我们的第一张图将似然比 $l(w)$ 绘制在横坐标轴上,将 $w$ 绘制在纵坐标轴上。 +我们的第一张图将似然比 $\ell(w)$ 绘制在横坐标轴上,将 $w$ 绘制在纵坐标轴上。 我们采用这种方式绘制,以便 $w$ 能与接下来的两张图共享同一个坐标轴。 @@ -419,12 +499,12 @@ def plot_likelihood_ratio(F_a=1, F_b=1, G_a=3, G_b=1.2): w_grid = np.linspace(1e-12, 1 - 1e-12, 100) fig, ax = plt.subplots(figsize=(6, 5)) - ax.plot(f(w_grid) / g(w_grid), w_grid, label='$l$', lw=2) + ax.plot(f(w_grid) / g(w_grid), w_grid, label=r'$\ell$', lw=2) ax.vlines(1, 0, 1, linestyle='--') ax.hlines(roots, 0, 2, linestyle='--') ax.set_xlim(0, 2) ax.legend(loc=4) - ax.set(xlabel='$l(w) = f(w) / g(w)$', ylabel='$w$') + ax.set(xlabel=r'$\ell(w) = f(w) / g(w)$', ylabel='$w$') plt.show() ``` @@ -434,7 +514,7 @@ def plot_likelihood_ratio(F_a=1, F_b=1, G_a=3, G_b=1.2): plot_likelihood_ratio() ``` -两条水平虚线标记了 $l(w) = 1$ 时对应的 $w$ 值。 +两条水平虚线标记了 $\ell(w) = 1$ 时对应的 $w$ 值。 在这两条线之间,似然比小于1,因此根据{eq}`eq_Bayes103`,落在该区域的抽样会使 $\pi$ 向下推动。 @@ -484,7 +564,7 @@ plot_densities() 蓝色区域是 $f$ 的积分,橙色区域是 $g$ 的积分。 -例如,在真实分布$F$下,如果$w$落入区间$[0.524, 0.999]$,$\pi$将向$0$更新,这在$F$下发生的概率是$1 - .524 = .476$。 +例如,在真实分布$F$下,如果$w$落入区间$[0.524, 0.999]$,$\pi$将向$0$更新,这在$F$下发生的概率约为$0.999 - 0.524 \approx 0.475$。 但如果$G$是真实分布,这种情况发生的概率将是$0.816$。 @@ -527,9 +607,9 @@ plot_belief_dynamics() 这些长度取决于两个因素:横坐标轴上的先验概率 $\pi$,以及以当前 $w$ 值形式出现的证据(在纵坐标轴上)。 -在蓝色区域($l(w) > 1$ 的地方),箭头指向右方;在虚线之间的绿色区域($l(w) < 1$ 的地方),箭头指向左方。 +在蓝色区域($\ell(w) > 1$ 的地方),箭头指向右方;在虚线之间的绿色区域($\ell(w) < 1$ 的地方),箭头指向左方。 -对于这些参数,上方的蓝色区域是紧贴在 $w = 1$ 下方的一个薄片区域,因为只有在非常接近上限的抽样中,$l(w)$ 才会再次回升到大于1。 +对于这些参数,上方的蓝色区域是紧贴在 $w = 1$ 下方的一个薄片区域,因为只有在非常接近上限的抽样中,$\ell(w)$ 才会再次回升到大于1。 ### 另一个实例 @@ -555,7 +635,7 @@ plot_belief_dynamics(G_a=2, G_b=1.6) - 自然永久从 $F$ 分布中抽取 - 自然永久从 $G$ 分布中抽取 -结果取决于似然比过程的一个特殊性质,这在 {doc}`advanced:additive_functionals` 中有详细讨论。 +结果取决于似然比过程的一个特殊性质,这在 {doc}`likelihood_ratio_process` 的 {ref}`这一节 ` 中有详细讨论。 在进行模拟之前,值得将贝叶斯定律用**赔率**而非概率重新表述。 @@ -564,7 +644,7 @@ plot_belief_dynamics(G_a=2, G_b=1.6) ```{math} :label: eq_odds -\frac{\pi_{t+1}}{1 - \pi_{t+1}} = l(w_{t+1}) \frac{\pi_{t}}{1 - \pi_{t}} +\frac{\pi_{t+1}}{1 - \pi_{t+1}} = \ell(w_{t+1}) \frac{\pi_{t}}{1 - \pi_{t}} ``` 因此贝叶斯定律在赔率上是*乘法*的,将 {eq}`eq_odds` 向前迭代回先验 $\pi_{-1}$,可得 @@ -572,32 +652,45 @@ plot_belief_dynamics(G_a=2, G_b=1.6) ```{math} :label: eq_odds_product -\frac{\pi_{t}}{1 - \pi_{t}} = \frac{\pi_{-1}}{1 - \pi_{-1}} \prod_{s=0}^{t} l(w_{s}) +\frac{\pi_{t}}{1 - \pi_{t}} = \frac{\pi_{-1}}{1 - \pi_{-1}} \prod_{s=0}^{t} \ell(w_{s}) ``` 因此信念路径是似然比的累积乘积,这就是为什么似然比过程的性质决定了它的行为。 -这也意味着,我们可以使用累积乘积来模拟整个路径集合,而不需要按日期逐步迭代。 +取对数可以把乘积变成求和: + +$$ +\log \frac{\pi_{t}}{1 - \pi_{t}} = \log \frac{\pi_{-1}}{1 - \pi_{-1}} + \sum_{s=0}^{t} \log \ell(w_{s}) +$$ + +我们利用这个求和来进行模拟。 + +这样做可以避免乘积运算中的溢出问题,以及当 $\pi_t$ 接近 $0$ 或 $1$ 时的精度损失。 + +这也意味着,我们可以使用累积求和来模拟整个路径集合,而不需要按日期逐步迭代。 ```{code-cell} ipython3 def simulate(rng, a, b, T=50, N=1000, π_init=0.5, F_a=1, F_b=1, G_a=3, G_b=1.2): """ - 在自然从 Beta(a, b) 中独立同分布抽取的情况下,模拟 N 条信念 π 在 T 个时期内的路径。 - 返回一个形状为 (N, T+1) 的数组,其第一列为共同的先验 π_init。 + 在自然从 Beta(a, b) 中独立同分布抽取 w_0, ..., w_{T-1} 的情况下, + 模拟 N 条信念 π 的路径。返回一个形状为 (N, T+1) 的数组, + 其第 0 列为先验 π_{-1} = π_init,第 t+1 列为 π_t。 """ w = rng.beta(a, b, size=(N, T)) - l = p(w, F_a, F_b) / p(w, G_a, G_b) - odds = (π_init / (1 - π_init)) * np.cumprod(l, axis=1) - return np.column_stack([np.full(N, π_init), odds / (1 + odds)]) + log_l = np.log(p(w, F_a, F_b)) - np.log(p(w, G_a, G_b)) + log_odds = np.log(π_init / (1 - π_init)) + np.cumsum(log_l, axis=1) + return np.column_stack([np.full(N, π_init), expit(log_odds)]) ``` 以下函数用于绘制路径。 ```{code-cell} ipython3 def plot_paths(π_paths): + "针对日期 t = -1, 0, ..., T-1 绘制信念路径。" + t = np.arange(π_paths.shape[1]) - 1 fig, ax = plt.subplots() - ax.plot(π_paths.T, color='b', lw=0.8, alpha=0.5) + ax.plot(t, π_paths.T, color='b', lw=0.8, alpha=0.5) ax.set(xlabel='$t$', ylabel=r'$\pi_t$') plt.show() ``` @@ -633,20 +726,65 @@ plot_paths(π_paths_G) 我们研究当自然生成的数据是来自 $F$ 的独立同分布抽样时 $\pi_t$ 向 $1$ 的收敛速率,以及当自然生成的数据是来自 $G$ 的独立同分布抽样时 $\pi_t$ 向 $0$ 的收敛速率。 -我们通过对 $\{\pi_t\}_{t=0}^T$ 的模拟路径进行平均来实现这一点。 +我们通过对 $\{\pi_t\}_{t=-1}^{T-1}$ 的模拟路径进行平均来实现这一点。 -使用 $N$ 条模拟的 $\pi_t$ 路径,当数据是从 $F$ 中抽样生成时,我们在每个 $t$ 时刻计算 $1 - \sum_{i=1}^{N}\pi_{i,t}$,当数据是从 $G$ 中抽样生成时,我们计算 $\sum_{i=1}^{N}\pi_{i,t}$。 +使用 $N$ 条模拟的 $\pi_t$ 路径,当数据是从 $F$ 中抽样生成时,我们在每个 $t$ 时刻计算 $1 - \frac{1}{N}\sum_{i=1}^{N}\pi_{i,t}$,当数据是从 $G$ 中抽样生成时,我们计算 $\frac{1}{N}\sum_{i=1}^{N}\pi_{i,t}$。 ```{code-cell} ipython3 +t_grid = np.arange(-1, T) fig, ax = plt.subplots() -ax.plot(range(T + 1), 1 - np.mean(π_paths_F, axis=0), label='F生成') -ax.plot(range(T + 1), np.mean(π_paths_G, axis=0), label='G生成') +ax.plot(t_grid, 1 - np.mean(π_paths_F, axis=0), label='F生成') +ax.plot(t_grid, np.mean(π_paths_G, axis=0), label='G生成') ax.set(xlabel='$t$', title='收敛') ax.legend() plt.show() ``` -从上图可以看出,收敛速率似乎不依赖于是 $F$ 还是 $G$ 生成数据。 +这两条曲线几乎重合。 + +一个精确的恒等式解释了原因: + +```{math} +:label: eq_conv_identity + +\pi_{-1} E_f[1 - \pi_t] = (1 - \pi_{-1}) E_g[\pi_t] = E[\pi_t (1 - \pi_t)] +``` + +这里 $E_f$ 和 $E_g$ 分别表示在数据从 $F$ 和从 $G$ 独立同分布抽取条件下的期望,而 $E$ 表示在决策者主观联合分布 {eq}`eq_definetti` 下的期望。 + +为证明 {eq}`eq_conv_identity`,设 $\phi$ 为历史 $w^t$ 的有界函数。 + +由于 $\pi_t = \mathbb{P}\{q = f \,|\, w^t\}$,迭代期望法则意味着 + +$$ +E[\pi_t \phi(w^t)] = E[\mathbf{1}\{q = f\} \phi(w^t)] = \pi_{-1} E_f[\phi(w^t)] . +$$ + +令 $\phi = 1 - \pi_t$,即得 {eq}`eq_conv_identity` 中第一项与第三项相等。 + +将同样的论证应用于 $1 - \pi_t = \mathbb{P}\{q = g \,|\, w^t\}$,并令 $\phi = \pi_t$,即得第二项与第三项相等。 + +当 $\pi_{-1} = 0.5$ 时,该恒等式表明对每个 $t$ 都有 $E_f[1 - \pi_t] = E_g[\pi_t]$,因此两条模拟曲线之间的差异仅来自抽样误差。 + +若采用其他先验,这两条曲线之间相差一个常数倍数 $(1 - \pi_{-1})/\pi_{-1}$。 + +该恒等式并不意味着在 $F$ 和 $G$ 下,典型路径以相同的速率收敛。 + +根据 {eq}`eq_odds_product` 和大数定律,当 $F$ 生成数据时,$\frac{1}{t+1} \log \frac{\pi_t}{1 - \pi_t}$ 收敛到 $E_f[\log \ell(w)] = KL(f, g) = 0.759$;当 $G$ 生成数据时,它收敛到 $E_g[\log \ell(w)] = -KL(g, f) = -0.344$,其中 $KL(f, g) = \int f(w) \log \frac{f(w)}{g(w)} dw$ 是 $g$ 相对于 $f$ 的 Kullback–Leibler 散度。 + +因此,典型路径在 $F$ 下趋近 $1$ 的速度要快于其在 $G$ 下趋近 $0$ 的速度。 + +上图所绘制的平均值是由那些 $\pi_t$ 长期朝错误方向偏移的罕见路径主导的。 + +这两条平均曲线均以指数速率 + +$$ +C(f, g) = - \log \min_{s \in [0,1]} \int f(w)^{s} g(w)^{1-s} dw = 0.121 , +$$ + +衰减,这正是 {doc}`divergence_measures` 中所描述的 $f$ 和 $g$ 的切尔诺夫熵(Chernoff entropy)。 + +练习 {ref}`exchangeable_ex2` 对这些结论进行了验证。 ### $\pi_t$ 的集合动态图 @@ -654,8 +792,8 @@ plt.show() $$ \begin{aligned} -E\left[\frac{\pi_{t+1}}{\pi_{t}}\biggm|q=a, \pi_{t}\right] &=E\left[\frac{l\left(w_{t+1}\right)}{\pi_{t}l\left(w_{t+1}\right)+\left(1-\pi_{t}\right)}\biggm|q= a, \pi_{t}\right], \\ - &=\int_{0}^{1}\frac{l\left(w_{t+1}\right)}{\pi_{t}l\left(w_{t+1}\right)+\left(1-\pi_{t}\right)} a\left(w_{t+1}\right)dw_{t+1} +E\left[\frac{\pi_{t+1}}{\pi_{t}}\biggm|q=a, \pi_{t}\right] &=E\left[\frac{\ell\left(w_{t+1}\right)}{\pi_{t}\ell\left(w_{t+1}\right)+\left(1-\pi_{t}\right)}\biggm|q= a, \pi_{t}\right], \\ + &=\int_{0}^{1}\frac{\ell\left(w_{t+1}\right)}{\pi_{t}\ell\left(w_{t+1}\right)+\left(1-\pi_{t}\right)} a\left(w_{t+1}\right)dw_{t+1} \end{aligned} $$ @@ -665,7 +803,7 @@ $$ ```{code-cell} ipython3 def plot_expected_ratio(F_a=1, F_b=1, G_a=3, G_b=1.2): - # 直接构造 f 和 g:这里它们可能相同,此时 l(w) = 1 没有根 + # 直接构造 f 和 g:这里它们可能相同,此时 ℓ(w) = 1 没有根 f = lambda w: p(w, F_a, F_b) g = lambda w: p(w, G_a, G_b) l = lambda w: f(w) / g(w) @@ -691,6 +829,32 @@ plot_expected_ratio() 上图显示,当数据由 $F$ 生成时,$\pi_t$ 平均总是向北移动,而当数据由 $G$ 生成时,$\pi_t$ 向南移动。 +对于任意一对 $f \neq g$ 以及任意 $\pi_t = \pi \in (0,1)$,都成立两个不等式。 + +设 $r(\ell) = \ell / (\pi \ell + 1 - \pi)$ 为比值 $\pi_{t+1}/\pi_t$ 作为 $\ell = \ell(w_{t+1})$ 的函数。 + +函数 $r$ 是严格凹的,且 $E_g[\ell(w)] = \int f(w) dw = 1$,因此由詹森不等式可得 + +$$ +E_g[r(\ell(w))] < r(1) = 1 . +$$ + +两个期望按 $\pi$ 加权平均后等于一: + +$$ +\pi E_f[r(\ell(w))] + (1 - \pi) E_g[r(\ell(w))] = \int \frac{f(w)}{\pi f(w) + (1-\pi) g(w)} \bigl(\pi f(w) + (1-\pi) g(w)\bigr) dw = 1 . +$$ + +这个等式正是 {doc}`likelihood_bayes` 中所研究的、$\pi_t$ 在决策者主观分布下的鞅性质。 + +结合第一个不等式,可得 + +$$ +E_f[r(\ell(w))] > 1 . +$$ + +因此,当数据由 $F$ 生成时 $\pi_t$ 是一个下鞅,而当数据由 $G$ 生成时 $\pi_t$ 是一个上鞅。 + 接下来,我们将看一个退化情况,其中 $f$ 和 $g$ 是相同的贝塔分布,且 $F_a=G_a=3, F_b=G_b=1.2$。 从某种意义上说,这里没有什么可学习的。 @@ -707,9 +871,400 @@ plot_expected_ratio(F_a=3, F_b=1.2) plot_expected_ratio(F_a=2, F_b=1, G_a=3, G_b=1.2) ``` +这两个不等式依然成立,但此时两条曲线都接近于一。 + +在所绘网格范围内,$E_f[\pi_{t+1}/\pi_t]$ 不超过 $1.16$,而 $E_g[\pi_{t+1}/\pi_t]$ 不低于 $0.978$。 + +而在第一种情形中,相应的数值分别为 $5.38$ 和 $0.811$。 + +贝塔分布 Beta$(2,1)$ 和 Beta$(3,1.2)$ 彼此十分接近:$KL(f, g) = 0.052$,$KL(g, f) = 0.039$,相比之下第一种情形中为 $0.759$ 和 $0.344$。 + +因此一次抽样平均只会让 $\pi_t$ 发生很小的变化,学习速度较慢。 + ## 后续内容 我们将在以下讲座中应用并深入探讨本讲座中提出的一些想法: * {doc}`likelihood_ratio_process` 描述了**似然比过程**及其在频率派和贝叶斯统计理论中的作用 -* {doc}`navy_captain` 研究了二战时期一位美国海军上尉的直觉,即海军要求他使用的(频率派)决策规则不如亚伯拉罕·瓦尔德尚未设计的序贯规则。 +* {doc}`likelihood_bayes` 研究了似然比过程如何驱动后验概率 $\pi_t$,并证明 $\pi_t$ 在决策者的主观分布 {eq}`eq_definetti` 下是一个鞅 +* {doc}`mix_model` 研究了一位使用本讲座统计模型的决策者,而自然实际上每期都重新混合 $F$ 和 $G$ 的情形 +* {doc}`merging_of_opinions` 研究了贝塔-伯努利模型,它是德·费内蒂表示 {eq}`eq_definetti_bernoulli` 的一个实例,并探讨了两位具有不同先验的贝叶斯主义者的意见何时会趋同 +* {doc}`divergence_measures` 描述了支配学习速率的库尔贝克-莱布勒散度和切尔诺夫熵 +* {doc}`wald_friedman_2` 研究了一位持有本讲座信念的决策者如何依次决定何时停止抽样 +* {doc}`navy_captain` 研究了二战时期一位美国海军上尉的直觉,即海军要求他使用的(频率派)决策规则不如亚伯拉罕·瓦尔德尚未设计的序贯规则 + +## 练习 + +```{exercise} +:label: exchangeable_ex1 + +本练习说明独立同分布序列的混合具有非负的序列协方差,并且有限可交换序列不一定是独立同分布序列的混合。 + +1. 证明等式 {eq}`eq_hcov`。 + +2. 设 $\phi$ 是一个使 $E_f[\phi(W)]$ 和 $E_g[\phi(W)]$ 均有限的函数。利用 {eq}`eq_hcov` 证明在联合密度 {eq}`eq_definetti` 下 + +$$ +\textrm{Cov}\bigl(\phi(W_0), \phi(W_1)\bigr) = \tilde \pi (1 - \tilde \pi) \bigl(E_f[\phi(W)] - E_g[\phi(W)]\bigr)^2 \geq 0 . +$$ + +3. 对于本讲座中的密度 $f = $ Beta$(1, 1)$ 和 $g = $ Beta$(3, 1.2)$,取 $\tilde \pi = 0.5$,使用第 2 部分中的公式计算 $\textrm{Cov}(W_0, W_1)$,并与模拟结果进行比较。 + +4. 一个瓮中有一个红球和一个黑球。我们不放回地抽取两个球。令 $W_t = 1$ 表示第 $t \in \{0, 1\}$ 次抽取为红色,$W_t = 0$ 表示为黑色。证明 $(W_0, W_1)$ 是可交换的,并且 $\textrm{Cov}(W_0, W_1) < 0$。解释为什么 $(W_0, W_1)$ 不是独立同分布对的混合,以及为什么德菲内蒂定理要求无限序列。 +``` + +```{solution-start} exchangeable_ex1 +:class: dropdown +``` + +第 1 部分。 + +令 $h(W_t) = \tilde \pi f(W_t) + (1 - \tilde \pi) g(W_t)$,则 + +$$ +\begin{aligned} +h(W_0) h(W_1) & = \tilde \pi^2 f(W_0) f(W_1) + \tilde \pi (1 - \tilde \pi) \bigl(f(W_0) g(W_1) + g(W_0) f(W_1)\bigr) + (1 - \tilde \pi)^2 g(W_0) g(W_1) . +\end{aligned} +$$ + +用 $h(W_0, W_1) = \tilde \pi f(W_0) f(W_1) + (1 - \tilde \pi) g(W_0) g(W_1)$ 减去上式,并利用 $\tilde \pi - \tilde \pi^2 = (1 - \tilde \pi) - (1 - \tilde \pi)^2 = \tilde \pi (1 - \tilde \pi)$,得到 + +$$ +h(W_0, W_1) - h(W_0) h(W_1) = \tilde \pi (1 - \tilde \pi) \bigl(f(W_0) f(W_1) + g(W_0) g(W_1) - f(W_0) g(W_1) - g(W_0) f(W_1)\bigr) , +$$ + +这可因式分解为 {eq}`eq_hcov` 的右边。 + +第 2 部分。 + +将 {eq}`eq_hcov` 乘以 $\phi(W_0) \phi(W_1)$ 并对 $W_0$ 和 $W_1$ 积分: + +$$ +\textrm{Cov}\bigl(\phi(W_0), \phi(W_1)\bigr) = \tilde \pi (1 - \tilde \pi) \int \phi(w) \bigl(f(w) - g(w)\bigr) dw \int \phi(w) \bigl(f(w) - g(w)\bigr) dw = \tilde \pi (1 - \tilde \pi) \bigl(E_f[\phi(W)] - E_g[\phi(W)]\bigr)^2 . +$$ + +对于具有任意混合测度的独立同分布序列混合,同样的结论成立。 + +令 $Q$ 为从混合测度中抽取的分布,$W_t$ 是从该分布中独立同分布抽取的。 + +全协方差公式给出 + +$$ +\textrm{Cov}\bigl(\phi(W_0), \phi(W_1)\bigr) = E\bigl[\textrm{Cov}(\phi(W_0), \phi(W_1) \,|\, Q)\bigr] + \textrm{Cov}\bigl(E[\phi(W_0) | Q], E[\phi(W_1) | Q]\bigr) = 0 + \textrm{Var}\bigl(E[\phi(W) | Q]\bigr) \geq 0 . +$$ + +第 3 部分。 + +Beta$(1,1)$ 和 Beta$(3, 1.2)$ 的均值分别为 $1/2$ 和 $3/4.2$。 + +```{code-cell} ipython3 +π_tilde = 0.5 +μ_f, μ_g = 1 / (1 + 1), 3 / (3 + 1.2) +cov_theory = π_tilde * (1 - π_tilde) * (μ_f - μ_g)**2 + +rng = np.random.default_rng(1234) +N = 1_000_000 +nature_draws_f = rng.random(N) < π_tilde +W = np.where(nature_draws_f[:, None], + rng.beta(1, 1, size=(N, 2)), + rng.beta(3, 1.2, size=(N, 2))) +cov_sim = np.cov(W[:, 0], W[:, 1])[0, 1] + +print(f"Cov(W_0, W_1): formula {cov_theory:.5f}, simulation {cov_sim:.5f}") +``` + +第 4 部分。 + +第一次抽取为红色的概率为 $1/2$,此后第二次抽取必定为黑色。 + +因此 $\textrm{Prob}(W_0 = 1, W_1 = 0) = \textrm{Prob}(W_0 = 0, W_1 = 1) = 1/2$,且 $\textrm{Prob}(W_0 = W_1) = 0$。 + +联合分布在交换 $W_0$ 和 $W_1$ 时保持不变,因此 $(W_0, W_1)$ 是可交换的。 + +$E[W_0] = E[W_1] = 1/2$,$E[W_0 W_1] = 0$,因此 $\textrm{Cov}(W_0, W_1) = -1/4$。 + +由第 2 部分可知,每一种独立同分布对的混合都满足 $\textrm{Cov}(W_0, W_1) \geq 0$。 + +所以 $(W_0, W_1)$ 不是独立同分布对的混合。 + +如果 $(W_0, W_1)$ 是某个无限可交换序列的前两个成员,那么根据德菲内蒂定理,该对将是独立同分布对的混合。 + +因此瓮序列无法扩展为无限可交换序列。 + +更一般地,设 $W_0, \ldots, W_{n-1}$ 可交换,具有共同方差 $\sigma^2 > 0$ 和共同成对相关系数 $\rho$。 + +则 $0 \leq \textrm{Var}(\sum_t W_t) = n \sigma^2 (1 + (n-1) \rho)$,因此 $\rho \geq -1/(n-1)$。 + +瓮在 $n = 2$ 且 $\rho = -1$ 时达到此界。 + +当 $n \rightarrow \infty$ 时,该界趋于 $0$。 + +```{solution-end} +``` + +```{exercise} +:label: exchangeable_ex2 + +本练习研究等式 {eq}`eq_conv_identity` 以及 $\pi_t$ 的收敛速度。 + +1. 通过第二种方法证明 {eq}`eq_conv_identity`。利用 $\pi_t = \pi_{-1} L_t / (\pi_{-1} L_t + 1 - \pi_{-1})$,其中 $L_t = \prod_{s=0}^t \ell(w_s)$,以及对于 $w^t$ 的每一个有界函数 $\phi$,都有 $E_f[\phi(w^t)] = E_g[L_t \phi(w^t)]$。 + +2. 设 $\pi_{-1} = 0.3$。绘制 $1 - E_f[\pi_t]$ 和 $E_g[\pi_t]$ 随 $t$ 的变化图,然后绘制 $\pi_{-1}(1 - E_f[\pi_t])$ 和 $(1 - \pi_{-1}) E_g[\pi_t]$ 随 $t$ 的变化图。 + +3. 计算在 $F$ 下和在 $G$ 下,路径间 $\log(\pi_t / (1 - \pi_t))$ 中位数随 $t$ 变化的斜率。将它们与 $KL(f, g)$ 和 $-KL(g, f)$ 进行比较。 + +4. 计算 $\log(1 - E_f[\pi_t])$ 随 $t$ 变化的斜率,并将其与 $-C(f, g)$ 进行比较,其中 $C(f, g)$ 是切诺夫熵。 + +第 4 部分提示:罕见路径主导了 $1 - E_f[\pi_t]$ 的值,因此对于较大的 $t$,普通的蒙特卡洛估计并不精确。 + +令 $A(s) = \int f(w)^s g(w)^{1-s} dw$,令 $s^*$ 为在 $[0,1]$ 上使 $A(s)$ 最小化的值,令 $m(w) = f(w)^{s^*} g(w)^{1-s^*} / A(s^*)$。 + +那么 $f(w) / m(w) = A(s^*) \ell(w)^{1 - s^*}$,因此 + +$$ +E_f[\phi(w^t)] = A(s^*)^{t+1} E_m\bigl[\phi(w^t) L_t^{1-s^*}\bigr] . +$$ + +从 $m$ 中抽取样本以估计右边的期望。 + +当 $f$ 为均匀分布时,$m$ 为 Beta$(3 - 2 s^*, 1.2 - 0.2 s^*)$ 密度。 +``` + +```{solution-start} exchangeable_ex2 +:class: dropdown +``` + +第 1 部分。 + +在 $F$ 下,$w^t$ 的密度为 $f(w_0) \cdots f(w_t) = L_t \, g(w_0) \cdots g(w_t)$,由此得到 $E_f[\phi(w^t)] = E_g[L_t \phi(w^t)]$。 + +由于 $1 - \pi_t = (1 - \pi_{-1}) / (\pi_{-1} L_t + 1 - \pi_{-1})$, + +$$ +\pi_{-1} E_f[1 - \pi_t] = E_g\left[\frac{\pi_{-1} L_t (1 - \pi_{-1})}{\pi_{-1} L_t + 1 - \pi_{-1}}\right] = (1 - \pi_{-1}) E_g[\pi_t] . +$$ + +主观分布 {eq}`eq_definetti` 的密度为 $\pi_{-1} f(w^t) + (1 - \pi_{-1}) g(w^t) = (\pi_{-1} L_t + 1 - \pi_{-1}) g(w^t)$,因此 + +$$ +E[\pi_t (1 - \pi_t)] = E_g\bigl[(\pi_{-1} L_t + 1 - \pi_{-1}) \pi_t (1 - \pi_t)\bigr] = E_g\bigl[\pi_{-1} L_t (1 - \pi_t)\bigr] = \pi_{-1} E_f[1 - \pi_t] . +$$ + +第 2 部分。 + +我们编写一个返回对数赔率的 `simulate` 版本,因为一旦 $\pi_t$ 的对数赔率超过约 $37$,它就会四舍五入为恰好 $1$。 + +```{code-cell} ipython3 +def simulate_log_odds(rng, a, b, T, N, π_init): + "Log odds of π_t for t = -1, 0, ..., T-1 along N paths of IID Beta(a, b) draws." + w = rng.beta(a, b, size=(N, T)) + log_l = np.log(p(w, 1, 1)) - np.log(p(w, 3, 1.2)) + log_odds_init = np.log(π_init / (1 - π_init)) + log_odds = log_odds_init + np.cumsum(log_l, axis=1) + return np.column_stack([np.full(N, log_odds_init), log_odds]) + +π_init, T_ex, N_ex = 0.3, 40, 100_000 +rng = np.random.default_rng(2024) +lo_F = simulate_log_odds(rng, 1, 1, T_ex, N_ex, π_init) +lo_G = simulate_log_odds(rng, 3, 1.2, T_ex, N_ex, π_init) +t_ex = np.arange(-1, T_ex) + +err_F = np.mean(expit(-lo_F), axis=0) # 1 - E_f[π_t] +err_G = np.mean(expit(lo_G), axis=0) # E_g[π_t] + +fig, axes = plt.subplots(1, 2, figsize=(10, 4)) +axes[0].plot(t_ex, err_F, label=r'$1 - E_f[\pi_t]$') +axes[0].plot(t_ex, err_G, label=r'$E_g[\pi_t]$') +axes[1].plot(t_ex, π_init * err_F, label=r'$\pi_{-1}(1 - E_f[\pi_t])$') +axes[1].plot(t_ex, (1 - π_init) * err_G, '--', + label=r'$(1 - \pi_{-1}) E_g[\pi_t]$') +for ax in axes: + ax.set_xlabel('$t$') + ax.legend() +plt.tight_layout() +plt.show() + +for t in [0, 5, 10, 20]: + print(f"t = {t:2d}: (1 - E_f[π_t]) / E_g[π_t] = {err_F[t+1] / err_G[t+1]:.3f}") +print(f"(1 - π_init) / π_init = {(1 - π_init) / π_init:.3f}") +``` + +左图中的两条曲线相差一个 $7/3$ 的因子;右图中的两条曲线在抽样误差范围内一致。 + +第 3 部分。 + +```{code-cell} ipython3 +f = lambda w: p(w, 1, 1) +g = lambda w: p(w, 3, 1.2) +KL_fg = quad(lambda w: f(w) * np.log(f(w) / g(w)), 0, 1)[0] +KL_gf = quad(lambda w: g(w) * np.log(g(w) / f(w)), 0, 1)[0] + +slope_F = np.polyfit(t_ex, np.median(lo_F, axis=0), 1)[0] +slope_G = np.polyfit(t_ex, np.median(lo_G, axis=0), 1)[0] +print(f"slope of median log odds under F: {slope_F:.3f}, KL(f, g) = {KL_fg:.3f}") +print(f"slope of median log odds under G: {slope_G:.3f}, -KL(g, f) = {-KL_gf:.3f}") +``` + +典型路径在 $F$ 下比在 $G$ 下收敛得更快。 + +第 4 部分。 + +我们计算切诺夫熵及其最小值点 $s^*$。 + +```{code-cell} ipython3 +A = lambda s: quad(lambda w: f(w)**s * g(w)**(1 - s), 0, 1)[0] +res = op.minimize_scalar(A, bounds=(0, 1), method='bounded') +s_star, C = res.x, -np.log(res.fun) +print(f"s* = {s_star:.3f}, C(f, g) = {C:.4f}") +``` + +接下来我们通过从 $m$ 进行重要性抽样,估计直到 $t=199$ 为止的 $\log(1 - E_f[\pi_t])$。 + +```{code-cell} ipython3 +T_is, N_is = 200, 100_000 +rng = np.random.default_rng(2025) +w = rng.beta(3 - 2 * s_star, 1.2 - 0.2 * s_star, size=(N_is, T_is)) +log_L = np.cumsum(np.log(f(w)) - np.log(g(w)), axis=1) # log L_t, t = 0, ..., 199 +t_is = np.arange(T_is) + +log_odds = np.log(π_init / (1 - π_init)) + log_L +weights = np.exp((1 - s_star) * log_L) # L_t^(1 - s*) +log_err_F = (t_is + 1) * np.log(A(s_star)) \ + + np.log(np.mean(expit(-log_odds) * weights, axis=0)) + +for t in [10, 20, 30]: + print(f"t = {t}: log(1 - E_f[π_t]) importance sampling {log_err_F[t]:.3f}, " + f"plain Monte Carlo {np.log(err_F[t+1]):.3f}") + +late = t_is >= 100 +slope = np.polyfit(t_is[late], log_err_F[late], 1)[0] +slope_adj = np.polyfit(t_is[late], log_err_F[late] + 0.5 * np.log(t_is[late] + 1), 1)[0] +print(f"slope of log(1 - E_f[π_t]) for t in [100, 199]: {slope:.4f}") +print(f"slope after adding log(t+1)/2: {slope_adj:.4f}") +print(f"-C(f, g): {-C:.4f}") +``` + +在较小的 $t$ 时,两种估计结果是一致的。 + +在 $m$ 下,$E_m[\log \ell(w)] = A'(s^*)/A(s^*) = 0$,因此 $\log L_t$ 是一个没有漂移的随机游走。 + +因此,期望 $E_m[(1 - \pi_t) L_t^{1-s^*}]$ 的衰减仅为 $t^{-1/2}$ 量级,于是 + +$$ +1 - E_f[\pi_t] \approx K \, t^{-1/2} e^{-C(f,g) t} +$$ + +其中 $K$ 为常数。 + +拟合得到的斜率接近 $-C(f,g)$,加上 $\frac{1}{2}\log(t+1)$ 以消除 $t^{-1/2}$ 因子后,结果更接近该值。 + +根据 {eq}`eq_conv_identity`,$E_g[\pi_t]$ 以相同的速率衰减。 + +```{solution-end} +``` + +```{exercise} +:label: exchangeable_ex3 + +一个波利亚瓮最初有 $a$ 个红球和 $b$ 个黑球。 + +在每个时刻 $t = 0, 1, \ldots$,我们随机抽取一个球,若为红色则设 $W_t = 1$,若为黑色则设 $W_t = 0$,然后将其放回瓮中,并再加入一个同色的球。 + +1. 证明 $\textrm{Prob}(W_0 = 1, W_1 = 0) = \textrm{Prob}(W_0 = 0, W_1 = 1)$。更一般地,证明序列 $(w_0, \ldots, w_{n-1})$ 出现的概率仅取决于红色抽取的次数 $k$,因此 $W_0, W_1, \ldots$ 是可交换的。求出德菲内蒂表示 {eq}`eq_definetti_bernoulli` 中的混合测度 $\mu$。 + +2. 模拟多个瓮,取 $a = 2$,$b = 3$,抽取 $n = 2000$ 次。比较各瓮间红色抽取比例的分布与 Beta$(a, b)$ 密度。 + +3. 证明在 $n$ 次抽取(其中 $k$ 次为红色)之后,瓮中红球的比例,等于一个具有 Beta$(a, b)$ 先验(针对独立同分布伯努利抽取的成功概率 $\theta$)的贝叶斯主义者赋予下一次抽取为红色的概率 $\textrm{Prob}(W_n = 1 \,|\, w_0, \ldots, w_{n-1})$。 +``` + +```{solution-start} exchangeable_ex3 +:class: dropdown +``` + +第 1 部分。 + +$\textrm{Prob}(W_0 = 1, W_1 = 0) = \frac{a}{a+b} \frac{b}{a+b+1}$,$\textrm{Prob}(W_0 = 0, W_1 = 1) = \frac{b}{a+b} \frac{a}{a+b+1}$。 + +两者相等。 + +对于 $n$ 次抽取中有 $k$ 次为红色的序列,无论顺序如何,连续条件概率的分母均为 $a+b, a+b+1, \ldots, a+b+n-1$。 + +红色抽取对应的分子为 $a, a+1, \ldots, a+k-1$,黑色抽取对应的分子为 $b, b+1, \ldots, b+n-k-1$,顺序任意。 + +因此 + +$$ +\textrm{Prob}(W_0 = w_0, \ldots, W_{n-1} = w_{n-1}) = \frac{\prod_{j=0}^{k-1} (a+j) \prod_{j=0}^{n-k-1} (b+j)}{\prod_{j=0}^{n-1} (a+b+j)} = \frac{B(a+k, b+n-k)}{B(a,b)} , +$$ + +其中 $B$ 为贝塔函数。 + +上式右边等于 $\int_0^1 \theta^k (1-\theta)^{n-k} \mu(d\theta)$,其中 $\mu$ 为 Beta$(a,b)$ 分布。 + +这就是德菲内蒂表示 {eq}`eq_definetti_bernoulli`。 + +第 2 部分。 + +```{code-cell} ipython3 +from scipy.stats import beta as beta_dist, kstest + +def polya_urn(rng, a, b, n, N): + "Simulate N Pólya urns for n draws; return the N x n array of draws." + red = np.full(N, float(a)) + total = float(a + b) + W = np.empty((N, n), dtype=np.int8) + for t in range(n): + W[:, t] = rng.random(N) < red / total + red += W[:, t] + total += 1 + return W + +a, b, n, N = 2, 3, 2000, 20_000 +rng = np.random.default_rng(7) +W = polya_urn(rng, a, b, n, N) +freq = W.mean(axis=1) + +grid = np.linspace(0, 1, 200) +fig, ax = plt.subplots() +ax.hist(freq, bins=50, density=True, alpha=0.5, + label=f'fraction of red draws, $n = {n}$') +ax.plot(grid, beta_dist.pdf(grid, a, b), lw=2, label=f'Beta$({a}, {b})$ density') +ax.set_xlabel(r'$\theta$') +ax.legend() +plt.show() + +print(f"Prob(W_0=1, W_1=0) = {np.mean((W[:, 0] == 1) & (W[:, 1] == 0)):.4f}, " + f"Prob(W_0=0, W_1=1) = {np.mean((W[:, 0] == 0) & (W[:, 1] == 1)):.4f}, " + f"exact = {a * b / ((a + b) * (a + b + 1)):.4f}") +print(f"Kolmogorov-Smirnov test against Beta({a}, {b}): " + f"p-value = {kstest(freq, beta_dist(a, b).cdf).pvalue:.3f}") +``` + +各瓮间红色抽取比例的分布近似为 Beta$(2, 3)$,科尔莫戈罗夫-斯米尔诺夫检验未能拒绝该分布。 + +第 3 部分。 + +在 $n$ 次抽取(其中 $k$ 次为红色)之后,瓮中共有 $a + k$ 个红球,总球数为 $a + b + n$,因此下一次抽取为红色的概率为 $(a+k)/(a+b+n)$。 + +一个对 $\theta$ 具有 Beta$(a, b)$ 先验的贝叶斯主义者,在观察到 $n$ 次独立同分布伯努利试验中有 $k$ 次成功后,得到 Beta$(a + k, b + n - k)$ 后验分布。 + +他认为下一次抽取为成功的概率,等于 $\theta$ 的后验均值,即 $(a + k)/(a + b + n)$。 + +瓮与该贝叶斯主义者的结论一致。 + +下面的代码单元根据前 $10$ 次抽取中红球的数量,对模拟的瓮进行分组,以此验证这一点。 + +基于较少瓮计算的频率精度较低。 + +```{code-cell} ipython3 +n0 = 10 +k = W[:, :n0].sum(axis=1) +for k_val in range(0, n0 + 1, 2): + sel = k == k_val + print(f"k = {k_val:2d} ({sel.sum():4d} urns): " + f"frequency of red at draw {n0} = {W[sel, n0].mean():.3f}, " + f"(a + k) / (a + b + n) = {(a + k_val) / (a + b + n0):.3f}") +``` + +```{solution-end} +``` diff --git a/lectures/gallant_tauchen.md b/lectures/gallant_tauchen.md index b22c8e78..4ff1866b 100644 --- a/lectures/gallant_tauchen.md +++ b/lectures/gallant_tauchen.md @@ -260,7 +260,7 @@ GMM 通常需要结构参数的初步估计来构建有效的权重矩阵,而 (gt_why_score)= ## 为什么得分是正确的匹配对象 -{doc}`divergence_measures` 表明,最大似然法最小化了数据的经验分布到参数化模型的 KL 散度。 +{doc}`divergence_measures` 表明,最大似然法最小化了参数化模型相对于数据的经验分布的交叉熵,这是从数据生成分布到模型的 KL 散度的样本类比。 第一步通过最小化 KL 散度将数据投影到辅助族上。 @@ -1410,4 +1410,4 @@ Gallant 和 Tauchen 的建议解决了问题的根源:选择一个拟合良好 {ref}`gt_choosing` 一节解释了原因:在级数展开中增加项数会使其得分趋向鞅差分,这样外积就是有效的。 ```{solution-end} -``` \ No newline at end of file +``` diff --git a/lectures/imp_sample.md b/lectures/imp_sample.md index 758b755a..e5dcf759 100644 --- a/lectures/imp_sample.md +++ b/lectures/imp_sample.md @@ -15,10 +15,10 @@ translation: Overview: 概述 Mathematical expectation of likelihood ratio: 似然比的数学期望 Importance sampling: 重要性采样 - Selecting a sampling distribution: 选择抽样分布 Approximating a cumulative likelihood ratio: 近似累积似然比 Distribution of sample mean: 样本均值的分布 Choosing a sampling distribution: 选择抽样分布 + Exercises: 练习 --- # 似然比过程的均值 @@ -76,7 +76,7 @@ $$ \ell \left( \omega_t \right) = \frac{f\left(\omega_t\right)}{g\left(\omega_t\right)} $$ -其中 $f$ 和 $g$ 是参数为 $F_a$、$F_b$、$G_a$、$G_b$ 的Beta分布的密度函数。 +其中 $f$ 是 Beta$(F_a, F_b) = $ Beta$(1, 1)$ 密度,即 $[0,1]$ 上的均匀密度,而 $g$ 是 Beta$(G_a, G_b) = $ Beta$(3, 1.2)$ 密度。 假设独立同分布的随机变量 $\omega_t \in \Omega$ 由 $g$ 生成。 @@ -88,7 +88,7 @@ $$ 我们的目标是很好地近似数学期望 $E \left[ L\left(\omega^t\right) \right]$。 -在 {doc}`likelihood_ratio_process` 中,我们证明了对所有 $t$,$E \left[ L\left(\omega^t\right) \right]$ 等于1。 +在 {doc}`likelihood_ratio_process` 的 {ref}`这一节 ` 中,我们证明了对所有 $t$,$E \left[ L\left(\omega^t\right) \right]$ 等于1。 我们想要检验当用模拟的样本均值替代 $E$ 时,这个结论的准确程度如何。 @@ -180,6 +180,8 @@ $L\left(\omega^t\right)$ 中的每一个因子都以同样的方式发生了扭 在模拟过程中,我们不从 $g$ 中抽取数据,而是使用另一个分布 $h$ 来生成 $\omega$ 的抽样。 +在 {doc}`likelihood_ratio_process` 中,$h$ 表示生成数据的第三个密度;而在这里,$h$ 表示我们所选择的重要性分布。 + 这个想法是设计 $h$ 使其对 $\Omega$ 中那些 $\ell \left(\omega_t\right)$ 取值较大但在 $g$ 下密度较低的区域进行过采样。 用这种方式构造样本后,当我们计算似然比的经验均值时,必须用 $g$ 和 $h$ 的似然比对每个实现值进行加权。 @@ -210,11 +212,11 @@ $$ E^g\left[\ell\left(\omega\right)\right] = \int_\Omega \ell(\omega) g(\omega) d\omega = \int_\Omega \ell(\omega) \frac{g(\omega)}{h(\omega)} h(\omega) d\omega = E^h\left[\ell\left(\omega\right) \frac{g(\omega)}{h(\omega)}\right] $$ -## 选择抽样分布 +第二个等式要求只要 $\ell(\omega) g(\omega) = f(\omega) > 0$,就有 $h(\omega) > 0$。 -由于我们必须使用一个$h$,它在$g$赋予低概率的分布部分具有更大的质量,我们使用$h=Beta(0.5, 0.5)$作为我们的重要性分布。 +由于我们必须使用一个在 $g$ 分布质量较低的部分具有更大质量的 $h$,我们选用 $h=Beta(0.5, 0.5)$ 作为我们的重要性分布。 -这些图比较了$g$和$h$。 +下面的图比较了 $g$ 和 $h$。 ```{code-cell} ipython3 g_a, g_b = params.G_a, params.G_b @@ -225,7 +227,7 @@ h_a, h_b = 0.5, 0.5 --- mystnb: figure: - caption: '数据分布与重要性抽样分布' + caption: '数据分布与重要性采样分布' name: fig-imp-real --- w_range = np.linspace(1e-5, 1-1e-5, 1000) @@ -244,6 +246,12 @@ plt.show() 我们现在研究如何使用重要性抽样来近似 ${E} \left[L\left(\omega^t\right)\right] = E \left[\prod_{i=1}^t \ell \left(\omega_i\right)\right]$。 +为了编写适用于一般贝塔密度的代码,我们用 $p$ 表示我们想要求期望所依据的密度,用 $q$ 表示我们实际抽样所依据的密度。 + +在我们的应用中,$p = g$,而 $q$ 是一个重要性分布,例如 $h$。 + +在 {doc}`likelihood_ratio_process` 中,$q$ 表示自然选择的密度;而在这里,$q$ 表示重要性分布。 + 如上所述,我们的计划是从 $q$ 中抽取序列 $\omega^t$,然后对似然比进行适当的重新加权。 分布的变换在总体上成立,这与单次抽取的情况完全一样: @@ -365,11 +373,25 @@ $$ 所以 $\ell\left(\omega\right)$ 没有有限的方差,并且由于各次抽取是独立的,对于任意 $t$,$L\left(\omega^t\right)$ 同样没有有限的方差。 -这正是标准蒙特卡洛方法在此失效的确切含义:其样本均值不满足任何中心极限定理,因此不具备通常的 $\sqrt{N}$ 收敛保证。 +{doc}`likelihood_ratio_process` 中遇到的发散积分与 $\ell(\omega)$ 在 $f$ 下的均值相同,因为 $E^g\left[\ell(\omega)^2\right] = E^f\left[\ell(\omega)\right]$。 + +均值 $E^g\left[\ell(\omega)\right] = 1$ 是有限的,因此强大数定律仍然适用:随着抽取次数 $N$ 的增长,蒙特卡洛平均值几乎必然收敛到 $1$。 + +但普通的中心极限定理并不适用,其 $N^{-1/2}$ 的收敛速率也会失效。 + +在原点附近,$g(\omega) \approx k \omega^2$,其中 $k = 1/B(3, 1.2)$,$B$ 为贝塔函数。 + +对于较大的 $x$,事件 $\ell(\omega) > x$ 主要发生在 $\omega < (k x)^{-1/2}$ 时,在 $g$ 下该事件的概率约为 $\frac{1}{3} k^{-1/2} x^{-3/2}$。 + +以 $x^{-3/2}$ 速度衰减的尾部使 $\ell(\omega)$ 落入指数为 $3/2$ 的稳定律的吸引域。 + +根据广义中心极限定理,由 $N$ 次抽取构成的样本均值的误差以 $N^{-1/3}$ 的速度缩小,其极限分布是偏斜的,具有较长的右尾。 + +{ref}`imp_ex2` 通过数值方式验证了该尾指数以及 $N^{-1/3}$ 的收敛速率。 随着 $T$ 的增加,这个问题会不断恶化,使标准蒙特卡洛方法变得越来越不可靠。 -使用 $q = h$ 的重要性采样通过更均匀地从对 $f$ 和 $g$ 都重要的区域采样来解决这个问题。 +使用 $q = h$ 的重要性采样通过在 $\ell$ 取值较大的 $\omega = 0$ 附近更频繁地采样,解决了方差无穷大的问题。 ## 样本均值的分布 @@ -496,19 +518,31 @@ plot_estimates(T_values, mc, imp_h1, '$h$ generating', 中位数随$T$稳步下降,而报告的均值$\hat{μ}$则是一个不可靠的统计量——回想一下,其潜在方差是无穷的,因此每个面板中打印的$\hat{σ}^2$所估计的量根本不存在,并且换一个不同的随机种子就可能使$\hat{μ}$发生很大的变化。 -重要性抽样恰恰弥补了这一缺陷。 +使用$h$进行重要性抽样消除了无穷方差的问题,但并不能阻止方差随$T$的增大而增长。 + +从$h$中抽取一条路径并进行重加权,会使该路径获得值$\prod_{i=1}^T \ell(\omega_i) g(\omega_i)/h(\omega_i) = \prod_{i=1}^T f(\omega_i)/h(\omega_i)$。 + +其二阶矩为$\left(\int_0^1 f^2/h \, d\omega\right)^T = \left(1 + \chi^2(f\|h)\right)^T$,其中$\chi^2(f\|h) = \int_0^1 (f-h)^2/h \, d\omega$是$f$相对于$h$的$\chi^2$散度(参见 {doc}`divergence_measures`)。 + +对于$h = $ 贝塔分布$(0.5, 0.5)$,每个权重$f(\omega)/h(\omega) = \pi \sqrt{\omega(1-\omega)}$至多为$\pi/2$,并且$\int_0^1 f^2/h \, d\omega = \pi^2/8 \approx 1.234$。 + +单条路径贡献的方差$(\pi^2/8)^T - 1$是有限的,但会呈几何级数增长:在$T = 20$时等于$66$,在$T = 50$时约为$3.6 \times 10^4$。 ## 选择抽样分布 -上面,我们任意选择 $h = Beta(0.5,0.5)$ 作为重要性分布。 +上文中,我们任意选择了 $h = Beta(0.5,0.5)$ 作为重要性分布。 -是否存在最优的重要性分布? +是否存在一个最优的重要性分布? -在我们这个特定的情形中,由于我们事先知道 $E \left[ L\left(\omega^t\right) \right] = 1$,我们可以利用这个信息。 +当重要性密度与被积函数(此处为 $\ell g$)成比例时,重要性抽样估计量的方差为零。 -因此,假设我们简单地使用 $h = f$。 +由于 $\ell g = f$,对于单次抽取,零方差重要性密度就是 $f$ 本身;对于长度为 $T$ 的路径,它是乘积密度 $f(\omega_1) f(\omega_2) \cdots f(\omega_T)$。 -在估计似然比的均值时(T=1),我们得到: +要使用它,我们只需要能够从 $f$ 中抽样即可;我们不需要事先知道 $E \left[ L\left(\omega^t\right) \right] = 1$。 + +因此,假设我们直接使用 $h = f$。 + +在估计似然比的均值时($T=1$),我们得到: $$ \hat{E}^f \left[\ell(\omega) \frac{g(\omega)}{f(\omega)} \right] = \hat{E}^f \left[\frac{f(\omega)}{g(\omega)} \frac{g(\omega)}{f(\omega)} \right] = \frac{1}{N} \sum_{i=1}^{N} \ell\left(\omega_i^f\right) \frac{g\left(\omega_i^f\right)}{f\left(\omega_i^f\right)} = 1 @@ -520,13 +554,13 @@ $$ ``` ```{code-cell} ipython3 -# 重要性抽样(均值和方差) +# importance sampling (mean and variance) jnp.mean(μ_L_f), jnp.var(μ_L_f) ``` 我们也可以使用其他分布作为我们的重要性分布。 -下面我们选择其中几个,并比较它们的抽样特性。 +下面我们选取几个分布,并比较它们的抽样特性。 ```{code-cell} ipython3 a_list = [0.5, 1., 2.] @@ -537,7 +571,7 @@ b_list = [0.5, 1.2, 5.] --- mystnb: figure: - caption: '重要性抽样分布比较' + caption: '重要性抽样分布的比较' name: fig-imp-sampling-distributions --- w_range = np.linspace(1e-5, 1-1e-5, 1000) @@ -557,41 +591,53 @@ plt.show() 我们再考虑另外两个分布。 -提醒一下,$h_1$ 是我们上面使用的原始 $Beta(0.5,0.5)$ 分布。 +提醒一下,$h_1$ 就是我们上面使用的原始 $Beta(0.5,0.5)$ 分布。 $h_2$ 是 $Beta(1,1.2)$ 分布。 -注意 $h_2$ 在 $\omega$ 取较大值时与 $g$ 的形状相似,但在较小值时具有更多质量。 +注意 $h_2$ 在 $\omega$ 较大的取值处与 $g$ 的形状相似,但在较小的取值处有更多的质量。 -我们的直觉是,$h_2$ 应该是一个很好的重要性抽样分布。 +我们的直觉是 $h_2$ 应该是一个很好的重要性抽样分布。 $h_3$ 是 $Beta(2,5)$ 分布。 注意 $h_3$ 在接近 0 和接近 1 的取值处几乎没有质量。 -我们的直觉是,$h_3$ 将会是一个较差的重要性抽样分布。 +我们的直觉是 $h_3$ 会是一个较差的重要性抽样分布。 -上面的方差计算能让我们把这些直觉表述得更精确。 +上面的方差计算可以让我们精确地验证这些直觉。 -从 $h$ 中抽样并重新加权,会为每个观测值赋予 $\ell\left(\omega\right) g\left(\omega\right) / h\left(\omega\right) = f\left(\omega\right) / h\left(\omega\right)$ 的值,因此该估计量恰好在以下条件下具有有限方差: +从 $h$ 中抽样并重新加权,会使每个观测值获得权重 $\ell\left(\omega\right) g\left(\omega\right) / h\left(\omega\right) = f\left(\omega\right) / h\left(\omega\right)$,因此估计量具有有限方差,当且仅当 $$ \int_0^1 \frac{f\left(\omega\right)^2}{h\left(\omega\right)} d\omega < \infty $$ -对于 $h_1$ 和 $h_2$,该积分是收敛的。 +对于一个 Beta$(a, b)$ 重要性密度 $h$ 和均匀分布 $f$, + +$$ +\int_0^1 \frac{f\left(\omega\right)^2}{h\left(\omega\right)} d\omega += B(a, b) \int_0^1 \omega^{1-a} (1-\omega)^{1-b} d\omega += B(a, b) \, B(2-a, 2-b) +$$ + +当 $a < 2$ 且 $b < 2$ 时成立,否则该积分为无穷大。 + +该积分对 $h_1$ 等于 $\pi^2/8 \approx 1.234$,对 $h_2$ 等于 $1/0.96 \approx 1.042$,对 $h = f$ 等于 $1$。 + +候选分布 $h_2$ 之所以优良,是因为它与 $f$ 很接近。 -对于 $h_3$,该积分在**两个**端点都发散,因为 $h_3$ 在原点附近以 $\omega$ 的速率趋于零,而在 1 附近以 $\left(1-\omega\right)^4$ 的速率趋于零。 +对于 $h_3$,该积分在**两个**端点处都是发散的,因为 $h_3$ 在原点处以 $\omega$ 的速度趋于零,在 1 处以 $\left(1-\omega\right)^4$ 的速度趋于零。 -因此,使用 $h_3$ 进行重要性抽样具有无限方差,这与标准蒙特卡洛方法一样——这正是它成为较差选择的原因。 +因此使用 $h_3$ 进行重要性抽样具有无穷方差,这和标准蒙特卡洛方法一样,正是这一点使其成为一个糟糕的选择。 -我们首先模拟并绘制使用 $h_2$ 作为重要性抽样分布时,$\hat{E} \left[L\left(\omega^t\right)\right]$ 的估计分布。 +我们首先模拟并绘制使用 $h_2$ 作为重要性抽样分布时,$\hat{E} \left[L\left(\omega^t\right)\right]$ 估计值的分布。 ```{code-cell} ipython3 --- mystnb: figure: - caption: '使用重要性分布 $h_2$ 的估计' + caption: '使用重要性分布 $h_2$ 的估计结果' name: fig-imp-estimates-h2 --- T_values_h2 = [1, 20] @@ -599,18 +645,18 @@ imp_h2 = simulate_multiple_T(jax.random.key(9), g_a, g_b, a_list[1], b_list[1], T_values_h2, N_simu) -plot_estimates(T_values_h2, mc, imp_h2, '$h_2$ 生成') +plot_estimates(T_values_h2, mc, imp_h2, '$h_2$ generating') ``` -我们的模拟结果表明,$h_2$ 确实是我们问题的一个相当好的重要性抽样分布。 +我们的模拟结果表明,$h_2$ 确实是我们这个问题的一个相当好的重要性抽样分布。 -即使在 $T=20$ 时,均值也非常接近 $1$,并且方差很小。 +即使在 $T=20$ 时,均值也非常接近 $1$,而且方差很小。 ```{code-cell} ipython3 --- mystnb: figure: - caption: '使用重要性分布 $h_3$ 的估计' + caption: '使用重要性分布 $h_3$ 的估计结果' name: fig-imp-estimates-h3 --- T_values_h3 = [1, 20] @@ -618,11 +664,303 @@ imp_h3 = simulate_multiple_T(jax.random.key(10), g_a, g_b, a_list[2], b_list[2], T_values_h3, N_simu) -plot_estimates(T_values_h3, mc, imp_h3, '$h_3$ 生成') +plot_estimates(T_values_h3, mc, imp_h3, '$h_3$ generating') +``` + +然而,对于我们的这个问题,$h_3$ 显然是一个较差的重要性抽样分布,在 $T = 20$ 时其均值估计远离 $1$。 + +由于 $h_3 > 0$ 在 $(0,1)$ 上成立,使用 $h_3$ 的重要性抽样估计量对任意 $T$ 都是无偏的,正如在 $g$ 之下的蒙特卡洛估计量一样。 + +问题出在其抽样分布的形状上。 + +即使在 $T = 1$ 时,使用 $h_3$ 得到的估计值也比在 $g$ 之下的蒙特卡洛估计值更加分散,并且中位数估计值更明显地低于 $1$。 + +在 $\omega = 1$ 附近,$h_3$ 以 $(1-\omega)^4$ 的速度趋于零,而 $f = 1$,因此在 $h_3$ 之下,权重 $f/h_3$ 的尾指数为 $5/4$,小于在 $g$ 之下 $f/g$ 的尾指数 $3/2$。 + +因此,由 $N$ 次抽取构成的样本均值的误差,在 $h_3$ 之下按 $N^{-1/5}$ 的速度缩小,而在 $g$ 之下则按 $N^{-1/3}$ 的速度缩小(参见 {ref}`imp_ex2`)。 + +因此,我们的模拟结果表明,对于我们的这个问题,直接在 $g$ 之下使用蒙特卡洛近似,要比使用 $h_3$ 作为重要性抽样分布更好。 + +## 练习 + +```{exercise} +:label: imp_ex1 + +考虑通过从 Beta$(a, b)$ 重要性密度 $q$ 中抽取长度为 $T$ 的路径来估计 $E^g\left[L\left(\omega^T\right)\right] = 1$。 + +1. 证明每条路径对估计量的贡献为 $\prod_{i=1}^T f(\omega_i)/q(\omega_i)$,并且该贡献的二阶矩为 $M(a,b)^T$,其中当 $a, b < 2$ 时 $M(a,b) = \int_0^1 f^2/q \, d\omega = B(a,b) B(2-a, 2-b)$,否则 $M(a,b) = +\infty$。 +2. 使用柯西-施瓦茨不等式证明 $M(a,b) \geq 1$,且仅在 $(a,b) = (1,1)$ 处取等号。在 $(0,2) \times (0,2)$ 上绘制 $\log M(a,b)$ 的等高线图。 +3. $N$ 条加权路径的有效样本量约为 $N / M(a,b)^T$。绘制 $h_1$ 和 $h_2$ 的有效样本量与 $N$ 的比值随 $T$ 变化的图像。在 $T = 20$ 和 $T = 50$ 时,$h_1$ 需要多少条路径才能使有效样本量达到 $1000$? +``` + +```{solution-start} imp_ex1 +:class: dropdown +``` + +**第 1 部分。** 每条路径贡献 $\prod_{i=1}^T \ell(\omega_i) g(\omega_i)/q(\omega_i) = \prod_{i=1}^T f(\omega_i)/q(\omega_i)$。 + +因为 $\omega_i$ 是来自 $q$ 的独立同分布抽样,二阶矩为 $\left(E^q\left[(f/q)^2\right]\right)^T = M(a,b)^T$,其中 $M(a,b) = \int_0^1 f^2/q \, d\omega$。 + +由于 $f = 1$,$M(a,b) = B(a,b) \int_0^1 \omega^{1-a} (1-\omega)^{1-b} d\omega$,当 $a < 2$ 且 $b < 2$ 时该值等于 $B(a,b) B(2-a, 2-b)$,否则为无穷大。 + +**第 2 部分。** 由柯西-施瓦茨不等式, + +$$ +1 = \left(\int_0^1 f \, d\omega\right)^2 += \left(\int_0^1 \frac{f}{\sqrt{q}} \sqrt{q} \, d\omega\right)^2 +\leq \int_0^1 \frac{f^2}{q} d\omega \int_0^1 q \, d\omega = M(a,b) , +$$ + +当且仅当 $f/\sqrt{q}$ 与 $\sqrt{q}$ 成比例时取等号,即 $q = f$。 + +单个权重的方差为 $M(a,b) - 1 = \chi^2(f\|q)$。 + +```{code-cell} ipython3 +from scipy.special import betaln + +def M(a, b): + """q = Beta(a, b) 时重要性权重 f/q 的二阶矩。""" + if a < 2 and b < 2: + return np.exp(betaln(a, b) + betaln(2 - a, 2 - b)) + return np.inf + +grid = np.linspace(0.05, 1.95, 191) +log_M = np.array([[np.log(M(a, b)) for a in grid] for b in grid]) + +fig, ax = plt.subplots(figsize=(7, 6)) +cs = ax.contourf(grid, grid, np.minimum(log_M, 2), + levels=np.linspace(0, 2, 21), cmap='viridis') +fig.colorbar(cs, label=r'$\log M(a, b)$ (capped at 2)') +lines = ax.contour(grid, grid, log_M, levels=[0.01, 0.05, 0.2, 0.5, 1], + colors='w', linewidths=0.8) +ax.clabel(lines, fmt='%.2f', fontsize=8) +for (a, b), name in zip([(0.5, 0.5), (1.0, 1.2), (1.0, 1.0)], + ['$h_1$', '$h_2$', '$f$']): + ax.plot(a, b, 'wo') + ax.annotate(name, (a, b), xytext=(5, 5), textcoords='offset points', + color='w') +ax.set_xlabel('$a$') +ax.set_ylabel('$b$') +plt.show() + +i_b, i_a = np.unravel_index(np.argmin(log_M), log_M.shape) +print(f"Minimum of M on the grid at (a, b) = ({grid[i_a]:.2f}, {grid[i_b]:.2f})") +print(f"M(h_1) = {M(0.5, 0.5):.4f}, M(h_2) = {M(1, 1.2):.4f}") +``` + +**第 3 部分。** + +```{code-cell} ipython3 +T_grid = np.arange(1, 51) +plt.figure(figsize=(8, 5)) +for (a, b), name in zip([(0.5, 0.5), (1.0, 1.2)], ['$h_1$', '$h_2$']): + plt.semilogy(T_grid, M(a, b)**(-T_grid), lw=2, label=name) +plt.xlabel('$T$') +plt.ylabel('effective sample size / $N$') +plt.legend() +plt.show() + +for T in [20, 50]: + print(f"T = {T}: h_1 needs N = {1000 * M(0.5, 0.5)**T:,.0f} paths, " + f"h_2 needs N = {1000 * M(1, 1.2)**T:,.0f} paths") +``` + +在 $h_1$ 下,有效样本量每增加一期都会按因子 $8/\pi^2$ 缩小。 + +```{solution-end} ``` -然而,$h_3$ 显然是我们问题的一个较差的重要性抽样分布,在 $T = 20$ 时其均值估计值与 $1$ 相差甚远。 +```{exercise} +:label: imp_ex2 -请注意,即使在 $T = 1$ 时,使用重要性抽样得到的均值估计也比仅使用 $g$ 抽样时更有偏差。 +1. 设 $\omega \sim g$。证明 $\Pr\{\ell(\omega) > x\}$ 在 $x$ 较大时大致正比于 $x^{-3/2}$,因此 $\ell(\omega)$ 在 $g$ 下的尾指数为 $3/2$。 +2. 设 $\omega \sim h_3 = $ Beta$(2, 5)$。证明权重 $f(\omega)/h_3(\omega)$ 在 $h_3$ 下的尾指数为 $5/4$。$(0,1)$ 的哪个端点决定了尾指数? +3. 用希尔估计量 {cite}`hill1975` 确认这两个尾指数,该估计量使用 $n$ 个抽样中最大的 $k$ 个值 $X_{(1)} \geq X_{(2)} \geq \cdots \geq X_{(k+1)}$ 来估计尾指数: -因此,我们的模拟结果表明,对于我们的问题,直接在 $g$ 下使用蒙特卡洛近似,会比使用 $h_3$ 作为重要性抽样分布效果更好。 + $$ + \hat \alpha_k = \left(\frac{1}{k} \sum_{i=1}^k \log \frac{X_{(i)}}{X_{(k+1)}}\right)^{-1} . + $$ + +4. 设 $T = 1$。对于 $N = 10^2, 10^3, 10^4, 10^5$,当 $q$ 分别为 $g$(标准蒙特卡洛)、$h_2$ 和 $h_3$ 时,计算从 $q$ 中抽取 $N$ 个样本得到的 $f/q$ 的 $500$ 次重复样本均值。在对数-对数坐标上绘制重复样本均值的四分位距与 $N$ 的关系,并将斜率与 $-1/3$、$-1/2$ 和 $-1/5$ 进行比较。 +``` + +```{solution-start} imp_ex2 +:class: dropdown +``` + +**第 1 部分。** 在原点附近,$g(\omega) \approx k \omega^2$,其中 $k = 1/B(3, 1.2)$。 + +当 $x$ 较大时,$\ell(\omega) = 1/g(\omega) > x$ 主要在 $\omega < (kx)^{-1/2}$ 时发生。 + +由于当 $u$ 较小时 $\Pr_g\{\omega < u\} \approx k u^3/3$, + +$$ +\Pr_g\{\ell(\omega) > x\} \approx \frac{k}{3} (kx)^{-3/2} = \frac{1}{3} k^{-1/2} x^{-3/2} . +$$ + +在 $\omega = 1$ 附近,$g$ 以 $(1-\omega)^{0.2}$ 的速度趋于零,这贡献了一个正比于 $x^{-6}$ 的尾部,太薄而不足为虑。 + +**第 2 部分。** 密度 $h_3(\omega) = 30\, \omega (1-\omega)^4$ 在两个端点都趋于零。 + +在 $\omega = 0$ 附近,$1/h_3 > x$ 在 $\omega < 1/(30x)$ 时发生,其概率约为 $15/(30x)^2$,正比于 $x^{-2}$。 + +在 $\omega = 1$ 附近,$1/h_3 > x$ 在 $1 - \omega < (30x)^{-1/4}$ 时发生,其概率约为 $6 (30x)^{-5/4}$,正比于 $x^{-5/4}$。 + +尾指数为 $5/4$ 的较重尾部来自右端点。 + +根据广义中心极限定理,尾指数 $\alpha \in (1,2)$ 使样本均值的误差按 $N^{1/\alpha - 1}$ 的速度缩小:当 $\alpha = 3/2$ 时为 $N^{-1/3}$,当 $\alpha = 5/4$ 时为 $N^{-1/5}$。 + +**第 3 部分。** + +```{code-cell} ipython3 +def log_beta_pdf(w, a, b): + """Beta(a, b) 的对数密度。""" + return (a - 1) * np.log(w) + (b - 1) * np.log1p(-w) - betaln(a, b) + +def hill(x, k): + """由 x 中最大的 k 个值得到的尾指数希尔估计量。""" + x_sorted = np.sort(x)[::-1] + return 1 / np.mean(np.log(x_sorted[:k] / x_sorted[k])) + +rng = np.random.default_rng(0) +n = 1_000_000 +w_g = rng.beta(g_a, g_b, n) +w_h3 = rng.beta(2, 5, n) +weights = {'f/g under g': np.exp(-log_beta_pdf(w_g, g_a, g_b)), + 'f/h_3 under h_3': np.exp(-log_beta_pdf(w_h3, 2, 5))} + +for name, x in weights.items(): + estimates = [f"{hill(x, k):.3f}" for k in (500, 1000, 2000, 5000)] + print(f"{name}: Hill estimates for k = 500, 1000, 2000, 5000: {estimates}") +``` + +希尔估计值接近 $3/2$ 和 $5/4$。 + +**第 4 部分。** + +```{code-cell} ipython3 +N_values = np.array([10**2, 10**3, 10**4, 10**5]) +R = 500 +proposals = {'$g$ (standard Monte Carlo)': (g_a, g_b, 1/3), + '$h_2$': (1.0, 1.2, 1/2), + '$h_3$': (2.0, 5.0, 1/5)} + +plt.figure(figsize=(8, 5)) +for name, (a, b, rate) in proposals.items(): + iqr = [] + for N in N_values: + means = np.empty(R) + for r in range(R): + w = np.clip(rng.beta(a, b, N), 1e-16, 1 - 1e-16) + means[r] = np.mean(np.exp(-log_beta_pdf(w, a, b))) + q75, q25 = np.quantile(means, [0.75, 0.25]) + iqr.append(q75 - q25) + slope = np.polyfit(np.log(N_values), np.log(iqr), 1)[0] + line, = plt.loglog(N_values, iqr, 'o-', + label=f'{name}: slope {slope:.2f}') + plt.loglog(N_values, iqr[0] * (N_values / N_values[0])**(-rate), + '--', color=line.get_color(), lw=1) +plt.xlabel('$N$') +plt.ylabel('interquartile range of replicate means') +plt.legend() +plt.show() +``` + +虚线的斜率分别为 $-1/3$、$-1/2$ 和 $-1/5$。 + +拟合的斜率与之接近。 + +```{solution-end} +``` + +```{exercise} +:label: imp_ex3 + +在 {doc}`likelihood_ratio_process` 的 {ref}`这一节 ` 中,第一类错误的概率 $\alpha_T = \Pr_f\{L(\omega^T) < 1\}$ 随 $T$ 呈指数衰减,因此标准蒙特卡洛方法无法在 $T$ 较大时对其进行估计。 + +设 $\phi^*$ 使切尔诺夫系数 $\rho(\phi) = \int_0^1 f^\phi g^{1-\phi} d\omega$ 最小化,并设 $q = f^{\phi^*} g^{1-\phi^*}/\rho(\phi^*)$ 为倾斜密度。 + +1. 证明 $q$ 是 Beta$(\phi^* F_a + (1-\phi^*) G_a, \ \phi^* F_b + (1-\phi^*) G_b)$ 密度,并计算 $\phi^*$ 以及 $q$ 的参数。 +2. 证明 + + $$ + \alpha_T = \rho(\phi^*)^T \, E^q\left[\mathbf{1}\{L(\omega^T) < 1\} \, L(\omega^T)^{1-\phi^*}\right] . + $$ + +3. 对于 $T = 30, 60, 100$,用从 $f$ 中抽取的 $N = 20{,}000$ 条路径进行标准蒙特卡洛估计 $\alpha_T$,并用从 $q$ 中抽取的 $N = 20{,}000$ 条路径进行重要性抽样估计。报告重要性抽样估计量的相对标准误差。 +``` + +```{solution-start} imp_ex3 +:class: dropdown +``` + +**第 1 部分。** 对于 Beta 密度, + +$$ +f(\omega)^\phi g(\omega)^{1-\phi} \propto \omega^{\phi F_a + (1-\phi) G_a - 1} (1-\omega)^{\phi F_b + (1-\phi) G_b - 1} , +$$ + +这与所述的 Beta 密度成比例。 + +**第 2 部分。** 由于 $f/q = \rho(\phi^*) (f/g)^{1-\phi^*}$, + +$$ +\alpha_T = E^q\left[\mathbf{1}\{L(\omega^T) < 1\} \prod_{i=1}^T \frac{f(\omega_i)}{q(\omega_i)}\right] += \rho(\phi^*)^T \, E^q\left[\mathbf{1}\{L(\omega^T) < 1\} \, L(\omega^T)^{1-\phi^*}\right] . +$$ + +在事件 $L(\omega^T) < 1$ 上,权重 $\rho(\phi^*)^T L(\omega^T)^{1-\phi^*}$ 至多为 $\rho(\phi^*)^T = e^{-C(f,g) T}$,因此该估计量的方差较小。 + +在 $\phi^*$ 处,$\log \rho(\phi)$ 的导数(等于 $E^q \log \ell(\omega)$)为零。 + +因此 $\log L(\omega^T)$ 在 $q$ 下均值为零,而在 $f$ 下的罕见事件 $L(\omega^T) < 1$ 在 $q$ 下大约有一半的概率发生。 + +以这种方式选取 $q$ 被称为指数倾斜 {cite}`Bucklew_2004`。 + +**第 3 部分。** + +```{code-cell} ipython3 +from scipy.optimize import minimize_scalar + +F_a, F_b = params.F_a, params.F_b + +def log_ρ(ϕ): + """f = Beta(F_a, F_b) 且 g = Beta(g_a, g_b) 时的对数切尔诺夫系数。""" + return (betaln(ϕ * F_a + (1 - ϕ) * g_a, ϕ * F_b + (1 - ϕ) * g_b) + - ϕ * betaln(F_a, F_b) - (1 - ϕ) * betaln(g_a, g_b)) + +res = minimize_scalar(log_ρ, bounds=(0, 1), method='bounded') +ϕ_star, log_ρ_star = res.x, res.fun +q_a = ϕ_star * F_a + (1 - ϕ_star) * g_a +q_b = ϕ_star * F_b + (1 - ϕ_star) * g_b +print(f"ϕ* = {ϕ_star:.4f}, C(f, g) = {-log_ρ_star:.4f}, " + f"q = Beta({q_a:.4f}, {q_b:.4f})") + +rng = np.random.default_rng(1) +N = 20_000 + +for T in [30, 60, 100]: + # Standard Monte Carlo under f + w = rng.uniform(size=(N, T)) + log_L = np.sum(log_beta_pdf(w, F_a, F_b) - log_beta_pdf(w, g_a, g_b), axis=1) + α_mc = np.mean(log_L < 0) + + # Importance sampling under the tilted density q + w = np.clip(rng.beta(q_a, q_b, (N, T)), 1e-300, 1 - 1e-16) + log_L = np.sum(log_beta_pdf(w, F_a, F_b) - log_beta_pdf(w, g_a, g_b), axis=1) + X = np.where(log_L < 0, np.exp(T * log_ρ_star + (1 - ϕ_star) * log_L), 0.0) + α_is = np.mean(X) + rel_se = np.std(X) / np.sqrt(N) / α_is + + print(f"T = {T:>3}: standard MC = {α_mc:.2e}, " + f"importance sampling = {α_is:.3e} (relative s.e. {rel_se:.3f})") +``` + +在 $T = 30$ 时,两种估计值一致。 + +在 $T = 60$ 时,标准蒙特卡洛仅依赖于少数几条满足 $L(\omega^T) < 1$ 的路径,而重要性抽样的相对标准误差接近 $1$ 个百分点。 + +在 $T = 100$ 时,标准蒙特卡洛没有记录到任何满足 $L(\omega^T) < 1$ 的路径,而重要性抽样仍能给出相对标准误差接近 $1.5$ 个百分点的估计值。 + +```{solution-end} +``` diff --git a/lectures/information_market_equilibrium.md b/lectures/information_market_equilibrium.md index 152c4076..f857d969 100644 --- a/lectures/information_market_equilibrium.md +++ b/lectures/information_market_equilibrium.md @@ -21,6 +21,7 @@ translation: Price revelation::Two interpretations: 两种解释 Price revelation::Two interpretations::Insider trading in a stock market: 股票市场中的内幕交易 Price revelation::Two interpretations::Price as a quality signal: 价格作为质量信号 + Price revelation::Uninformed traders who learn from prices: 从价格中学习的不知情交易者 Invertibility and the elasticity of substitution: 可逆性与替代弹性 Invertibility and the elasticity of substitution::The two-state first-order condition: 两状态一阶条件 Invertibility and the elasticity of substitution::CES utility: CES 效用 @@ -31,6 +32,7 @@ translation: Bayesian price expectations in a dynamic economy::The identification problem: 识别问题 Bayesian price expectations in a dynamic economy::Bayesian updating: 贝叶斯更新 Bayesian price expectations in a dynamic economy::The convergence theorem: 收敛定理 + Bayesian price expectations in a dynamic economy::Connection to merging of opinions: 与观点融合的联系 Simulating Bayesian learning from prices: 从价格中模拟贝叶斯学习 Simulating Bayesian learning from prices::Price expectations vs. rational expectations: 价格预期 vs. 理性预期 Simulating Bayesian learning from prices::Learning the reduced form without identifying the structure: 学到简约形式而不识别结构 @@ -80,11 +82,15 @@ Kihlstrom 和 Mirman 的回答依赖于统计学中的两个经典思想: - 在动态经济中,随着信息的累积,贝叶斯价格预期会收敛到**理性预期**,即使无法仅从价格中识别出深层结构。 ```{note} -{cite:t}`kihlstrom_mirman1975` 以细致的计量经济学家所采用的方式使用了"简约形式"和"结构"模型这两个术语。 +{cite:t}`kihlstrom_mirman1975` 以细致的计量经济学家所采用的方式使用了"结构"和"简约形式"这两个术语。 -简约形式模型和结构模型成对出现。 +结构是对经济基本面的完整描述,在这里即一个参数向量 $\lambda$。 -对于每一个结构或结构模型,都存在一个简约形式,或者一组对应于不同可能回归的简约形式。 +每一个结构都蕴含着可观测变量的一个概率分布,在这里即均衡价格的分布,而该分布就是简约形式。 + +多个结构可以蕴含同一个简约形式。 + +我们把蕴含同一简约形式的结构集合称为一个简约形式类;价格数据能识别出该类,但无法识别出其中的具体结构。 ``` 本讲的组织结构如下。 @@ -106,9 +112,9 @@ from scipy.optimize import brentq from scipy.stats import norm ``` - ## 设定 + ### 偏好、禀赋与未知状态 该经济有两种商品。 @@ -148,7 +154,11 @@ $$ **竞争均衡**是一个能同时出清两个市场的价格 $\hat{p}$。 -在所维持的凸性假设下,均衡存在,并且遵循 {cite:t}`kihlstrom_mirman1975`,我们假设均衡价格是唯一的,从而可以将 $\hat p = p(\mu)$ 写作知情代理人后验的一个良好定义的函数。 +在所维持的凸性假设下,均衡存在,并且遵循 {cite:t}`kihlstrom_mirman1975`,我们假设均衡价格是唯一的。 + +我们将 $\hat p = p(\mu, P^2, \ldots, P^n)$ 记作当代理人 1 持有信念 $\mu$、其他代理人持有信念 $P^2, \ldots, P^n$ 时的均衡价格。 + +在整个静态分析过程中,信念 $P^2, \ldots, P^n$ 保持不变,因此我们将价格函数简写为 $p(\mu)$。 在接下来的大部分内容中,生产方面只通过所诱导的均衡价格映射发挥作用,因此当我们转向数值说明时,我们将略去生产,并使用纯交换/投资组合的解释,以保持计算的透明性。 @@ -185,6 +195,7 @@ $$ (price_revelation_theorem)= ## 价格揭示 + ### Blackwell 充分性 如果观察均衡价格与直接观察信号 $\tilde{y}$ 对 $\bar{a}$ 的信息量相同,那么价格变量 $p(\mu_{\tilde{y}})$ 就*准确地传递*了内部人的私有信息。 @@ -206,6 +217,8 @@ $$ 因此,一旦知道 $\tilde{y}$,$\tilde{y}'$ 就不再提供关于 $\bar{a}$ 的额外信息。 ``` +这正是 {doc}`blackwell_kihlstrom` 中 {prf:ref}`def-sufficiency` 所描述的扰动(garbling)关系:似然 $\phi_a(y)$ 构成信息量更大的实验,似然 $\phi'_a(y')$ 构成其扰动结果,而 $P(y' \mid y)$ 即为马尔可夫矩阵 $Q$。 + {cite:t}`kihlstrom_mirman1975` 证明了 ```{prf:lemma} 后验充分性 @@ -227,12 +240,14 @@ $$ 等价地,给定 $\mu_{\tilde y}$ 时 $\tilde y$ 的条件分布独立于 $\bar a$,因此 $\mu_{\tilde y}$ 在 Blackwell 意义下对 $\tilde y$ 是充分的。 ``` +该引理正是 {doc}`blackwell_kihlstrom` 中"后验与标准实验"一节所述的 Kihlstrom 标准实验要点:用每个信号所诱导的后验来替代该信号,并不会损失关于 $\bar a$ 的任何信息。 + 现在让我们考虑从信念到价格的映射。 ```{prf:theorem} 价格揭示 :label: ime_theorem_price_revelation -在上述模型中,价格随机变量 $p(\mu_{\tilde{y}})$ 对随机变量 $\tilde{y}$ 是充分的,当且仅当函数 $p(P^1)$ 在价格集合 +在上述模型中,价格随机变量 $p(\mu_{\tilde{y}})$ 对随机变量 $\tilde{y}$ 是充分的,当且仅当函数 $p(\cdot)$ 在价格集合 $$ \mathcal{P} = \Bigl\{\, p(\mu_y) : y \in Y,\; @@ -265,7 +280,13 @@ $$ 这个条件分布独立于状态,因此价格对后验是充分的;结合 {prf:ref}`ime_lemma_posterior_sufficiency`,价格因而对信号是充分的。 -反之,如果 $M$ 中两个不同的后验产生了相同的价格,那么价格的观察者就无法分辨发生的是哪个后验,而该论文正式表明,在这种情况下,给定价格时后验的条件分布将依赖于状态,因此价格不可能是充分的。 +反之,假设 $M$ 中两个不同的后验 $\mu_y \neq \mu_{y'}$ 产生了相同的价格 $p$。 + +在该价格条件下,观察者关于 $\bar a$ 的后验是对那些满足 $p(\mu_z) = p$ 的后验 $\mu_z$ 的一个混合,权重均为正。 + +一个权重均为正的混合不可能同时等于两个不同的后验,因此,在看到价格 $p$ 之后再得知 $\tilde y$,观察者关于 $\bar a$ 的信念至少会在 $y$ 和 $y'$ 其中一个情形下发生改变。 + +因此价格对 $\tilde y$ 并不是充分的。 在转向可逆性本身之前,记住该论文所强调的两种经济解释是有帮助的。 @@ -287,6 +308,26 @@ $$ 不知情的消费者只要可逆性成立,就可以从市场价格推断质量。 +### 从价格中学习的不知情交易者 + +Kihlstrom 和 Mirman 模型中不知情的交易者持有固定的信念 $P^2, \ldots, P^n$,并不从价格中学习。 + +{prf:ref}`ime_theorem_price_revelation` 所描述的是一个知道映射 $p(\cdot)$ 的外部观察者能够推断出什么。 + +如果不知情的交易者自己也知道 $p(\cdot)$ 并以价格为条件,那么他们的信念和需求就会依赖于价格,均衡也就变成了理性预期均衡。 + +{cite:t}`grossman1976` 构造了一个理性预期均衡,其中价格完全揭示了知情交易者的信息。 + +{cite:t}`Radner1979` 证明,在状态有限的情形下,完全揭示信息的理性预期均衡一般是存在的。 + +{cite:t}`GrossmanStiglitz1980` 增加了获取信息的成本。 + +如果价格能揭示一切信息,就不会有交易者愿意为信息付费;而如果没有交易者为信息付费,价格也就没有什么可揭示的了。 + +他们通过引入风险资产的噪声供给来化解这一悖论,使价格只能部分地揭示信息。 + +{doc}`rational_learning_re` 研究了理性预期均衡中从价格学习的贝叶斯交易者。 + (invertibility_conditions)= ## 可逆性与替代弹性 @@ -299,16 +340,18 @@ $$ ```{prf:lemma} 相同价格意味着相同配置 :label: ime_lemma_same_price_same_allocation -假设 $u^i$ 具有连续的一阶偏导数,且 $u^i$ 是拟凹的。 +假设 $u^i$ 具有连续的一阶偏导数,且 $u^i$ 是严格拟凹的。 设 $p \in \mathcal{P}$。 -如果存在 $M$ 中的两个测度 $\mu^*$ 和 $\mu'$,使得 $p(\mu^*, P^2, \ldots, P^n) = p(\mu', P^2, \ldots, P^n) = p$,那么 +如果存在 $M$ 中的两个测度 $\mu^*$ 和 $\mu'$,使得 $p(\mu^*) = p(\mu') = p$,那么 $$ -x^i(\mu^*, P^2, \ldots, P^n) = x^i(\mu', P^2, \ldots, P^n), \quad -i = 1, \ldots, n. +x^i(\mu^*) = x^i(\mu'), \quad +i = 1, \ldots, n, $$ + +其中 $x^i(\mu)$ 是当代理人 1 的信念为 $\mu$、其他代理人的信念为 $P^2, \ldots, P^n$ 时,交易者 $i$ 的均衡商品束。 ``` 固定除代理人 1 之外所有代理人的信念。 @@ -317,6 +360,8 @@ $$ 其直觉是,当价格不变时,不知情交易者的需求也不变,因此市场出清迫使知情代理人的商品束也保持不变。 +严格拟凹性使得每位交易者的需求都是价格的单值函数,而不知情交易者的信念 $P^2, \ldots, P^n$ 不会随价格变化。 + 该引理使我们能够将知情代理人的均衡商品束定义为价格的一个函数: $$ @@ -337,7 +382,7 @@ $$ ```{prf:lemma} 给定价格下的唯一后验 :label: ime_lemma_unique_posterior -假设 $u^1$ 的一阶偏导数存在,且 $u^1$ 是拟凹的。 +假设 $u^1$ 的一阶偏导数存在,且 $u^1$ 是严格拟凹的。 同时假设代理人 1 总是消费两种商品的正数量。 @@ -348,7 +393,7 @@ $$ {\sum_{s=1}^S u^1_2(a_s x_1(p), x_2(p))\, \mu(a_s)} = p, $$ -那么 $p(P^1)$ 在 $\mathcal{P}$ 上是可逆的。 +那么 $p(\cdot)$ 在 $\mathcal{P}$ 上是可逆的。 ``` 如果两个不同的后验给出相同的价格,那么根据 {prf:ref}`ime_lemma_same_price_same_allocation`,它们将共享相同的商品束 $x(p)$,这与在该价格下求解一阶条件的后验的唯一性相矛盾。 @@ -378,9 +423,9 @@ $$ 同时假设知情代理人在所有均衡配置中总是消费两种商品的正数量。 -如果 $S = 2$ 且 $u^1$ 的替代弹性始终小于一或始终大于一,那么 $p(P^1)$ 在 $\mathcal{P}$ 上是可逆的。 +如果 $S = 2$ 且 $u^1$ 的替代弹性始终小于一或始终大于一,那么 $p(\cdot)$ 在 $\mathcal{P}$ 上是可逆的。 -如果 $u^1$ 是科布-道格拉斯型的(替代弹性恒等于一),那么 $p(P^1)$ 在 $\mathcal{P}$ 上是常数。 +如果 $u^1$ 是科布-道格拉斯型的(替代弹性恒等于一),那么 $p(\cdot)$ 在 $M$ 上是常数。 ``` 当 $\sigma = 1$ 时,收入效应和替代效应恰好相互抵消,因此代理人 1 对商品 1 的需求不会对关于 $\bar{a}$ 的信念变化做出反应。 @@ -392,22 +437,28 @@ $$ 为具体起见,我们使用一个采用**常替代弹性**(CES)效用函数的简化例子 $$ -u(c_1, c_2) = \bigl(c_1^{\rho} + c_2^{\rho}\bigr)^{1/\rho}, \qquad \rho \in -(-\infty,0) \cup (0,1), +u(c_1, c_2) = \Bigl(\frac{c_1^{\rho} + c_2^{\rho}}{2}\Bigr)^{1/\rho}, \qquad +\rho \in (-\infty,0) \cup (0,1), $$ 其替代弹性为 $\sigma = 1/(1-\rho)$。 -- $\rho \to 0$:科布-道格拉斯($\sigma = 1$)。 +- $\rho \to 0$:科布-道格拉斯($\sigma = 1$),$u \to \sqrt{c_1 c_2}$。 - $\rho < 0$:$\sigma < 1$(互补品)。 - $0 < \rho < 1$:$\sigma > 1$(替代品)。 +括号内的因子 $1/2$ 使得当 $\rho \to 0$ 时 $u$ 收敛到 $\sqrt{c_1 c_2}$;若没有该因子,则当 $\rho \downarrow 0$ 时 $u$ 会发散,而当 $\rho \uparrow 0$ 时 $u$ 会趋于零。 + +该因子以一个公共常数对 $u_1$ 和 $u_2$ 进行重新缩放,因此不会影响边际替代率或价格。 + 相关的偏导数为 $$ -u_1(c_1,c_2) = \bigl(c_1^\rho + c_2^\rho\bigr)^{1/\rho - 1}\, c_1^{\rho-1}, +u_1(c_1,c_2) = \frac{1}{2}\Bigl(\frac{c_1^\rho + c_2^\rho}{2}\Bigr)^{1/\rho - 1} +c_1^{\rho-1}, \qquad -u_2(c_1,c_2) = \bigl(c_1^\rho + c_2^\rho\bigr)^{1/\rho - 1}\, c_2^{\rho-1}. +u_2(c_1,c_2) = \frac{1}{2}\Bigl(\frac{c_1^\rho + c_2^\rho}{2}\Bigr)^{1/\rho - 1} +c_2^{\rho-1}. $$ 这个 CES 例子只是一个说明,因为定理本身涵盖任何弹性处处大于一或处处小于一的位似效用。 @@ -416,9 +467,11 @@ $$ ### 均衡价格作为后验的函数 -我们将代理人 1 视为*唯一*的知情交易者,他在均衡时吸收一单位的商品 1(即 $x_1 = 1$)。 +我们不考虑生产。 + +不知情的交易者拥有一单位的商品 1,对其没有用处,并会以任何正价格出售它,因此在均衡时代理人 1 吸收这一单位,即 $x_1 = 1$。 -令 $W_1 = w^1 + \theta^1 \pi$ 表示代理人 1 的总财富(禀赋加利润份额)。 +代理人 1 拥有 $W_1$ 单位的商品 2,而没有公司的股份($\theta^1 = 0$),因此他的财富 $W_1 = w^1$ 不依赖于 $p$。 代理人 1 的预算约束因而简化为 $x_2 = W_1 - p$,均衡价格是满足一阶条件的唯一的 $p \in (0, W_1)$ @@ -442,7 +495,7 @@ def ces_derivatives(c1, c2, ρ): u1 = 0.5 * np.sqrt(c2 / c1) u2 = 0.5 * np.sqrt(c1 / c2) else: - common = (c1**ρ + c2**ρ)**(1 / ρ - 1) + common = 0.5 * ((c1**ρ + c2**ρ) / 2)**(1 / ρ - 1) u1 = common * c1**(ρ - 1) u2 = common * c2**(ρ - 1) return u1, u2 @@ -505,6 +558,10 @@ plt.show() 对于 $\sigma \neq 1$ 的 CES,均衡价格在 $q$ 上是严格单调的。 +当 $\sigma < 1$ 时,价格随 $q$ 下降;当 $\sigma > 1$ 时,价格随 $q$ 上升。 + +当两种商品是互补品时,关于 $\bar a$ 的好消息会降低价格:更高的 $a_s$ 会降低边际替代率 $a_s u_1 / u_2$(参见 {ref}`price_monotonicity`),因此内部人对这一单位商品 1 的估值较低。 + 因此,知道均衡映射 $p^*(\cdot)$ 的外部观察者可以唯一地反转价格以恢复 $q$,故内部信息被完全传递。 对于科布-道格拉斯($\sigma = 1$),价格在 $q$ 上是平坦的,因此信息永远不会通过市场传递。 @@ -518,7 +575,7 @@ print(f"Cobb-Douglas (rho=0): min p* = {min(p_cd):.6f}, " print(f"Analytical CD price = W1/2 = {W1/2:.6f}") ``` -每一项都恰好等于 $W_1/2 = 2.0$,从解析上证实了科布-道格拉斯均衡价格与 $q$ 以及状态值 $a_1, a_2$ 无关。 +每一项都在舍入误差范围内等于 $W_1/2 = 2.0$,这从数值上证实了科布-道格拉斯均衡价格与 $q$ 以及状态值 $a_1, a_2$ 无关。 数值图显示了单调性,下一小节将这个模式与 {prf:ref}`ime_theorem_invertibility_conditions` 的证明联系起来。 @@ -618,21 +675,27 @@ plt.show() 2. 市场开放;竞争价格 $p^t = p(\omega^t)$ 出清所有市场。 3. 消费者进行交易和消费。 -禀赋向量 $\{\tilde{\omega}^t\}$ 是**独立同分布**的,其密度为 $f(\omega^t \mid \lambda)$,其中 $\lambda = (\lambda_1, \ldots, \lambda_K)$ 是一个**结构参数向量**(维数为 $K$),它是*固定但未知的*。 +结构参数向量 $\lambda = (\lambda_1, \ldots, \lambda_K)$ 是*固定但未知的*;它取值于一个有限或可数集合 $\Lambda \subset \mathbb{R}^K$。 + +在给定 $\lambda$ 的条件下,禀赋向量 $\{\tilde{\omega}^t\}$ 是**独立同分布**的,其密度为 $f(\omega^t \mid \lambda)$。 + +$t$ 时刻的均衡价格是 $\omega^t$ 的确定性函数,因此在给定 $\lambda$ 的条件下,$\{p^t\}$ 也是独立同分布的。 -$t$ 时刻的均衡价格是 $\omega^t$ 的确定性函数,因此 $\{p^t\}$ 也是独立同分布的。 +一位不知道 $\lambda$ 并在 $\Lambda$ 上设定先验的观察者,会将价格序列视为可交换的,即独立同分布序列的一个混合,如 {doc}`exchangeable` 中所述。 -对于任何可测的价格集合 $P$,令 +设 $P_\lambda$ 表示在结构 $\lambda$ 下 $\{\omega^t, p^t\}_{t \geq 1}$ 的概率分布。 + +对于任何可测的价格集合 $B$,令 $$ -W(P) = \{\omega^t : p(\omega^t) \in P\}. +W(B) = \{\omega^t : p(\omega^t) \in B\}. $$ 那么 $$ -P_\lambda(p^t \in P) = P_\lambda(\omega^t \in W(P)) -= \int_{W(P)} f(\omega^t \mid \lambda)\, d\omega^t. +P_\lambda(p^t \in B) = P_\lambda(\omega^t \in W(B)) += \int_{W(B)} f(\omega^t \mid \lambda)\, d\omega^t. $$ 所诱导的价格密度记为 $g(p^t \mid \lambda)$。 @@ -647,11 +710,13 @@ $$ 特别地,即使有无限的价格数据,也可能无法从 $g(p \mid \lambda)$ 中恢复 $\lambda$。 -为了处理这一点,将 $\Lambda$ 划分为等价类 $\mu$,使得当对所有 $p$ 都有 $g(p \mid \lambda) = g(p \mid \lambda')$ 时,$\lambda \in \mu$ 且 $\lambda' \in \mu$。 +为了处理这一点,将 $\Lambda$ 划分为等价类 $\eta$,使得当对所有 $p$ 都有 $g(p \mid \lambda) = g(p \mid \lambda')$ 时,$\lambda \in \eta$ 且 $\lambda' \in \eta$。 + +我们用 $\eta$ 表示简约形式类,以便将 $\mu$ 保留用于静态模型中内部人的后验。 -包含真实 $\lambda$ 的等价类 $\mu$ 是与价格数据相关的**简约形式**。 +包含真实 $\lambda$ 的等价类 $\eta$ 是与价格数据相关的**简约形式**。 -知道无限价格历史的观察者学到了 $\mu$,但不一定学到 $\lambda$。 +知道无限价格历史的观察者学到了 $\eta$,但不一定学到 $\lambda$。 一旦这个区别清楚了,贝叶斯更新就可以直接写出来。 @@ -670,6 +735,8 @@ $$ 该论文诉诸于一个贝叶斯一致性结果,得出结论认为该后验集中于真实结构 $\bar \lambda$。 +这一结论需要 $h(\bar\lambda) > 0$,以及结构可由禀赋识别:即当 $\lambda \neq \lambda'$ 时 $f(\cdot \mid \lambda) \neq f(\cdot \mid \lambda')$。 + 在观察价格序列 $(p^1, \ldots, p^t)$ 之后,观察者的贝叶斯后验为 $$ @@ -681,7 +748,7 @@ $$ 价格数据无法区分同一简约形式类内的结构。 -事实上,如果 $\lambda$ 和 $\lambda'$ 属于同一类 $\mu$,那么 $g(\cdot \mid \lambda) = g(\cdot \mid \lambda')$,因此 +事实上,如果 $\lambda$ 和 $\lambda'$ 属于同一类 $\eta$,那么 $g(\cdot \mid \lambda) = g(\cdot \mid \lambda')$,因此 $$ \frac{h(\lambda \mid p^1, \ldots, p^t)} @@ -704,78 +771,102 @@ $$ ```{prf:theorem} 贝叶斯收敛 :label: ime_theorem_bayesian_convergence -设 $\bar\lambda$ 为真实结构参数,$\bar\mu$ 为包含 $\bar\lambda$ 的简约形式。 +设 $\bar\lambda$ 为真实结构参数,$\bar\eta$ 为包含 $\bar\lambda$ 的简约形式。 -假设先验对简约形式类 $\bar\mu$ 赋予正概率。 +假设先验对简约形式类 $\bar\eta$ 赋予正概率。 将简约形式类上的后验质量定义为 $$ -H_t(\mu) = \sum_{\lambda \in \mu} h(\lambda \mid p^1, \ldots, p^t). +H_t(\eta) = \sum_{\lambda \in \eta} h(\lambda \mid p^1, \ldots, p^t). $$ 由于类内所有结构都隐含相同的 $g(\cdot \mid \lambda)$,预测密度可以等价地写为 $$ g(p^{t+1} \mid p^1, \ldots, p^t) - = \sum_{\mu} g(p^{t+1} \mid \mu)\, H_t(\mu). + = \sum_{\eta} g(p^{t+1} \mid \eta)\, H_t(\eta). $$ 那么 $$ -\lim_{t \to \infty} H_t(\mu) - = \begin{cases} 1 & \text{如果 } \mu = \bar\mu, \\ 0 & \text{否则,} +\lim_{t \to \infty} H_t(\eta) + = \begin{cases} 1 & \text{如果 } \eta = \bar\eta, \\ 0 & \text{否则,} \end{cases} $$ -以概率一成立。 +以 $P_{\bar\lambda}$ 概率一成立。 因此, $$ -\lim_{t \to \infty} g(p^{t+1} \mid p^1, \ldots, p^t) = g(p \mid \bar\mu), +\lim_{t \to \infty} +\bigl\| g(\cdot \mid p^1, \ldots, p^t) - g(\cdot \mid \bar\eta) \bigr\|_{\mathrm{TV}} += 0 , $$ -它等于一位完全知情观察者的理性预期价格分布。 +其中 $g(\cdot \mid \bar\eta)$ 是一位完全知情观察者的理性预期价格分布。 ``` ```{note} -注意该定理仅要求先验对包含真实结构 $\bar\lambda$ 的简约形式类 $\bar\mu$ 赋予正概率。 +该定理仅要求先验对包含真实结构 $\bar\lambda$ 的简约形式类 $\bar\eta$ 赋予正概率。 + +这就是 {doc}`merging_of_opinions` 中的绝对连续性条件,下文将对此进行说明。 这一点由对真实结构参数 $\bar\lambda$ 本身赋予正概率所隐含,但比后者更弱。 -一个先验可以对 $\bar\lambda$ 赋予零质量,同时仍然对 $\bar\mu$ 内的其他结构赋予正质量。 +一个先验可以对 $\bar\lambda$ 赋予零质量,同时仍然对 $\bar\eta$ 内的其他结构赋予正质量。 ``` 重要的区别在于价格观察者不必学到 $\bar \lambda$ 本身。 他们只学到哪个简约形式类是正确的。 -这对于预测就足够了,因为每个 $\lambda \in \bar \mu$ 都产生相同的价格密度 $g(\cdot \mid \bar \mu)$。 +这对于预测就足够了,因为每个 $\lambda \in \bar \eta$ 都产生相同的价格密度 $g(\cdot \mid \bar \eta)$。 理性价格预期源于学到简约形式,而非识别经济的每一个结构细节。 这里"理性预期"意味着观察者对下一期价格的预测分布与真实简约形式所产生的客观价格分布相匹配。 +### 与观点融合的联系 + +{prf:ref}`ime_theorem_bayesian_convergence` 是 {doc}`merging_of_opinions` 中所研究的 {cite:t}`blackwell1962` 融合定理的一个实例。 + +设 $Q^*$ 表示在真实结构 $P_{\bar\lambda}$ 下价格序列的分布,设 $P$ 表示其在观察者主观混合分布 $\sum_{\lambda} h(\lambda) P_\lambda$ 下的分布。 + +$\bar\eta$ 中的每个结构都诱导出相同的价格分布 $Q^*$,因此对每个事件 $A$ 都有 $P(A) \geq H_0(\bar\eta)\, Q^*(A)$,其中 $H_0(\bar\eta) = \sum_{\lambda \in \bar\eta} h(\lambda)$。 + +因此 $Q^*(A) \leq P(A) / H_0(\bar\eta)$,并且只要 $H_0(\bar\eta) > 0$,就有 $Q^* \ll P$。 + +于是 {prf:ref}`blackwell_dubins` 意味着,在 $Q^*$-几乎必然的意义上,观察者对整个未来价格序列的条件分布在全变差意义下与真实分布相融合。 + +对于 $\eta \neq \bar\eta$ 的类,价格是独立同分布的,其密度 $g(\cdot \mid \eta)$ 与 $g(\cdot \mid \bar\eta)$ 不同。 + +{prf:ref}`kakutani_dichotomy` 随后使得这两个价格序列的分布互为奇异,并且似然比 $\prod_{\tau=1}^t g(p^\tau \mid \eta) / g(p^\tau \mid \bar\eta)$ 在 $Q^*$-几乎必然的意义下收敛于零。 + +在类的数目有限的情况下,这就给出了 $H_t(\bar\eta) \to 1$。 + +{ref}`km_ex5` 表明,整个未来序列的融合距离等于 $1 - H_t(\bar\eta)$,因此布莱克威尔和达宾斯的定理也在类的数目可数的情况下给出了 $H_t(\bar\eta) \to 1$。 + 现在让我们转向一个简单的模拟。 (bayesian_simulation)= ## 从价格中模拟贝叶斯学习 -我们用一个两状态例子来说明该定理。 +我们用一个两模型例子来说明该定理。 -两个可能的简约形式 $\mu_1$ 和 $\mu_2$ 分别产生价格 $p^t \sim N(\bar{p}_i, \sigma_p^2)$,其中 $i = 1, 2$。 +两个可能的简约形式 $\eta_1$ 和 $\eta_2$ 分别产生价格 $p^t \sim N(\bar{p}_i, \sigma_p^2)$,其中 $i = 1, 2$。 观察者知道这两个可能的价格分布(简约形式),但不知道哪一个支配着数据。 这是一个我们在 {doc}`likelihood_bayes` 中见过的**贝叶斯模型选择**问题。 -给定 $\mu_1$ 上的先验 $h_0$ 和观测到的价格 $p^t$,在第 $t$ 期之后 $\mu_1$ 上的后验权重为 +给定 $\eta_1$ 上的先验 $h_0$ 和观测到的价格 $p^t$,在第 $t$ 期之后 $\eta_1$ 上的后验权重为 $$ -h_t = \frac{h_{t-1}\, g(p^t \mid \mu_1)}{h_{t-1}\, g(p^t \mid \mu_1) - + (1-h_{t-1})\, g(p^t \mid \mu_2)}. +h_t = \frac{h_{t-1}\, g(p^t \mid \eta_1)}{h_{t-1}\, g(p^t \mid \eta_1) + + (1-h_{t-1})\, g(p^t \mid \eta_2)}. $$ 我们考虑一个具有两个不同均值的正态分布的数值例子 @@ -830,7 +921,7 @@ def plot_bayesian_learning(h_paths, p_bar_true, p_bar_alt, ax): - *容易的情形*:真实模型 $N(2.0,\, 0.4^2)$,备择模型 $N(1.2,\, 0.4^2)$。 - *困难的情形*:真实模型 $N(2.0,\, 0.4^2)$,备择模型 $N(1.8,\, 0.4^2)$。 -学习是容易还是困难取决于真实分布与备择假设相比"有多接近"。 +学习是容易还是困难取决于真实分布与备择假设相比"有多接近",正如 {doc}`divergence_measures`({ref}`km_ex2`)中的库尔贝克-莱布勒散度所度量的那样。 ```{code-cell} ipython3 --- @@ -866,7 +957,7 @@ plt.show() ### 价格预期 vs. 理性预期 -我们现在验证观察者的价格预期收敛到理性预期分布 $g(p \mid \bar\mu)$。 +我们现在验证观察者的价格预期收敛到理性预期分布 $g(p \mid \bar\eta)$。 我们使用上面"难以学习"例子的参数化($\bar{p}_{\text{true}} = 2.0$,$\bar{p}_{\text{alt}} = 1.8$,$\sigma_p = 0.4$),扩展到 $T = 1{,}000$ 个时期,使用单条模拟路径和先验 $h_0 = 0.5$ @@ -913,7 +1004,7 @@ for t_snap, col in zip(snapshots, palette): ) ax.plot(p_grid, re_density, "k--", lw=2, - label=r"理性预期 $g(p \mid \bar{\mu})$") + label=r"理性预期 $g(p \mid \bar{\eta})$") ax.set_xlabel("价格 $p$", fontsize=12) ax.set_ylabel("密度", fontsize=12) ax.legend(fontsize=9) @@ -923,6 +1014,10 @@ plt.show() 预测密度序列(蓝色的深浅)随着经验的累积收敛到理性预期密度(黑色虚线)。 +收敛未必是单调的。 + +在这条路径上,$h_{25} = 0.183$,低于先验 $h_0 = 0.5$,随后 $h_t$ 才朝着一上升,这是因为对数后验比服从一个随机游走,其正向漂移只有在长样本中才会占主导。 + 这说明了 {prf:ref}`ime_theorem_bayesian_convergence`。 我们现在可以通过考察一个学到了简约形式但没有学到底层结构的例子来使这一点更加尖锐。 @@ -932,7 +1027,7 @@ plt.show() 这个收敛结果特别引人注目,因为即使底层**结构** $\lambda$ *无法*由价格*识别*,观察者也会收敛到*理性预期*。 -为了说明这一点,考虑一个有*三个*可能结构 $\lambda^{(1)}, \lambda^{(2)}, \lambda^{(3)}$ 但只有*两个*简约形式 $\mu_1 = \{\lambda^{(1)}, \lambda^{(2)}\}$ 和 $\mu_2 = \{\lambda^{(3)}\}$ 的情形(因为 $\lambda^{(1)}$ 和 $\lambda^{(2)}$ 产生相同的价格分布)。 +为了说明这一点,考虑一个有*三个*可能结构 $\lambda^{(1)}, \lambda^{(2)}, \lambda^{(3)}$ 但只有*两个*简约形式 $\eta_1 = \{\lambda^{(1)}, \lambda^{(2)}\}$ 和 $\eta_2 = \{\lambda^{(3)}\}$ 的情形(因为 $\lambda^{(1)}$ 和 $\lambda^{(2)}$ 产生相同的价格分布)。 我们继续使用难以学习的参数化,因此三个结构的价格均值为 $\bar{p}_1 = \bar{p}_2 = 2.0$ 和 $\bar{p}_3 = 1.8$,共同标准差 $\sigma_p = 0.4$,均匀先验 $h_0 = (1/3, 1/3, 1/3)$,以及 $30$ 条路径上的 $T = 400$ 个时期。 @@ -999,8 +1094,42 @@ plt.show() 观察者以概率一正确地排除了 $\lambda^{(3)}$(错误的简约形式),但无法区分 $\lambda^{(1)}$ 和 $\lambda^{(2)}$,因为它们产生相同的价格分布。 -尽管如此,观察者的**价格预期**收敛到理性预期,因为两个结构都隐含相同的简约形式 $\bar\mu$。 +尽管如此,观察者的**价格预期**收敛到理性预期,因为两个结构都隐含相同的简约形式 $\bar\eta$。 +下图绘制了真实类别上的后验质量 $H_t(\bar\eta) = h_t(\lambda^{(1)}) + h_t(\lambda^{(2)})$,以及该质量中分配给 $\lambda^{(1)}$ 的份额。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: 真实简约形式类别上的后验质量 + name: fig-nonidentification-class +--- +H_true = h_paths_3[:, :, 0] + h_paths_3[:, :, 1] +share_1 = h_paths_3[:, :, 0] / H_true + +fig, axes = plt.subplots(1, 2, figsize=(11, 4)) +for path_H, path_s in zip(H_true, share_1): + axes[0].plot(t_grid, path_H, alpha=0.25, lw=0.8, color="steelblue") + axes[1].plot(t_grid, path_s, alpha=0.25, lw=0.8, color="steelblue") +axes[0].plot(t_grid, np.median(H_true, axis=0), color="navy", lw=2, + label="中位数") +axes[0].set_ylabel(r"$H_t(\bar\eta)$", fontsize=11) +axes[1].set_ylabel(r"$h_t(\lambda^{(1)}) / H_t(\bar\eta)$", fontsize=11) +axes[1].set_ylim(0, 1) +for ax in axes: + ax.set_xlabel("时期 $t$", fontsize=11) +axes[0].legend(fontsize=9) +plt.tight_layout() +plt.show() + +print(f"max over paths of 1 - H_T: {(1 - H_true[:, -1]).max():.1e}") +print(f"max deviation of share from 1/2: {np.abs(share_1 - 0.5).max():.1e}") +``` + +$H_t(\bar\eta)$ 在每条路径上都收敛到 1。 + +份额 $h_t(\lambda^{(1)}) / H_t(\bar\eta)$ 在每个 $t$ 都保持在其先验值 $1/2$,因为 $\lambda^{(1)}$ 和 $\lambda^{(2)}$ 对每一个价格赋予相同的似然。 ## 练习 @@ -1052,7 +1181,7 @@ q\,(a_1 - p)\,\gamma\, e^{-\gamma W_1} = (1-q)\,(p - a_2)\,\gamma\, e^{-\gamma W_2}, $$ -或等价地(除以 $\gamma$ 并重新排列) +或等价地,在两边同除以 $\gamma e^{-\gamma w}$ 之后, $$ q\,(a_1 - p)\, e^{-\gamma(a_1-p) x_1} @@ -1067,8 +1196,6 @@ F(p;\,q,\gamma) \equiv $$ ```{code-cell} ipython3 -from scipy.optimize import brentq - def F_cara(p, q, a1, a2, γ, x1=1.0): """CARA 均衡条件的残差。""" return (q * (a1 - p) * np.exp(-γ * (a1 - p) * x1) @@ -1097,7 +1224,7 @@ plt.show() 对于每个 $\gamma > 0$,价格在 $q$ 上都是严格递增的。 -对于闭式解,从 $x_1 = 1$ 处的 FOC 出发,两边除以 $(a_1 - p)(p - a_2)$,并合并指数项: +对于闭式解,从 $x_1 = 1$ 处的 FOC 出发,两边除以 $(1 - q)(p - a_2)e^{-\gamma(a_1 - p)}$,并合并指数项: $$ \frac{q\,(a_1 - p)}{(1-q)\,(p - a_2)} = e^{\gamma(a_1 - a_2)}. @@ -1118,6 +1245,31 @@ $$ 由于 $R(q,\gamma)$ 在 $q$ 上严格递增,且 $dp^*/dR = (a_1 - a_2)/(1 + R)^2 > 0$,因此均衡价格 $p^*(q)$ 在 $q$ 上严格递增。 +这个闭式解是一个指数倾斜的期望。 + +当 $x_1 = 1$ 时,我们有 $e^{-\gamma W_s} = e^{-\gamma(w - p)} e^{-\gamma a_s}$,因此一阶条件对于后验 $\mu = (\mu_1, \ldots, \mu_S)$ 为 $\sum_s \mu_s (a_s - p) e^{-\gamma a_s} = 0$,且 + +$$ +p^* = \frac{\sum_s \mu_s\, a_s\, e^{-\gamma a_s}}{\sum_s \mu_s\, e^{-\gamma a_s}} . +$$ + +该价格是 $\bar a$ 在概率 $\tilde\mu_s \propto \mu_s e^{-\gamma a_s}$ 下的期望值,这些概率将知情者的后验向低收益状态倾斜。 + +当 $\mu = (q, 1 - q)$ 时,分子和分母同除以 $(1 - q) e^{-\gamma a_2}$,便得到上面 $p^*(q)$ 的公式。 + +```{code-cell} ipython3 +def p_tilted(μ, a, γ): + """作为指数倾斜期望的均衡价格。""" + weights = np.asarray(μ) * np.exp(-γ * np.asarray(a)) + return weights @ np.asarray(a) / weights.sum() + + +gap = max(abs(brentq(F_cara, a2, a1, args=(q, a1, a2, γ)) + - p_tilted([q, 1 - q], [a1, a2], γ)) + for γ in γ_values for q in q_grid) +print(f"largest gap between root-finding and closed form: {gap:.1e}") +``` + 这个练习使用了 {cite:t}`kihlstrom_mirman1975` 所强调的股票市场解释。 投资组合财富为 $W = x_2 + \bar{a}\, x_1$,因此 $a x_1$ 和 $x_2$ 在每个状态中是完全替代品。 @@ -1132,72 +1284,145 @@ $$ ```{exercise} :label: km_ex2 -在贝叶斯学习模拟中,收敛到理性预期的速度由两个简约形式之间的 **Kullback-Leibler 散度**决定。 +在贝叶斯学习模拟中,收敛到理性预期的速度由两个简约形式之间的 **Kullback-Leibler 散度**({doc}`divergence_measures`)决定。 -对于两个均值为 $\bar{p}_1$ 和 $\bar{p}_2$ 且共同方差为 $\sigma_p^2$ 的正态分布,从 $g(\cdot \mid \mu_1)$ 到 $g(\cdot \mid \mu_2)$ 的 KL 散度 $D_{KL}(\mu_1 \| \mu_2)$ 为 +对于两个均值为 $\bar{p}_1$ 和 $\bar{p}_2$ 且共同方差为 $\sigma_p^2$ 的正态分布,从 $g(\cdot \mid \eta_1)$ 到 $g(\cdot \mid \eta_2)$ 的 KL 散度 $D_{KL}(\eta_1 \| \eta_2)$ 为 $$ -D_{KL}(\mu_1 \| \mu_2) = \frac{(\bar{p}_1 - \bar{p}_2)^2}{2\sigma_p^2}, +D_{KL}(\eta_1 \| \eta_2) = \frac{(\bar{p}_1 - \bar{p}_2)^2}{2\sigma_p^2}, $$ 在方差相等的情况下,它关于两个均值是对称的。 -1. 对于"容易的"情形($\bar{p}_1 = 2.0$,$\bar{p}_2 = 1.2$)和"困难的"情形($\bar{p}_1 = 2.0$,$\bar{p}_2 = 1.8$),计算 $\sigma_p = 0.4$ 时的 $D_{KL}$。 +设 $\eta_1$(其中 $\bar p_1 = 2.0$)为真实简约形式,并设 $\sigma_p = 0.4$,$h_0 = 1/2$。 + +1. 计算"容易的"情形($\bar{p}_2 = 1.2$)、"困难的"情形($\bar{p}_2 = 1.8$)、中间情形 $\bar{p}_2 \in \{1.4, 1.6\}$ 以及更困难的情形 $\bar{p}_2 = 1.9$ 的 $D_{KL}$。 + +1. 对每种情形模拟 $1{,}000$ 条路径,并计算 $h_t \geq 0.99$ 的第一个时期 $T_{0.99}$。 -1. 用 $n=100$ 条路径重新运行本讲中两种情形的模拟。对每条路径计算 $h_t \geq 0.99$ 的第一个时期 $T_{0.99}$。绘制两种情形下 $T_{0.99}$ 的直方图。 + 绘制容易情形和困难情形下 $T_{0.99}$ 的直方图。 -1. 中位数 $T_{0.99}$ 如何随 $D_{KL}$ 缩放?数值验证对于某个常数 $C$,大致有 $T_{0.99} \approx C / D_{KL}$。 +1. 证明在真实模型下,对数后验几率 $\ell_t = \log[h_t / (1 - h_t)]$ 遵循一个漂移为 $D_{KL}$、每期方差为 $2 D_{KL}$ 的随机游走。 + + 运用瓦尔德恒等式论证 + + $$ + \mathbb{E}[T_{0.99}] \approx + \frac{\log\bigl[(0.99/0.01) \big/ \bigl(h_0/(1 - h_0)\bigr)\bigr]}{D_{KL}} + $$ + + 当 $D_{KL}$ 较小时成立,因此 $T_{0.99} \approx C / D_{KL}$,其中对于 $h_0 = 1/2$ 有 $C \approx \log 99 \approx 4.6$。 + +1. 以对数-对数刻度绘制 $T_{0.99}$ 的均值和中位数相对于 $D_{KL}$ 的图,并画出直线 $\log 99 / D_{KL}$,解释其中的偏差。 ``` ```{solution-start} km_ex2 :class: dropdown ``` -这是一个解法: +这是一个解法。 -```{code-cell} ipython3 -σ_p = 0.4 +记 $\Delta = \bar p_1 - \bar p_2$。 -def kl_normal(p1, p2, σ): - """返回 N(p1, σ^2) 和 N(p2, σ^2) 的 KL 散度。""" - return (p1 - p2)**2 / (2 * σ**2) +单个价格的对数似然比为 -cases = [("Easy", 2.0, 1.2), ("Hard", 2.0, 1.8)] -for name, p1, p2 in cases: - kl = kl_normal(p1, p2, σ_p) - print(f"{name} case: D_KL = {kl:.4f}") +$$ +\xi = \log \frac{g(p \mid \eta_1)}{g(p \mid \eta_2)} += \frac{\Delta\,(2p - \bar p_1 - \bar p_2)}{2\sigma_p^2} . +$$ -n_paths = 100 +在真实模型下 $p = \bar p_1 + \sigma_p \varepsilon$,其中 $\varepsilon \sim N(0, 1)$,因此 +$\xi = \Delta^2/(2\sigma_p^2) + (\Delta/\sigma_p)\varepsilon$,其均值为 +$D_{KL}$,方差为 $\Delta^2/\sigma_p^2 = 2 D_{KL}$。 -fig, axes = plt.subplots(1, 2, figsize=(11, 4)) -for ax, (name, p1, p2) in zip(axes, cases): - kl = kl_normal(p1, p2, σ_p) - paths = simulate_bayesian_learning(p1, p2, σ_p, T=2000, - h0=0.5, n_paths=n_paths, seed=42) - # 后验 >= 0.99 的第一个时期 - T99 = [] - for path in paths: - idx = np.where(path >= 0.99)[0] - T99.append(idx[0] if len(idx) > 0 else 2001) - - median_T = np.median(T99) - ax.hist(T99, bins=20, color="steelblue", edgecolor="white", alpha=0.8) - ax.axvline(median_T, color="crimson", lw=2, - label=fr"中位数 $T_{{0.99}} = {median_T:.0f}$") - ax.set_title( - f"{name}: $D_{{KL}} = {kl:.4f}$, " - fr"$\widehat C = T_{{0.99}} D_{{KL}} \approx {median_T * kl:.1f}$", - fontsize=11 - ) +贝叶斯法则每期为 $\ell_t$ 添加一个这样的增量,因此 $\ell_t$ 是一个漂移为 $D_{KL}$、每期方差为 $2 D_{KL}$ 的随机游走。 + +$T_{0.99}$ 是 $\ell_t$ 首次达到 $b = \log 99$ 的时刻。 + +瓦尔德恒等式给出 $\mathbb{E}[\ell_{T}] = \ell_0 + D_{KL}\, \mathbb{E}[T]$,因此 + +$$ +\mathbb{E}[T_{0.99}]\, D_{KL} = b - \ell_0 + \mathbb{E}[\ell_T - b] . +$$ + +最后一项是越过边界的超调量。 + +它的量级是单步标准差 $\sqrt{2 D_{KL}}$,因此当 $D_{KL} \to 0$ 时,相对于 $b - \ell_0$ 它会消失。 + +```{code-cell} ipython3 +def log_odds_paths(p_true, p_alt, σ, h0, n_paths, T, seed=42): + """真实模型上对数后验几率的路径,t = 1, ..., T。""" + rng = np.random.default_rng(seed) + p = rng.normal(p_true, σ, size=(n_paths, T)) + ξ = norm.logpdf(p, p_true, σ) - norm.logpdf(p, p_alt, σ) + return np.log(h0 / (1 - h0)) + np.cumsum(ξ, axis=1) + + +def first_passage(ell, b): + """ell_t >= b 的第一个时期,以及此时 ell_t 的值。""" + hit = ell >= b + assert hit.any(axis=1).all() # 每条路径都在 T 内越过边界 + T_hit = hit.argmax(axis=1) + return T_hit + 1, ell[np.arange(len(ell)), T_hit] + + +σ_p, h0, b = 0.4, 0.5, np.log(0.99 / 0.01) +p_alts = [1.2, 1.4, 1.6, 1.8, 1.9] +results = {} + +print(f"{'p_alt':>6}{'D_KL':>8}{'mean T':>9}{'median T':>10}" + f"{'mean T*D':>10}{'log 99 + overshoot':>20}{'median T*D':>12}" + f"{'sqrt(2D)':>10}") +for p_alt in p_alts: + D = (2.0 - p_alt)**2 / (2 * σ_p**2) + ell = log_odds_paths(2.0, p_alt, σ_p, h0, n_paths=1_000, T=3_000) + T99, ell_T = first_passage(ell, b) + results[p_alt] = (D, T99) + print(f"{p_alt:6.1f}{D:8.4f}{T99.mean():9.2f}{np.median(T99):10.1f}" + f"{T99.mean() * D:10.3f}{b + (ell_T - b).mean():20.3f}" + f"{np.median(T99) * D:12.3f}{np.sqrt(2 * D):10.3f}") + +# 布朗运动极限:T 是逆高斯分布,均值 b/D,形状参数 b^2/(2D) +from scipy.stats import invgauss +print(f"\nlog 99 = {b:.3f}; median/mean in the Brownian limit = " + f"{(b / 2) * invgauss(mu=2 / b).median():.3f}") +``` + +```{code-cell} ipython3 +fig, axes = plt.subplots(1, 3, figsize=(14, 4)) +for ax, (name, p_alt) in zip(axes[:2], [("Easy", 1.2), ("Hard", 1.8)]): + D, T99 = results[p_alt] + ax.hist(T99, bins=30, color="steelblue", edgecolor="white", alpha=0.8) + ax.axvline(np.median(T99), color="crimson", lw=2, + label=fr"中位数 $T_{{0.99}} = {np.median(T99):.0f}$") + ax.set_title(f"{name}: $D_{{KL}} = {D:.4f}$", fontsize=11) ax.set_xlabel(r"$T_{0.99}$", fontsize=12) ax.set_ylabel("计数", fontsize=11) ax.legend(fontsize=10) +D_vals = np.array([results[p][0] for p in p_alts]) +axes[2].loglog(D_vals, [results[p][1].mean() for p in p_alts], "o-", + label=r"均值 $T_{0.99}$") +axes[2].loglog(D_vals, [np.median(results[p][1]) for p in p_alts], "s-", + label=r"中位数 $T_{0.99}$") +axes[2].loglog(D_vals, b / D_vals, "k--", label=r"$\log 99 / D_{KL}$") +axes[2].set_xlabel(r"$D_{KL}$", fontsize=12) +axes[2].legend(fontsize=10) plt.tight_layout() plt.show() ``` -中位数 $T_{0.99}$ 大致按 $C/D_{KL}$ 缩放,证实了当两个简约形式更容易区分时(大的 $D_{KL}$)学习更快。 +$T_{0.99}$ 的均值和中位数都大致按 $1/D_{KL}$ 的比例下降,因此当两个简约形式更容易区分时学习更快。 + +乘积 $\mathbb{E}[T_{0.99}] D_{KL}$ 随着 $D_{KL}$ 的缩小趋向于 $\log 99 = 4.6$。 + +根据瓦尔德恒等式,该差距等于期望超调量,而"mean T*D"和"log 99 + overshoot"两列在抽样误差范围内一致。 + +在容易的情形下,单个价格会使 $\ell_t$ 移动约两个单位,因此边界会被大幅超调,$\mathbb{E}[T_{0.99}] D_{KL}$ 会显著超过 $\log 99$。 + +中位数低于均值,因为首达时间是右偏的。 + +在 $D_{KL}$ 较小的极限情形下,$\ell_t$ 的表现类似带漂移的布朗运动,$T_{0.99}$ 服从逆高斯分布,均值为 $\log 99 / D_{KL}$,形状参数为 $(\log 99)^2 / (2 D_{KL})$,其中位数为 $0.825 \log 99 / D_{KL}$。 ```{solution-end} ``` @@ -1205,7 +1430,7 @@ plt.show() ```{exercise} :label: km_ex3 -{prf:ref}`ime_theorem_bayesian_convergence` 要求先验对真实简约形式类 $\bar\mu$ 赋予正概率,等价地对某个产生真实价格分布 $g(\cdot \mid \bar\mu)$ 的结构赋予正概率。 +{prf:ref}`ime_theorem_bayesian_convergence` 要求先验对真实简约形式类 $\bar\eta$ 赋予正概率,等价地对某个产生真实价格分布 $g(\cdot \mid \bar\eta)$ 的结构赋予正概率。 在这个练习中,真实简约形式本身被排除在先验支持之外,因此我们研究当先验中没有模型产生真实价格分布时会发生什么。 @@ -1325,13 +1550,269 @@ $$ 后验几率是累积的{doc}`似然比 `。 -如果我们比较两个错误的高斯模型 $f$ 和 $g$,那么在真实分布 $h$ 下,平均对数似然比满足 +记 $g_\star$ 为真实价格密度 $N(2.0, 0.4^2)$,记 $g_1$ 和 $g_2$ 为错误模型 $N(1.5, 0.4^2)$ 和 $N(2.3, 0.4^2)$,记 $h_t^{(1)}, h_t^{(2)}$ 为它们的后验权重。 + +$g_2$ 相对于 $g_1$ 的对数后验几率为 + +$$ +\log \frac{h_t^{(2)}}{h_t^{(1)}} += \log \frac{h_0^{(2)}}{h_0^{(1)}} ++ \sum_{\tau=1}^{t} \log \frac{g_2(p^\tau)}{g_1(p^\tau)} . +$$ + +在 $g_\star$ 下,求和中的每一项均值为 +$D_{KL}(g_\star \| g_1) - D_{KL}(g_\star \| g_2) = 0.78125 - 0.28125 = 0.5 > 0$, +这由 {doc}`likelihood_ratio_process` 中 {ref}`KL_link` 的公式给出。 + +因此几率朝 $g_2$ 漂移,即在 Kullback-Leibler 散度意义上更接近 $g_\star$ 的模型,且 $h_t^{(2)} \to 1$。 + +预测密度收敛到 $g_2$ 而不是 $g_\star$:价格预期趋于稳定,但并非理性预期。 + +先验对真实简约形式没有分配任何概率质量,因此 {prf:ref}`ime_theorem_bayesian_convergence` 背后的绝对连续性条件不成立。 + +{doc}`mix_model` 研究了同样的机制,但针对的是真实分布为位于代理人模型集合之外的混合分布的情形。 + +```{solution-end} +``` + +```{exercise} +:label: km_ex4 + +{prf:ref}`ime_theorem_invertibility_conditions` 涵盖了两个状态的情形。 + +本练习展示当状态数为三时会有何变化。 + +使用本讲中 $\sigma = 2$($\rho = 0.5$)、$W_1 = 4$ 的 CES 经济,以及三个状态 $(a_1, a_2, a_3) = (2, 1, 0.5)$。 + +1. 证明在固定价格 $p$ 下,一阶条件在后验 $\mu$ 上是线性的,因此支持价格 $p$ 的后验集合是一条直线与单纯形的交集。 + +1. 编写一个函数,用于计算任意后验 $\mu$ 对应的均衡价格,找出两个支持同一价格的不同后验,并对结果进行数值验证。 + +1. 在单纯形上绘制 $p(\mu)$ 的水平集。 + +1. 解释为什么尽管如此,$p(\cdot)$ 在由具有有限多个取值的信号所生成的后验有限集合 $M$ 上仍可以是一一对应的,以及为什么这不与两状态定理矛盾。 + + 用随机抽取的信号似然度来验证这一主张。 +``` + +```{solution-start} km_ex4 +:class: dropdown +``` + +这是一个解法。 + +在固定价格下,组合 $x(p) = (1, W_1 - p)$ 是固定的,一阶条件为 + +$$ +\sum_{s=1}^{3} \mu_s\, c_s(p) = 0, +\qquad +c_s(p) = a_s u_1(a_s, W_1 - p) - p\, u_2(a_s, W_1 - p) . +$$ + +数值 $c_s(p)$ 不依赖于 $\mu$。 + +连同 $\sum_s \mu_s = 1$,这是关于三个未知数的两个线性方程。 + +它们的解构成一条直线,该直线与单纯形相交于一段都支持价格 $p$ 的后验线段。 + +在两个状态的情形下,单纯形本身就是一条线段,单一方程 +$q\, c_1(p) + (1 - q)\, c_2(p) = 0$ 最多只有一个解,除非 $c_1(p) = c_2(p) = 0$, +而 $\alpha_1 \beta_2 - \alpha_2 \beta_1$ 的恒定符号排除了这种可能性。 + +```{code-cell} ipython3 +def eq_price_S(μ, a, W1, ρ): + """代理人 1 持有状态 a 上的后验 μ 时的均衡价格。""" + μ, a = np.asarray(μ, dtype=float), np.asarray(a, dtype=float) + + def residual(p): + u1, u2 = ces_derivatives(a, W1 - p, ρ) + return μ @ (a * u1 - p * u2) + + return brentq(residual, 1e-6, W1 - 1e-6, xtol=1e-12) + + +a3, W1_3, ρ_3 = np.array([2.0, 1.0, 0.5]), 4.0, 0.5 +μ_star = np.array([0.5, 0.2, 0.3]) +p_star = eq_price_S(μ_star, a3, W1_3, ρ_3) + +u1, u2 = ces_derivatives(a3, W1_3 - p_star, ρ_3) +c = a3 * u1 - p_star * u2 +v = np.cross(c, np.ones(3)) # v @ c = 0 且 v.sum() = 0 + +# t 的范围,使得 μ_star + t v 在单纯形内 +t_lo = max(-μ_star[i] / v[i] for i in range(3) if v[i] > 0) +t_hi = min(-μ_star[i] / v[i] for i in range(3) if v[i] < 0) + +print(f"p(μ_star) = {p_star:.10f}\n") +for t in [0.8 * t_lo, 0.4 * t_lo, 0.0, 0.4 * t_hi, 0.8 * t_hi]: + μ_t = μ_star + t * v + print(f"μ = {np.round(μ_t, 4)} p(μ) = {eq_price_S(μ_t, a3, W1_3, ρ_3):.10f}") +``` + +五个不同的后验在十位小数精度下支持同一价格。 + +```{code-cell} ipython3 +n = 81 +grid = np.linspace(0, 1, n) +P = np.full((n, n), np.nan) +for i, m1 in enumerate(grid): + for j, m3 in enumerate(grid): + if m1 + m3 <= 1: + P[j, i] = eq_price_S([m1, 1 - m1 - m3, m3], a3, W1_3, ρ_3) + +fig, ax = plt.subplots(figsize=(6, 5)) +cs = ax.contour(grid, grid, P, levels=15, cmap="viridis") +ax.clabel(cs, fontsize=8, fmt="%.2f") +ends = np.array([μ_star + t * v for t in [t_lo, t_hi]]) +ax.plot(ends[:, 0], ends[:, 2], "r--", lw=2, label=fr"$p(\mu) = {p_star:.3f}$") +ax.plot(μ_star[0], μ_star[2], "ro") +ax.plot([0, 1, 0, 0], [0, 0, 1, 0], color="black", lw=1) +ax.set_xlabel(r"$\mu_1$", fontsize=12) +ax.set_ylabel(r"$\mu_3$", fontsize=12) +ax.legend(fontsize=10) +plt.tight_layout() +plt.show() +``` + +$p(\mu)$ 的水平集是穿过单纯形的直线,因此 $p(\cdot)$ 在整个单纯形上不是一一对应的。 + +{prf:ref}`ime_theorem_price_revelation` 要求的条件较弱:$p(\cdot)$ 只需在信号能够生成的后验有限集合 $M$ 上是一一对应的。 + +$M$ 中的两个后验仅当其中一个落在穿过另一个的水平线上时才会共享同一价格。 + +这种巧合对信号似然度施加了一个方程约束,而似然度的微小扰动会破坏它。 + +```{code-cell} ipython3 +rng = np.random.default_rng(1) +μ0 = np.ones(3) / 3 +gaps = [] +for _ in range(500): + φ = rng.dirichlet(np.ones(4), size=3) # P(signal | state),4 个信号 + joint = μ0[:, None] * φ + posteriors = (joint / joint.sum(axis=0)).T # 每个信号对应一个后验 + prices = np.sort([eq_price_S(m, a3, W1_3, ρ_3) for m in posteriors]) + gaps.append(np.diff(prices).min()) + +print(f"smallest price gap within a draw, over 500 draws: {min(gaps):.2e}") +``` + +在每次抽取中,四个后验支持四个不同的价格,因此价格对信号而言是充分的。 + +当信号取值为有限个时,尽管在单纯形上可逆性不成立,但在 $M$ 上一般情形下可逆性是成立的。 + +```{solution-end} +``` + +```{exercise} +:label: km_ex5 + +本练习衡量双模型示例中观点的融合。 + +考虑困难的情形:真实简约形式 $\bar\eta = \eta_1$ 有 $\bar p_1 = 2.0$,替代模型 +$\eta_2$ 有 $\bar p_2 = 1.8$,$\sigma_p = 0.4$,$h_0 = 1/2$。 + +记 $H_t = H_t(\bar\eta)$。 + +1. 证明 + $\| g(\cdot \mid p^1, \ldots, p^t) - g(\cdot \mid \bar\eta) \|_{\mathrm{TV}} + = (1 - H_t)\, \| g(\cdot \mid \eta_2) - g(\cdot \mid \bar\eta) \|_{\mathrm{TV}}$, + 并对具有共同方差的两个正态密度求出最后一个因子的值。 + +1. 证明对于未来 $k$ 个价格的联合分布,该距离为 + $(1 - H_t)\bigl[2\Phi\bigl(\sqrt{k}\, |\bar p_1 - \bar p_2| / (2\sigma_p)\bigr) + - 1\bigr]$,其中 $\Phi$ 是标准正态分布函数。 + + 得出结论:观察者与真实的整个未来价格序列条件分布之间的距离 $d_t$ 为 + $1 - H_t$。 + +1. 沿 40 条长度为 300 的模拟路径计算并绘制这两种距离。 + +1. 将结果与 {doc}`merging_of_opinions` 中的 {prf:ref}`blackwell_dubins` 和 + {prf:ref}`kakutani_dichotomy` 相联系。 +``` + +```{solution-start} km_ex5 +:class: dropdown +``` + +这是一个解法。 + +预测密度为 $H_t\, g(\cdot \mid \bar\eta) + (1 - H_t)\, g(\cdot \mid \eta_2)$,因此 $$ -\frac{1}{t} E_h[\log L_t] = K(h,g) - K(h,f). +g(\cdot \mid p^1, \ldots, p^t) - g(\cdot \mid \bar\eta) += (1 - H_t) \bigl[ g(\cdot \mid \eta_2) - g(\cdot \mid \bar\eta) \bigr], $$ -因此,如果 $f$ 在 KL 意义上比 $g$ 更接近 $h$,那么 $\log L_t$ 有正的漂移,后验几率会倾向于 $f$。 +全变差距离按 $1 - H_t$ 的比例缩放。 + +两个具有共同方差的正态密度在其均值的中点处相交,因此 + +$$ +\| N(\bar p_1, \sigma_p^2) - N(\bar p_2, \sigma_p^2) \|_{\mathrm{TV}} += 2\Phi\Bigl(\frac{|\bar p_1 - \bar p_2|}{2\sigma_p}\Bigr) - 1 . +$$ + +在给定简约形式的条件下,未来 $k$ 个价格是独立同分布的,因此同样的论证也适用于它们的联合密度。 + +它们的和是均值的充分统计量,因此两个 $k$ 重乘积之间的距离等于 +$N(k \bar p_1, k\sigma_p^2)$ 和 $N(k \bar p_2, k\sigma_p^2)$ 之间的距离,即 +$2\Phi(\sqrt{k}\, |\bar p_1 - \bar p_2| / (2\sigma_p)) - 1$。 + +当 $k \to \infty$ 时,该距离趋于一。 + +正如 {prf:ref}`kakutani_dichotomy` 所断言的那样,两个独立同分布的价格律是互斥奇异的,因此 $d_t = 1 - H_t$。 + +```{code-cell} ipython3 +from scipy.special import expit + +Δ = 2.0 - 1.8 +tv_one = 2 * norm.cdf(Δ / (2 * σ_p)) - 1 +print(f"one-period distance between the two models: {tv_one:.4f}") +for k in [1, 10, 100, 1_000]: + print(f" k = {k:5d}: 2Φ(√k Δ / 2σ) - 1 = " + f"{2 * norm.cdf(np.sqrt(k) * Δ / (2 * σ_p)) - 1:.4f}") + +ell = log_odds_paths(2.0, 1.8, σ_p, h0=0.5, n_paths=40, T=300) +one_minus_H = expit(-ell) # 1 - H_t,以数值稳定方式计算 +t_vals = np.arange(1, 301) + +fig, ax = plt.subplots(figsize=(8, 4.5)) +for path in one_minus_H: + ax.semilogy(t_vals, path, color="steelblue", alpha=0.2, lw=0.8) +ax.semilogy(t_vals, np.median(one_minus_H, axis=0), color="navy", lw=2, + label=r"中位数 $d_t = 1 - H_t$(整个未来)") +ax.semilogy(t_vals, tv_one * np.median(one_minus_H, axis=0), color="crimson", + lw=2, label="单期距离的中位数") +D_hard = Δ**2 / (2 * σ_p**2) +ax.semilogy(t_vals, np.exp(-D_hard * t_vals), "k--", lw=1.5, + label=r"$e^{-D_{KL} t}$") +ax.set_xlabel("时期 $t$", fontsize=12) +ax.set_ylabel("全变差距离", fontsize=12) +ax.legend(fontsize=10) +plt.tight_layout() +plt.show() +``` + +观察者对价格序列的主观分布为 +$P = h_0 Q^* + (1 - h_0) Q_2$,其中 $Q^*$ 和 $Q_2$ 分别使价格独立同分布,密度为 +$g(\cdot \mid \bar\eta)$ 和 $g(\cdot \mid \eta_2)$。 + +由于 $h_0 > 0$,有 $Q^* \ll P$,且 {prf:ref}`blackwell_dubins` 断言在 $Q^*$ 下 +$d_t \to 0$ 几乎必然成立。 + +由于 $Q^*$ 和 $Q_2$ 是互斥奇异的,因此 $d_t = 1 - H_t$,所以关于整个未来的观点融合与 +$H_t \to 1$ 是同一事件。 + +对于可数多个类,论证是相同的。 + +每个类 $\eta \neq \bar\eta$ 都对 $Q^*$ 概率为一的某个事件赋予零概率,而这可数多个事件的交集的 +$Q^*$ 概率仍为一,因此再次有 $d_t = 1 - H_t(\bar\eta)$。 + +单期距离比 $d_t$ 小 $0.197$ 倍,因为单个价格对 $N(2.0, 0.4^2)$ 和 +$N(1.8, 0.4^2)$ 的区分能力较差。 + +两种距离都以每期 $D_{KL} = 0.125$ 的指数速率下降,这正是对数后验几率的漂移率。 ```{solution-end} -``` \ No newline at end of file +``` diff --git a/lectures/likelihood_bayes.md b/lectures/likelihood_bayes.md index cd6b5f12..a95e037c 100644 --- a/lectures/likelihood_bayes.md +++ b/lectures/likelihood_bayes.md @@ -17,13 +17,13 @@ translation: Likelihood ratio processes and Bayes’ law: 似然比过程和贝叶斯定律 Likelihood ratio processes and Bayes’ law::A recursive formula: 递归公式 Another timing protocol: 另一种时序协议 - Another timing protocol::Behavior of $\pi_t$ under wrong model: 在错误模型下 $\pi_t$ 的行为 Behavior of posterior probability $\{\pi_t\}$ under subjective probability distribution: 后验概率 $\{\pi_t\}$ 在主观概率分布下的行为 Behavior of posterior probability $\{\pi_t\}$ under subjective probability distribution::Mechanical details again: 再谈机械细节 Behavior of posterior probability $\{\pi_t\}$ under subjective probability distribution::Some simulations: 一些模拟 Initial prior is verified by paths drawn from subjective conditional densities: 通过从主观条件密度中抽取的路径验证初始先验 Drilling down a little bit: 深入分析 Related lectures: 相关讲座 + Exercises: 练习 --- (likelihood_bayes)= @@ -71,6 +71,8 @@ from numba import vectorize, jit from math import gamma import pandas as pd from scipy.integrate import quad +from scipy.special import expit, logit +from scipy.stats import ks_2samp import seaborn as sns @@ -97,7 +99,11 @@ rng = np.random.default_rng(142857) 为此,我们使用观测数据。 -我们观察到一个序列 $\{w_t\}_{t=1}^T$,它包含 $T$ 个从 $f$ 或 $g$ 中独立同分布抽取的样本。 +我们观察到一个序列 $w_0, w_1, \ldots$,它是从 $f$ 或 $g$ 中独立同分布抽取的样本。 + +我们将第一次抽样的时间记为 $t = 0$,将先验的时间记为 $t = -1$,这与 {doc}`exchangeable` 中一致。 + +{doc}`likelihood_ratio_process` 将第一次抽样的时间记为 $t = 1$。 我们想要利用这些观测来推断自然界选择了 $f$ 还是 $g$。 @@ -106,7 +112,7 @@ rng = np.random.default_rng(142857) 首先,我们定义似然比过程的关键组成部分,即时间 $t$ 的似然比,它是一个随机变量: $$ -\ell (w_t)=\frac{f\left(w_t\right)}{g\left(w_t\right)},\quad t\geq1. +\ell (w_t)=\frac{f\left(w_t\right)}{g\left(w_t\right)},\quad t\geq0. $$ 我们假设 $f$ 和 $g$ 在随机变量 $W$ 可能实现值的相同区间上都赋予正概率。 @@ -115,13 +121,13 @@ $$ 序列的**似然比过程** -$\left\{ w_{t}\right\} _{t=1}^{\infty}$ 定义如下: +$\left\{ w_{t}\right\} _{t=0}^{\infty}$ 定义如下: $$ -L\left(w^{t}\right)=\prod_{i=1}^{t} \ell (w_i), +L\left(w^{t}\right)=\prod_{s=0}^{t} \ell (w_s), $$ -其中 $w^t=\{ w_1,\dots,w_t\}$ 是直到时间 $t$ (包括 $t$)的观测历史。 +其中 $w^t=\{ w_0,\dots,w_t\}$ 是直到时间 $t$ (包括 $t$)的观测历史。 有时为简便起见,我们会写作 @@ -130,14 +136,16 @@ L_t = L(w^t) = \frac{f(w^t)}{g(w^t)} $$ 这里我们使用如下约定: -$f(w^t) = f(w_1) f(w_2) \ldots f(w_t)$ 且 $g(w^t) = g(w_1) g(w_2) \ldots g(w_t)$。 +$f(w^t) = f(w_0) f(w_1) \ldots f(w_t)$ 且 $g(w^t) = g(w_0) g(w_1) \ldots g(w_t)$。 注意,似然过程满足以下*递归*或*乘法分解*: $$ -L(w^t) = \ell (w_t) L (w^{t-1}) . +L(w^t) = \ell (w_t) L (w^{t-1}) , $$ +其中 $L(w^{-1}) \equiv 1$。 + 似然比及其对数是使用 Neyman 和 Pearson 经典频率派方法进行推断的关键工具 {cite}`Neyman_Pearson`。 我们将再次使用来自 {doc}`likelihood_ratio_process` 的以下 Python 代码,该代码将 $f$ 和 $g$ 评估为两个不同的贝塔分布,然后通过从*某个*概率分布(例如,从 $g$ 生成的 IID 序列)生成序列 $w^t$ 来计算和模拟相关的似然比过程。 @@ -162,7 +170,7 @@ g = jit(lambda x: p(x, G_a, G_b)) def simulate(a, b, rng, T=50, N=500): ''' 生成N组T个似然比观测值, - 以N x T矩阵形式返回。 + 以N x T矩阵形式返回。第s列保存 ℓ(w_s),s = 0, ..., T-1。 ''' l_arr = np.empty((N, T)) @@ -176,7 +184,9 @@ def simulate(a, b, rng, T=50, N=500): return l_arr ``` -我们还将使用以下Python代码来准备一些信息丰富的模拟 +我们还将使用以下Python代码来准备一些信息丰富的模拟。 + +`l_seq_g` 和 `l_seq_f` 的第 $t$ 列保存 $L(w^t)$。 ```{code-cell} ipython3 l_arr_g = simulate(G_a, G_b, rng, N=50000) @@ -188,36 +198,37 @@ l_arr_f = simulate(F_a, F_b, rng, N=50000) l_seq_f = np.cumprod(l_arr_f, axis=1) ``` +(lb_bayes_law)= ## 似然比过程和贝叶斯定律 -设 $\pi_0 \in [0,1]$ 是贝叶斯统计学家对自然生成的 $w^t$ 序列是来自分布 $f$ 的独立同分布抽样的先验概率。 +设 $\pi_{-1} \in [0,1]$ 是贝叶斯统计学家对自然生成的 $w^t$ 序列是来自分布 $f$ 的独立同分布抽样的先验概率。 * 这里的"概率"应被理解为总结或表达主观观点的一种方式 * 它*不*意味着样本量无限增长时的预期相对频率 -设 $\pi_{t+1}$ 是定义如下的贝叶斯后验概率: +设 $\pi_{t}$ 是定义如下的贝叶斯后验概率: $$ -\pi_{t+1} = {\rm Prob}(q=f|w^{t+1}) +\pi_{t} = {\rm Prob}(q=f|w^{t}) $$ (eq:defbayesposterior) 似然比过程是后验概率 $\pi_t$ 演化公式中的主要角色,这是*贝叶斯定律*的一个实例。 -让我们推导 $\pi_{t+1}$ 的两个公式,一个用似然比 $\ell(w_t)$ 表示,另一个用 $L(w^t)$ 表示。 +让我们推导 $\pi_{t}$ 的两个公式,一个用似然比 $\ell(w_{t})$ 表示,另一个用 $L(w^{t})$ 表示。 首先,我们使用以下符号约定: -* $f(w^{t+1}) \equiv f(w_1) f(w_2) \cdots f(w_{t+1})$ -* $g(w^{t+1}) \equiv g(w_1) g(w_2) \cdots g(w_{t+1})$ -* $\pi_0 ={\rm Prob}(q=f |\emptyset)$ +* $f(w^{t}) \equiv f(w_0) f(w_1) \cdots f(w_{t})$ +* $g(w^{t}) \equiv g(w_0) g(w_1) \cdots g(w_{t})$ +* $\pi_{-1} ={\rm Prob}(q=f |\emptyset)$ * $\pi_t = {\rm Prob}(q=f |w^t)$ 这里符号 $\emptyset$ 表示"空集"或"无数据"。 -在没有数据的情况下,我们的贝叶斯统计学家认为序列 $w^{t+1}$ 的概率密度是: +在没有数据的情况下,我们的贝叶斯统计学家认为序列 $w^{t}$ 的概率密度是: $$ -{\rm Prob}(w^{t+1} |\emptyset) = \pi_0 f(w^{t+1})+ (1 - \pi_0) g(w^{t+1}) +{\rm Prob}(w^{t} |\emptyset) = \pi_{-1} f(w^{t})+ (1 - \pi_{-1}) g(w^{t}) $$ 概率定律表明,事件 $A$ 和 $B$ 的联合分布 ${\rm Prob}(AB)$ 与条件分布 ${\rm Prob}(A |B)$ 和 ${\rm Prob}(B |A)$ 之间的关系是: @@ -230,7 +241,7 @@ $$ (eq:problawAB) 我们关注的事件是 $$ -A = \{q=f\}, \quad B = \{w^{t+1}\}, \quad +A = \{q=f\}, \quad B = \{w^{t}\}, \quad $$ 其中大括号$\{\cdot\}$是我们用来表示"事件"的简写。 @@ -238,34 +249,34 @@ $$ 因此在我们的设定中,概率法则 {eq}`eq:problawAB` 意味着 $$ -{\rm Prob}(q=f |w^{t+1}) {\rm Prob}(w^{t+1} |\emptyset) = {\rm Prob}(w^{t+1} |q=f) {\rm Prob}(q=f | \emptyset) +{\rm Prob}(q=f |w^{t}) {\rm Prob}(w^{t} |\emptyset) = {\rm Prob}(w^{t} |q=f) {\rm Prob}(q=f | \emptyset) $$ 或者 $$ -\pi_{t+1} \left[\pi_0 f(w^{t+1}) + (1- \pi_0) g(w^{t+1})\right] = f(w^{t+1}) \pi_0 +\pi_{t} \left[\pi_{-1} f(w^{t}) + (1- \pi_{-1}) g(w^{t})\right] = f(w^{t}) \pi_{-1} $$ 或者 $$ -\pi_{t+1} = \frac{ f(w^{t+1}) \pi_0 }{\pi_0 f(w^{t+1}) + (1- \pi_0) g(w^{t+1})} +\pi_{t} = \frac{ f(w^{t}) \pi_{-1} }{\pi_{-1} f(w^{t}) + (1- \pi_{-1}) g(w^{t})} $$ -将上述等式右边的分子和分母都除以$g(w^{t+1})$得到 +将上述等式右边的分子和分母都除以$g(w^{t})$得到 ```{math} :label: eq_Bayeslaw1033 -\pi_{t+1}=\frac{\pi_{0}L\left(w^{t+1}\right)}{\pi_{0}L\left(w^{t+1}\right)+1-\pi_{0}} . +\pi_{t}=\frac{\pi_{-1}L\left(w^{t}\right)}{\pi_{-1}L\left(w^{t}\right)+1-\pi_{-1}} . ``` -公式 {eq}`eq_Bayeslaw1033` 可以被视为在看到数据批次 $\left\{ w_{i}\right\} _{i=1}^{t+1}$ 后对先验概率 $\pi_0$ 的一步修正。 +公式 {eq}`eq_Bayeslaw1033` 可以被视为在看到数据批次 $\left\{ w_{s}\right\} _{s=0}^{t}$ 后对先验概率 $\pi_{-1}$ 的一步修正。 -公式 {eq}`eq_Bayeslaw1033` 显示了似然比过程 $L\left(w^{t+1}\right)$ 在确定后验概率 $\pi_{t+1}$ 中起到的关键作用。 +公式 {eq}`eq_Bayeslaw1033` 显示了似然比过程 $L\left(w^{t}\right)$ 在确定后验概率 $\pi_{t}$ 中起到的关键作用。 -公式 {eq}`eq_Bayeslaw1033` 是理解以下观点的基础:由于似然比过程在 $t \rightarrow + \infty$ 时的行为特征,似然比过程在决定 $\pi_t$ 的极限行为时会主导初始先验 $\pi_0$ 的影响。 +公式 {eq}`eq_Bayeslaw1033` 是理解以下观点的基础:由于似然比过程在 $t \rightarrow + \infty$ 时的行为特征,似然比过程在决定 $\pi_t$ 的极限行为时会主导初始先验 $\pi_{-1}$ 的影响。 ### 递归公式 @@ -286,9 +297,19 @@ $$ (eq:bayes150) 显然,上述方程表明 $$ -{\rm Prob}(q=f|w^{t+1}) = \frac{{\rm Prob}(q=f|w^{t}) f(w_{t+1} )} {{\rm Prob}(w_{t+1})} +{\rm Prob}(q=f|w^{t+1}) = \frac{{\rm Prob}(q=f|w^{t}) f(w_{t+1} )} {{\rm Prob}(w_{t+1} | w^t)} +$$ + +其中 + +$$ +{\rm Prob}(w_{t+1} | w^t) = \pi_t f(w_{t+1}) + (1 - \pi_t) g(w_{t+1}) $$ +是在给定历史 $w^t$ 条件下 $w_{t+1}$ 的密度。 + +在给定 $q$ 的条件下,抽样 $w_{t+1}$ 与 $w^t$ 相互独立,因此 $f(w_{t+1})$ 是在 $q = f$ 和 $w^t$ 条件下 $w_{t+1}$ 的密度。 + 将方程 {eq}`eq:bayes150` 右侧的分子和分母都除以$g(w_{t+1})$得到递归式 ```{math} @@ -297,30 +318,40 @@ $$ \pi_{t+1}=\frac{\pi_{t} \ell(w_{t+1})}{\pi_{t} \ell(w_{t+1})+1-\pi_{t}} ``` -其中$\pi_{0}$是$q = f$的贝叶斯先验概率,即在我们尚未看到任何数据时基于个人或主观判断的关于$q$的信念。 +其中$\pi_{-1}$是$q = f$的贝叶斯先验概率,即在我们尚未看到任何数据时基于个人或主观判断的关于$q$的信念。 通过迭代方程 {eq}`eq_recur1` 可以推导出公式 {eq}`eq_Bayeslaw1033`。 -下面我们定义一个Python函数,该函数根据递归式 {eq}`eq_recur1` 使用似然比$\ell$更新信念$\pi$ +用对数比率(log odds)表示,递归式 {eq}`eq_recur1` 为 -```{code-cell} ipython3 -@jit -def update(π, l): - "Update π using likelihood l" - - # Update belief - π = π * l / (π * l + 1 - π) +```{math} +:label: eq_logodds - return π +\log \frac{\pi_{t+1}}{1 - \pi_{t+1}} = \log \frac{\pi_{t}}{1 - \pi_{t}} + \log \ell(w_{t+1}) ``` -如上所述,公式 {eq}`eq_Bayeslaw1033` 显示了似然比过程 $L\left(w^{t+1}\right)$ 在确定后验概率 $\pi_{t+1}$ 中发挥的关键作用。 +而公式 {eq}`eq_Bayeslaw1033` 为 + +$$ +\log \frac{\pi_{t}}{1 - \pi_{t}} = \log \frac{\pi_{-1}}{1 - \pi_{-1}} + \log L(w^t) . +$$ + +我们的代码对对数比率进行迭代。 + +直接对 {eq}`eq_recur1` 本身进行迭代会积累舍入误差,一旦 $\pi_t$ 接近 $1$ 或 $0$,就会使其略微超过 $1$ 或低于 $0$。 -当 $t \rightarrow + \infty$ 时,似然比过程在决定 $\pi_t$ 的极限行为中占主导地位,超过了初始先验 $\pi_0$ 的影响。 +下面我们定义一个Python函数,该函数根据递归式 {eq}`eq_logodds` 使用似然比$\ell$更新 $q = f$ 的对数比率 + +```{code-cell} ipython3 +@jit +def update(log_odds, l): + "Update the log odds of q = f using likelihood ratio l" + return log_odds + np.log(l) +``` -为了说明这一见解,我们将绘制图表,展示似然比过程 $L_t$ 的*一条*模拟路径,以及与*相同*似然比过程实现但*不同*初始先验概率 $\pi_{0}$ 相关联的两条 $\pi_t$ 路径。 +为了说明似然比过程如何主导初始先验的影响,我们将绘制图表,展示似然比过程 $L_t$ 的*一条*模拟路径,以及与*相同*似然比过程实现但*不同*初始先验概率 $\pi_{-1}$ 相关联的两条 $\pi_t$ 路径。 -首先,我们在Python中设定两个 $\pi_0$ 的值。 +首先,我们在Python中设定两个 $\pi_{-1}$ 的值。 ```{code-cell} ipython3 π1, π2 = 0.2, 0.8 @@ -328,35 +359,39 @@ def update(π, l): 接下来我们为从密度函数$f$中独立同分布抽取的历史数据生成似然比过程$L_t$和后验概率$\pi_t$的路径。 +`π_seq_f` 的第 $0$ 列保存先验 $\pi_{-1}$,第 $t+1$ 列保存 $\pi_t$。 + ```{code-cell} ipython3 T = l_arr_f.shape[1] -π_seq_f = np.empty((2, T+1)) -π_seq_f[:, 0] = π1, π2 +log_odds_f = np.empty((2, T+1)) +log_odds_f[:, 0] = logit([π1, π2]) for t in range(T): for i in range(2): - π_seq_f[i, t+1] = update(π_seq_f[i, t], l_arr_f[0, t]) + log_odds_f[i, t+1] = update(log_odds_f[i, t], l_arr_f[0, t]) + +π_seq_f = expit(log_odds_f) ``` ```{code-cell} ipython3 --- mystnb: figure: - caption: 后验路径与对数似然 + caption: 后验路径与对数似然比 name: fig-posterior-lratio-f --- fig, ax1 = plt.subplots() for i in range(2): - ax1.plot(range(T+1), π_seq_f[i, :], - label=fr"$\pi_0$={π_seq_f[i, 0]}", lw=2) + ax1.plot(range(-1, T), π_seq_f[i, :], + label=fr"$\pi_{{-1}}$={π_seq_f[i, 0]:.1f}", lw=2) ax1.set_ylabel(r"$\pi_t$") ax1.set_xlabel(r"$t$") ax1.legend() ax2 = ax1.twinx() -ax2.plot(range(1, T+1), np.log(l_seq_f[0, :]), '--', color='b', lw=2) +ax2.plot(range(T), np.log(l_seq_f[0, :]), '--', color='b', lw=2) ax2.set_ylabel(r"$\log(L(w^{t}))$") plt.show() @@ -370,39 +405,41 @@ plt.show() ```{code-cell} ipython3 T = l_arr_g.shape[1] -π_seq_g = np.empty((2, T+1)) -π_seq_g[:, 0] = π1, π2 +log_odds_g = np.empty((2, T+1)) +log_odds_g[:, 0] = logit([π1, π2]) for t in range(T): for i in range(2): - π_seq_g[i, t+1] = update(π_seq_g[i, t], l_arr_g[0, t]) + log_odds_g[i, t+1] = update(log_odds_g[i, t], l_arr_g[0, t]) + +π_seq_g = expit(log_odds_g) ``` ```{code-cell} ipython3 --- mystnb: figure: - caption: 后验路径与对数似然 + caption: 后验路径与对数似然比 name: fig-posterior-lratio-g --- fig, ax1 = plt.subplots() for i in range(2): - ax1.plot(range(T+1), π_seq_g[i, :], - label=fr"$\pi_0$={π_seq_g[i, 0]}", lw=2) + ax1.plot(range(-1, T), π_seq_g[i, :], + label=fr"$\pi_{{-1}}$={π_seq_g[i, 0]:.1f}", lw=2) ax1.set_ylabel(r"$\pi_t$") ax1.set_xlabel(r"$t$") ax1.legend() ax2 = ax1.twinx() -ax2.plot(range(1, T+1), np.log(l_seq_g[0, :]), '--', color='b', lw=2) +ax2.plot(range(T), np.log(l_seq_g[0, :]), '--', color='b', lw=2) ax2.set_ylabel(r"$\log(L(w^{t}))$") plt.show() ``` -以下我们提供Python代码,验证自然界永久选择从密度$f$中抽取。 +下一个代码单元检验批量公式 {eq}`eq_Bayeslaw1033` 是否能够重现由递归式 {eq}`eq_logodds` 从密度 $f$ 抽样生成的 $\pi_t$ 路径。 ```{code-cell} ipython3 π_seq = np.empty((2, T+1)) @@ -421,79 +458,66 @@ np.abs(π_seq - π_seq_f).max() < 1e-10 ## 另一种时序协议 -让我们研究当自然界在不同的时序协议下生成历史$w^t = \{w_1, w_2, \dots, w_t\}$时,后验概率$\pi_t = {\rm Prob}(q=f|w^{t})$的表现。 +让我们研究当自然界在不同的时序协议下生成历史$w^t = \{w_0, w_1, \dots, w_t\}$时,后验概率$\pi_t = {\rm Prob}(q=f|w^{t})$的表现。 -到目前为止,我们假设在时间1之前,自然界以某种方式选择从$f$或$g$中进行IID序列抽样来得到$w^t$。 +到目前为止,我们假设在时间$0$之前,自然界以某种方式选择从$f$或$g$中进行IID序列抽样来得到$w^t$。 自然界关于是从$f$还是从$g$中抽样的决定因此是*永久性的*。 -现在我们假设一个不同的时序协议,在*每个*时期$t =1, 2, \ldots$之前,自然界: +现在我们假设一个不同的时序协议,在*每个*时期$t =0, 1, \ldots$之前,自然界: -* 抛一个权重为$x$的硬币,然后 +* 抛一个权重为$\alpha$的硬币,然后 * 如果抛出"正面"就从$f$中抽样 * 如果抛出"反面"就从$g$中抽样 在这个时序协议下,自然界*既不*永久地从$f$抽样*也不*永久地从$g$抽样,所以认为自然界*永久地*从其中之一进行IID抽样的统计学家是错误的。 -* 事实上,自然界实际上是*永久地*从$f$和$g$的$x$-混合分布中抽样——当$x \in (0,1)$时,这个分布既不是$f$也不是$g$ +* 事实上,自然界是从混合分布 $h(w|\alpha) = \alpha f(w) + (1-\alpha) g(w)$ 中进行IID抽样——当$\alpha \in (0,1)$时,这个密度既不是$f$也不是$g$ + +统计学家的后验概率 $\pi_t$ 仍然是他认为 $q = f$ 的概率,正如 {eq}`eq:defbayesposterior` 中所定义的那样。 -因此,贝叶斯先验 $\pi_0$ 和方程 {eq}`eq_Bayeslaw1033` 描述的后验概率序列*不应该*被解释为统计学家对于另一种时序协议(即自然从 $f$ 和 $g$ 的 $x$ 混合分布中抽样)下混合参数 $x$ 的观点。 +它*不是*对混合参数 $\alpha$ 的估计。 -当我们回顾方程 {eq}`eq:defbayesposterior` 中 $\pi_t$ 的定义时,这一点就很清楚了。为方便起见,我们在这里重复该方程: +统计学家的模型是错误指定的,$f$ 和 $g$ 相对于 $h$ 的 Kullback–Leibler 散度决定了 $\pi_t$ 的极限。 + +根据大数定律,$\frac{1}{t+1} \log L(w^t)$ 以概率1收敛于 $$ -\pi_{t+1} = {\rm Prob}(q=f|w^{t+1}) +E_h[\log \ell(w)] = E_h\left[\log \frac{h(w|\alpha)}{g(w)}\right] - E_h\left[\log \frac{h(w|\alpha)}{f(w)}\right] = KL(h, g) - KL(h, f) , $$ -让我们编写一些 Python 代码来研究当自然实际上既不是从 $f$ 也不是从 $g$ 生成数据,而是从两个 beta 分布的 $x$ 混合分布中进行 IID 抽样时,$\pi_t$ 的行为。 +其中 $E_h$ 表示在 $h(\cdot|\alpha)$ 下的期望,$KL(h, f) = \int h(w|\alpha) \log \frac{h(w|\alpha)}{f(w)} dw$;参见 {doc}`likelihood_ratio_process` 中的 {ref}`KL_link`。 -```{note} -这是一个统计学家的模型被错误指定的情况,因此我们应该预期相对于 $x$ 混合分布的 Kullback–Leibler 散度将影响结果。 -``` +所以当 $KL(h, f) < KL(h, g)$ 时,$\log L(w^t) \rightarrow + \infty$,$\pi_t \rightarrow 1$。 + +而当 $KL(h, f) > KL(h, g)$ 时,$\log L(w^t) \rightarrow - \infty$,$\pi_t \rightarrow 0$。 -我们可以研究对于自然混合概率 $x$ 的不同值,$\pi_t$ 会如何表现。 +统计学家会逐渐相信 $\{f, g\}$ 中在 Kullback–Leibler 散度意义上更接近 $h$ 的那一个。 -首先,让我们创建一个函数来模拟混合时序协议下的数据: +让我们编写一些 Python 代码,在 $\alpha = 0.5$ 时验证这一点。 ```{code-cell} ipython3 @jit -def simulate_mixture_path(x_true, T, rng): +def simulate_mixture_path(α, T, rng): """ - 模拟混合时序协议下的 T 个观测值。 + 在混合时序协议下模拟 w_0, ..., w_{T-1} 的抽样。 """ w = np.empty(T) for t in range(T): - if rng.random() < x_true: + if rng.random() < α: w[t] = rng.beta(F_a, F_b) else: w[t] = rng.beta(G_a, G_b) return w -``` - -让我们从这个混合模型生成一系列观测值,其真实混合概率为$x=0.5$。 -我们首先用这个序列来研究$\pi_t$的行为。 - -```{note} -之后,我们可以用它来研究一个统计学家如何在知道数据是由$f$和$g$的$x$混合生成的情况下,构建$x$的最大似然估计或贝叶斯估计,以及$f$和$g$的自由参数。 -``` -```{code-cell} ipython3 -x_true = 0.5 +α = 0.5 T_mix = 200 - -# 三个不同的先验,均值分别为0.25, 0.5, 0.75 -prior_params = [(1, 3), (1, 1), (3, 1)] -prior_means = [a/(a+b) for a, b in prior_params] - -# 从混合模型生成一条观测路径 rng = np.random.default_rng(142857) -w_mix = simulate_mixture_path(x_true, T_mix, rng) +w_mix = simulate_mixture_path(α, T_mix, rng) ``` -### 在错误模型下 $\pi_t$ 的行为 - -让我们研究当数据实际上是由 $f$ 和 $g$ 的 $x$-混合生成时,从 $f$ 永久抽取的后验概率 $\pi_t$ 的表现。 +我们针对三个先验 $\pi_{-1}$ 计算 $\pi_t$ 的路径。 ```{code-cell} ipython3 --- @@ -502,25 +526,15 @@ mystnb: caption: 混合模型下的后验 name: fig-posterior-mixture --- +log_L_mix = np.cumsum(np.log(f(w_mix) / g(w_mix))) + fig, ax = plt.subplots(figsize=(10, 6)) -T_plot = 200 - -for i, mean0 in enumerate(prior_means): - π_wrong = np.empty(T_plot + 1) - π_wrong[0] = mean0 - - # 计算混合数据的似然比 - for t in range(T_plot): - l_t = f(w_mix[t]) / g(w_mix[t]) - π_wrong[t + 1] = update(π_wrong[t], l_t) - - ax.plot(range(T_plot + 1), π_wrong, - label=fr'$\pi_0 = ${mean0:.2f}', - color=colors[i], linewidth=2) - -ax.axhline(y=x_true, color='black', linestyle='--', - label=f'True x = {x_true}', linewidth=2) -ax.set_xlabel('t') +for i, π_init in enumerate([0.25, 0.5, 0.75]): + π_path = expit(logit(π_init) + log_L_mix) + ax.plot(range(-1, T_mix), np.concatenate(([π_init], π_path)), + label=fr'$\pi_{{-1}} = ${π_init:.2f}', color=colors[i], linewidth=2) + +ax.set_xlabel('$t$') ax.set_ylabel(r'$\pi_t$') ax.legend() plt.show() @@ -528,13 +542,7 @@ plt.show() 显然,$\pi_t$ 收敛到1。 -这表明模型得出结论认为数据是由 $f$ 生成的。 - -为什么会这样呢? - -给定 $x = 0.5$,数据生成过程是 $f$ 和 $g$ 的混合:$m(w) = \frac{1}{2}f(w) + \frac{1}{2}g(w)$。 - -让我们检查一下混合分布 $m$ 与 $f$ 和 $g$ 之间的 {ref}`KL散度 `。 +让我们检查 $f$ 和 $g$ 相对于 $h$ 的 {ref}`KL散度 `。 ```{code-cell} ipython3 def compute_KL(f, g): @@ -546,44 +554,17 @@ def compute_KL(f, g): return val -def compute_div_m(f, g): - """ - 计算 KL(m, f) 和 KL(m, g) - """ - def m(w): - return 0.5 * (f(w) + g(w)) - - return compute_KL(m, f), compute_KL(m, g) +h = lambda w: α * f(w) + (1 - α) * g(w) +KL_hf, KL_hg = compute_KL(h, f), compute_KL(h, g) - -KL_f, KL_g = compute_div_m(f, g) - -print(f'KL(m, f) = {KL_f:.3f}\nKL(m, g) = {KL_g:.3f}') +print(f'KL(h, f) = {KL_hf:.3f}\nKL(h, g) = {KL_hg:.3f}') ``` -由于 $KL(m, f) < KL(m, g)$,$f$ 相对于混合分布 $m$ 来说"更接近"。 - -因此根据我们在 {doc}`likelihood_ratio_process` 中关于 KL 散度和似然比过程的讨论,当 $t \to \infty$ 时,$\log(L_t) \to \infty$。 - -现在回看关键方程 {eq}`eq_Bayeslaw1033`。 - -考虑函数 - -$$ -h(z) = \frac{\pi_0 z}{\pi_0 z + 1 - \pi_0}. -$$ - -极限 $\lim_{z \to \infty} h(z)$ 等于1。 - -因此对任意 $\pi_0 \in (0,1)$,当 $t \to \infty$ 时,$\pi_t \to 1$。 - -这解释了我们在上图中观察到的现象。 +由于 $KL(h, f) < KL(h, g)$,$f$ 更接近 $h$,$\log L(w^t) \rightarrow + \infty$,因此对每个 $\pi_{-1} \in (0,1)$,$\pi_t \rightarrow 1$。 -但我们如何学习真实的混合参数 $x$? +{doc}`mix_model` 进一步研究了这个被错误指定的统计学家的问题,包括使 $KL(h, f) = KL(h, g)$(此时 $\pi_t$ 不收敛)的 $\alpha$ 值。 -这个主题将在 {doc}`mix_model` 中讨论。 - -我们将在 {doc}`mix_model` 的练习中探讨如何学习真实的混合参数 $x$。 +它还研究了一个知道自然界每期都进行混合抽样,并使用贝叶斯法则来学习 $\alpha$ 的统计学家的情形。 ## 后验概率 $\{\pi_t\}$ 在主观概率分布下的行为 @@ -605,7 +586,7 @@ $$ 贝叶斯定律仅仅是概率法则的应用,用于计算第 $t$ 次抽样 $w_t$ 在已知 $[w_0, \ldots, w_{t-1}]$ 条件下的条件分布。 -在我们的工人对自然选择分布 $F$ 赋予主观概率 $\pi_{-1}$ 后,我们实际上从一开始就假设决策者*知道*过程 $\{w_t\}_{t=0}$ 的联合分布。 +在我们的工人对自然选择分布 $F$ 赋予主观概率 $\pi_{-1}$ 后,我们实际上从一开始就假设决策者*知道*过程 $\{w_t\}_{t=0}^\infty$ 的联合分布。 我们假设工人也知道概率论的法则。 @@ -618,12 +599,14 @@ $$ 在时间 $0$ 抽取工资之前,工人因此认为 $w_0$ 的密度是 $$ -h(w_0;\pi_{-1}) = \pi_{-1} f(w_0) + (1-\pi_{-1}) g(w_0). +h(w_0|\pi_{-1}) = \pi_{-1} f(w_0) + (1-\pi_{-1}) g(w_0). $$ -令 $a \in \{ f, g\} $ 为一个指标,表示自然是永久地从分布 $f$ 还是从分布 $g$ 中抽样。 +这里以及下文中,$h(w|\pi) \equiv \pi f(w) + (1 - \pi) g(w)$ 表示以权重 $\pi$ 对 $f$ 加权的 $f$ 与 $g$ 的混合分布。 + +回忆一下,$q \in \{ f, g\}$ 表示自然是永久地从分布 $f$ 还是从分布 $g$ 中抽样。 -在绘制$w_0$后,工人使用贝叶斯定理推导出后验概率$\pi_0 = {\rm Prob}({a = f | w_0})$(即密度为$f(w)$的概率)为: +在绘制$w_0$后,工人使用贝叶斯定理推导出后验概率$\pi_0 = {\rm Prob}({q = f | w_0})$(即密度为$f(w)$的概率)为: $$ \pi_0 = { \pi_{-1} f(w_0) \over \pi_{-1} f(w_0) + (1-\pi_{-1}) g(w_0)} . @@ -644,7 +627,7 @@ $$ 而在给定$w_t, w_{t-1}, \ldots, w_0$条件下$w_{t+1}$的密度为: $$ -h(w_{t+1};\pi_{t}) = \pi_{t} f(w_{t+1}) + (1-\pi_{t}) g(w_{t+1}) . +h(w_{t+1}|\pi_{t}) = \pi_{t} f(w_{t+1}) + (1-\pi_{t}) g(w_{t+1}) . $$ 注意到: @@ -678,25 +661,27 @@ $$ 当 $t \rightarrow +\infty$ 时,$\{\pi_t(\omega)\}_{t=0}^\infty$ 的极限点是一个随机变量的实现,这个随机变量是当我们从 $\Omega$ 中采样 $\omega$ 并构造 $\{\pi_t(\omega)\}_{t=0}^\infty$ 的重复抽样时产生的。 -通过观察运动方程 {eq}`eq_recur1` 或 {eq}`eq:like44`,我们可以推断出一些关于极限点概率分布的信息 +令 $$ \pi_\infty(\omega) = \lim_{t \rightarrow + \infty} \pi_t(\omega). $$ -显然,由于我们假设 $f \neq g$ 时似然比 $\ell(w_t)$ 与 1 不同,{eq}`eq:like44` 的唯一可能的固定点是 +鞅收敛定理并没有告诉我们 $\pi_t(\omega)$ 会收敛到哪里。 -$$ -\pi_\infty(\omega) =1 -$$ +有两个事实能解决这个问题。 -和 +第一,$\pi_t$ 是事件 $q = f$ 的指示函数的条件期望 $E[\mathbf{1}\{q = f\} \,|\, w^t]$。 -$$ -\pi_\infty(\omega) =0 -$$ +第二,观察到无限历史 $w_0, w_1, \ldots$ 的观察者能够确定 $q$。 + +根据强大数定律,当 $q = f$ 时,$\frac{1}{t+1} \log L(w^t)$ 收敛到 $E_f[\log \ell(w)] = KL(f, g) > 0$;当 $q = g$ 时,它收敛到 $E_g[\log \ell(w)] = -KL(g, f) < 0$。 -因此,对某些实现来说,$\lim_{t \rightarrow + \infty} \pi_t(\omega) =1$,而对其他实现来说,$\lim_{t \rightarrow + \infty} \pi_t(\omega) =0$。 +杜布鞅收敛定理 {cite}`doob1953` 随后表明 $\pi_t$ 以概率一收敛到 $E[\mathbf{1}\{q = f\} \,|\, w_0, w_1, \ldots] = \mathbf{1}\{q = f\}$。 + +因此,对于自然抽取 $f$ 的实现,$\lim_{t \rightarrow + \infty} \pi_t(\omega) =1$,而对于自然抽取 $g$ 的实现,$\lim_{t \rightarrow + \infty} \pi_t(\omega) =0$。 + +{ref}`lb_drill_down` 一节和练习 {ref}`likelihood_bayes_ex2` 给出了 $\pi_\infty(\omega) \in \{0, 1\}$ 的第二种证明。 现在让我们记住 $\{\pi_t\}_{t=0}^\infty$ 是一个鞅,并应用迭代期望法则。 @@ -734,72 +719,91 @@ $$ 将此方程与方程 {eq}`eq:expect_pi_infty` 结合,我们推断出 ${\textrm{Prob}(\Omega)}$ 赋予 $\pi_\infty(\omega)$ 为 1 的概率必须是 $\pi_{-1}$。 +从 $\pi_\infty = \mathbf{1}\{q = f\}$ 和 ${\rm Prob}(q = f) = \pi_{-1}$ 出发,也可以得到相同的结果。 + 因此,在工人的主观分布下,$\{\pi_t\}$将有$\pi_{-1}$的样本路径逐点收敛到$1$,有$1 - \pi_{-1}$的样本路径逐点收敛到$0$。 ### 一些模拟 让我们通过一些模拟来观察鞅收敛定理在工人主观分布下的学习模型中的表现。 -让我们模拟$\left\{ \pi_{t}\right\} _{t=0}^{T}$和$\left\{ w_{t}\right\} _{t=0}^{T}$的路径,其中对于每个$t\geq0$,$w_t$从主观分布中抽取: +让我们模拟$\left\{ \pi_{t}\right\} _{t=-1}^{T-1}$和$\left\{ w_{t}\right\} _{t=0}^{T-1}$的路径,其中对于每个$t\geq0$,$w_t$从主观分布中抽取: $$ -\pi_{t-1}f\left(w_{t}\right)+\left(1-\pi_{t-1}\right)g\left(w_{t}\right) +h(w_t|\pi_{t-1}) = \pi_{t-1}f\left(w_{t}\right)+\left(1-\pi_{t-1}\right)g\left(w_{t}\right) $$ +这种抽样方式使得历史 $w^t$ 具有与下述方式相同的联合分布:先一次性地以 ${\rm Prob}(q = f) = \pi_{-1}$ 的概率抽取 $q$,然后从 $q$ 中独立同分布地抽取 $w_0, w_1, \ldots$: + +$$ +\prod_{s=0}^{t} h(w_s|\pi_{s-1}) = \pi_{-1} f(w^t) + (1 - \pi_{-1}) g(w^t) . +$$ + +练习 {ref}`likelihood_bayes_ex1` 要求你证明并验证这一点。 + +以*固定*权重 $\alpha$ 进行逐期混合会得到不同的联合密度 $\prod_{s=0}^{t} h(w_s|\alpha)$;这正是 {doc}`mix_model` 中的时序方案。 + 我们将绘制大量样本路径。 +我们的代码跟踪 $q = f$ 的对数几率,并将其转换为概率。 + ```{code-cell} ipython3 @jit -def martingale_simulate(π0, rng, N=5000, T=200): - +def martingale_simulate(π_prior, rng, N=5000, T=200): + """ + Simulate N paths of w_0, ..., w_{T-1} from the subjective distribution. + Column 0 of π_path holds the prior π_{-1}; column t+1 holds π_t. + """ π_path = np.empty((N,T+1)) w_path = np.empty((N,T)) - π_path[:,0] = π0 + π_path[:,0] = π_prior for n in range(N): - π = π0 + log_odds = np.log(π_prior) - np.log(1 - π_prior) + π = π_prior for t in range(T): - # draw w + # draw w from h(w | π) if rng.random() <= π: w = rng.beta(F_a, F_b) else: w = rng.beta(G_a, G_b) - π = π*f(w)/g(w)/(π*f(w)/g(w) + 1 - π) + log_odds = update(log_odds, f(w) / g(w)) + π = 1 / (1 + np.exp(-log_odds)) π_path[n,t+1] = π w_path[n,t] = w return π_path, w_path -def fraction_0_1(π0, rng, N, T, decimals): +def fraction_0_1(π_prior, rng, N, T, decimals): - π_path, w_path = martingale_simulate(π0, rng, N=N, T=T) + π_path, w_path = martingale_simulate(π_prior, rng, N=N, T=T) values, counts = np.unique(np.round(π_path[:,-1], decimals=decimals), return_counts=True) return values, counts -def create_table(π0s, rng, N=10000, T=500, decimals=2): +def create_table(π_priors, rng, N=10000, T=500, decimals=2): outcomes = [] - for π0 in π0s: - values, counts = fraction_0_1(π0, rng, N=N, T=T, decimals=decimals) + for π_prior in π_priors: + values, counts = fraction_0_1(π_prior, rng, N=N, T=T, decimals=decimals) freq = counts/N outcomes.append(dict(zip(values, freq))) table = pd.DataFrame(outcomes).sort_index(axis=1).fillna(0) - table.index = π0s + table.index = π_priors return table # simulate T = 200 -π0 = .5 +π_prior = .5 -π_path, w_path = martingale_simulate(π0=π0, rng=rng, T=T, N=10000) +π_path, w_path = martingale_simulate(π_prior=π_prior, rng=rng, T=T, N=10000) ``` ```{code-cell} ipython3 fig, ax = plt.subplots() for i in range(100): - ax.plot(range(T+1), π_path[i, :], lw=2) + ax.plot(range(-1, T), π_path[i, :], lw=2) -ax.set_xlabel('time') +ax.set_xlabel('$t$') ax.set_ylabel(r'$\pi_t$') plt.show() ``` @@ -814,72 +818,105 @@ plt.show() * 没有路径收敛到不等于 $0$ 或 $1$ 的极限点 -如下图所示,通过观察不同小 $t$ 值时 $\pi_t$ 的跨集合分布,可以看出收敛实际上发生得相当快。 +如下图所示,通过观察 $t = 1, 10$ 以及 $199$ 时 $\pi_t$ 的跨集合分布,可以看出收敛实际上发生得相当快。 ```{code-cell} ipython3 fig, ax = plt.subplots() for t in [1, 10, T-1]: - ax.hist(π_path[:,t], bins=20, alpha=0.4, label=f'T={t}') + ax.hist(π_path[:, t+1], bins=20, alpha=0.4, label=f'$t={t}$') ax.set_ylabel('count') -ax.set_xlabel(r'$\pi_T$') +ax.set_xlabel(r'$\pi_t$') ax.legend(loc='lower right') plt.show() ``` -显然,到 $t = 199$ 时,$\pi_t$ 已收敛到 $0$ 或 $1$。 +下一个单元格报告了 $\pi_{199}$ 高于 $0.99$、低于 $0.01$ 以及介于两者之间的路径所占的比例。 + +```{code-cell} ipython3 +def report_fractions(π_path): + π_T = π_path[:, -1] + print(f"fraction with π_T > 0.99: {np.mean(π_T > 0.99):.4f}") + print(f"fraction with π_T < 0.01: {np.mean(π_T < 0.01):.4f}") + print(f"fraction with 0.01 <= π_T <= 0.99: {np.mean((π_T >= 0.01) & (π_T <= 0.99)):.4f}") + +report_fractions(π_path) +``` + +显然,到 $t = 199$ 时,几乎每条路径的 $\pi_t$ 都已收敛到 $0$ 或 $1$。 -收敛到 $1$ 的路径比例是 $.5$ +收敛到 $1$ 的路径比例接近 $.5$。 -收敛到 $0$ 的路径比例也是 $.5$。 +收敛到 $0$ 的路径比例也接近 $.5$。 这个比例 $.5$ 是否让你想起什么? -是的:它等于我们用来生成整个集合中每个序列的初始值 $\pi_0 = .5$。 +是的:它等于我们用来生成整个集合中每个序列的初始值 $\pi_{-1} = .5$。 -那么让我们把 $\pi_0$ 改为 $.3$,看看对于不同的 $t$ 值,$\pi_t$ 集合的分布会发生什么变化。 +那么让我们把 $\pi_{-1}$ 改为 $.3$,看看对于不同的 $t$ 值,$\pi_t$ 集合的分布会发生什么变化。 ```{code-cell} ipython3 # simulate T = 200 -π0 = .3 +π_prior = .3 -π_path3, w_path3 = martingale_simulate(π0=π0, rng=rng, T=T, N=10000) +π_path3, w_path3 = martingale_simulate(π_prior=π_prior, rng=rng, T=T, N=10000) ``` ```{code-cell} ipython3 fig, ax = plt.subplots() for t in [1, 10, T-1]: - ax.hist(π_path3[:,t], bins=20, alpha=0.4, label=f'T={t}') + ax.hist(π_path3[:, t+1], bins=20, alpha=0.4, label=f'$t={t}$') ax.set_ylabel('count') -ax.set_xlabel(r'$\pi_T$') +ax.set_xlabel(r'$\pi_t$') ax.legend(loc='upper right') plt.show() + +report_fractions(π_path3) ``` -对于前面假设 $\pi_0 = .5$ 的集成模型,下图展示了两条 $w_t$ 路径和产生它们的 $\pi_t$ 序列。 +对于前面假设 $\pi_{-1} = .5$ 的集成模型,下图展示了两条 $w_t$ 路径和产生它们的 $\pi_t$ 序列。 + +我们选取 $\pi_{199}$ 最大的路径和 $\pi_{199}$ 最小的路径。 -注意其中一条路径涉及系统性更高的 $w_t$ 值,这些结果将 $\pi_t$ 向上推动。 +抽样 $w \in [0.524, 0.999]$ 满足 $\ell(w) < 1$,会将 $\pi_t$ 向下推(参见 {doc}`exchangeable`)。 + +$\pi_t$ 趋向 $1$ 的路径,其 $w_t$ 值系统性地低于 $\pi_t$ 趋向 $0$ 的路径。 在模拟早期的随机抽样会将主观分布推向更频繁地从 $F$ 中抽样的方向,这会将 $\pi_t$ 推向 $1$。 +由于预测抽样与一次性抽取 $q$ 具有相同的联合分布,$\pi_t \rightarrow 1$ 的路径看起来就像是从 $f$ 中独立同分布抽取的一个序列,而 $\pi_t \rightarrow 0$ 的路径看起来就像是从 $g$ 中独立同分布抽取的一个序列。 + ```{code-cell} ipython3 +j_up, j_down = np.argmax(π_path[:, -1]), np.argmin(π_path[:, -1]) + fig, ax = plt.subplots() -for i, j in enumerate([10, 100]): - ax.plot(range(T+1), π_path[j,:], color=colors[i], - label=fr'${{\pi_t}}$, {j}-th simulation', lw=2) - ax.plot(range(1,T+1), w_path[j,:], color=colors[i], - label=fr'${{w_t}}$, {j}-th simulation', alpha=0.3, lw=2) +ax2 = ax.twinx() +for i, j in enumerate([j_up, j_down]): + ax.plot(range(-1, T), π_path[j, :], color=colors[i], + label=fr'$\pi_t$, path {j}', lw=2) + ax2.plot(range(T), w_path[j, :], color=colors[i], + label=fr'$w_t$, path {j}', alpha=0.3, lw=2) -ax.legend(loc='upper right') -ax.set_xlabel('time') +ax.set_xlabel('$t$') ax.set_ylabel(r'$\pi_t$') -ax2 = ax.twinx() -ax2.set_ylabel(r"$w_t$") +ax2.set_ylabel(r'$w_t$') +handles = ax.get_legend_handles_labels()[0] + ax2.get_legend_handles_labels()[0] +ax.legend(handles=handles, loc='center right') plt.show() + +for name, j in [('π_t → 1', j_up), ('π_t → 0', j_down)]: + print(f"path with {name}: mean of w_t = {w_path[j, :].mean():.3f}") + +up = π_path[:, -1] > 0.5 +print(f"all paths with π_199 > 0.5: mean of w_t = {w_path[up, :].mean():.3f}") +print(f"all paths with π_199 < 0.5: mean of w_t = {w_path[~up, :].mean():.3f}") +print(f"means of f and g: {F_a / (F_a + F_b):.3f}, {G_a / (G_a + G_b):.3f}") ``` +在所有路径中,$\pi_{199} > 0.5$ 的路径上 $w_t$ 的均值接近 $f$ 的均值,而 $\pi_{199} < 0.5$ 的路径上 $w_t$ 的均值接近 $g$ 的均值。 + ## 通过从主观条件密度中抽取的路径验证初始先验 现在让我们使用 Python 代码生成一个表格,来验证我们之前关于点态极限 $\pi_{\infty}(\omega)$ 的概率分布的说法。 @@ -900,6 +937,8 @@ table 对于 $\pi_{t}$ 收敛到 1 的模拟比例确实总是接近 $\pi_{-1}$,这与预期一致。 + +(lb_drill_down)= ## 深入分析 为了理解$\pi_t$的局部动态行为,研究$\pi_t$在给定$\pi_{t-1}$条件下的方差是很有启发性的。 @@ -951,6 +990,295 @@ plt.show() 只有当代理几乎确定 $w_t$ 是从 $F$ 分布中抽取的,或者几乎确定是从 $G$ 分布中抽取的时候,条件方差才接近于零。 +在每一个 $\pi_{t-1} \in (0,1)$ 处,条件方差都是正的。 + +由于 $\pi_t$ 是一个鞅,沿着一条路径的条件方差之和的期望是有界的: + +$$ +E_{-1} \sum_{t=0}^{\infty} \sigma^2(\pi_t | \pi_{t-1}) = E_{-1} \sum_{t=0}^{\infty} (\pi_t - \pi_{t-1})^2 = E_{-1} \pi_\infty^2 - \pi_{-1}^2 \leq \pi_{-1}(1 - \pi_{-1}) . +$$ + +因此,几乎沿着每一条路径都有 $\sigma^2(\pi_t | \pi_{t-1}) \rightarrow 0$,并且 $\pi_t$ 必须趋近于条件方差为零的点,即 $0$ 或 $1$。 + +练习 {ref}`likelihood_bayes_ex2` 补充了相关细节。 + ## 相关讲座 本讲座致力于建立一些有用的基础设施,这将有助于我们理解在 {doc}`odu`、{doc}`wald_friedman` 和 {doc}`navy_captain` 中描述的结果的推理基础。 + +以本讲座为基础的其他讲座包括 + +* {doc}`exchangeable`,描述了构成本讲座主观分布基础的 $w_0, w_1, \ldots$ 的可交换联合分布 +* {doc}`mix_model`,研究当自然每期重新混合 $f$ 和 $g$ 时的贝叶斯学习 +* {doc}`merging_of_opinions`,研究具有不同先验的两个贝叶斯主义者的后验何时会趋同 +* {doc}`likelihood_ratio_process_2`,在进一步的背景下研究似然比过程和贝叶斯学习 +* {doc}`wald_friedman_2`,使用后验 $\pi_t$ 作为序贯决策问题的状态变量 + +## 练习 + +```{exercise} +:label: likelihood_bayes_ex1 + +考虑两种模拟历史 $w_0, w_1, \ldots, w_{T-1}$ 的方法: + +* 方法(i):以 ${\rm Prob}(q = f) = \pi_{-1}$ 一次性抽取 $q$,然后从 $q$ 中独立同分布地抽取 $w_0, w_1, \ldots$ +* 方法(ii):从预测密度 $h(w_t|\pi_{t-1})$ 中抽取每个 $w_t$,如 `martingale_simulate` 中所做的那样 + +1. 证明 $\prod_{s=0}^{t} h(w_s|\pi_{s-1}) = \pi_{-1} f(w^t) + (1 - \pi_{-1}) g(w^t)$,由此说明对于每个 $t$,这两种方法给出 $w^t$ 相同的联合分布。 + +2. 取 $\pi_{-1} = 0.3$,用每种方法模拟 $10{,}000$ 条路径。用双样本科尔莫戈罗夫-斯米尔诺夫检验比较 $t = 1, 10, 100$ 时 $\pi_t$ 的分布。 + +3. 在方法(i)下,验证在 $q = f$ 的路径上 $\pi_t$ 趋近于 $1$,在 $q = g$ 的路径上 $\pi_t$ 趋近于 $0$。 +``` + +```{solution-start} likelihood_bayes_ex1 +:class: dropdown +``` + +第 1 部分。 + +对于 $s \geq 0$,设 $D_s = \pi_{-1} f(w^s) + (1 - \pi_{-1}) g(w^s)$,并设 $D_{-1} = 1$。 + +由 {eq}`eq_Bayeslaw1033` 可知,$\pi_{s-1} = \pi_{-1} f(w^{s-1}) / D_{s-1}$,且 $1 - \pi_{s-1} = (1-\pi_{-1}) g(w^{s-1}) / D_{s-1}$。 + +因此 + +$$ +h(w_s|\pi_{s-1}) = \frac{\pi_{-1} f(w^{s-1}) f(w_s) + (1 - \pi_{-1}) g(w^{s-1}) g(w_s)}{D_{s-1}} = \frac{D_s}{D_{s-1}} . +$$ + +对 $s = 0, \ldots, t$ 求积,经过套叠消去得到 $D_t / D_{-1} = D_t$。 + +第 2 部分。 + +两种方法都产生对数几率的路径,我们比较对数几率。 + +科尔莫戈罗夫-斯米尔诺夫统计量对将对数几率映射为概率的递增变换是不变的。 + +```{code-cell} ipython3 +@jit +def draw_q_once(π_prior, rng, N, T): + """ + 方法(i)。返回 π_t 的对数几率(第 t+1 列保存 π_t) + 以及每条路径 q = f 的指示变量。 + """ + log_odds = np.empty((N, T+1)) + q_is_f = np.empty(N, dtype=np.bool_) + for n in range(N): + q_is_f[n] = rng.random() < π_prior + log_odds[n, 0] = np.log(π_prior) - np.log(1 - π_prior) + for t in range(T): + if q_is_f[n]: + w = rng.beta(F_a, F_b) + else: + w = rng.beta(G_a, G_b) + log_odds[n, t+1] = update(log_odds[n, t], f(w) / g(w)) + return log_odds, q_is_f + + +@jit +def predictive_sampling(π_prior, rng, N, T): + "方法(ii)。返回 π_t 的对数几率(第 t+1 列保存 π_t)。" + log_odds = np.empty((N, T+1)) + for n in range(N): + log_odds[n, 0] = np.log(π_prior) - np.log(1 - π_prior) + for t in range(T): + π = 1 / (1 + np.exp(-log_odds[n, t])) + if rng.random() < π: + w = rng.beta(F_a, F_b) + else: + w = rng.beta(G_a, G_b) + log_odds[n, t+1] = update(log_odds[n, t], f(w) / g(w)) + return log_odds + + +π_prior, N_ex, T_ex = 0.3, 10_000, 200 +rng_ex = np.random.default_rng(1) +lo_i, q_is_f = draw_q_once(π_prior, rng_ex, N_ex, T_ex) +lo_ii = predictive_sampling(π_prior, rng_ex, N_ex, T_ex) + +for t in [1, 10, 100]: + res = ks_2samp(lo_i[:, t+1], lo_ii[:, t+1]) + print(f"t = {t:3d}: KS statistic = {res.statistic:.4f}, p-value = {res.pvalue:.3f}") +``` + +在 5% 的水平上,检验未能拒绝两种方法产生相同 $\pi_t$ 分布的假设。 + +第 3 部分。 + +```{code-cell} ipython3 +π_T = expit(lo_i[:, -1]) +print(f"fraction of paths with q = f: {q_is_f.mean():.4f}") +print(f"among paths with q = f, fraction with π_{T_ex-1} > 0.99: {np.mean(π_T[q_is_f] > 0.99):.4f}") +print(f"among paths with q = g, fraction with π_{T_ex-1} < 0.01: {np.mean(π_T[~q_is_f] < 0.01):.4f}") +``` + +在方法(i)下,$\pi_t$ 在每条模拟路径上都会发现 $q$,正如杜布定理所断言的那样。 + +```{solution-end} +``` + +```{exercise} +:label: likelihood_bayes_ex2 + +设 $\Delta_t = \pi_t - \pi_{t-1}$,其中 $t \geq 0$。 + +1. 证明 $E[\Delta_t^2 \,|\, w^{t-1}] = \sigma^2(\pi_t|\pi_{t-1})$,且 + +$$ +\sigma^2(\pi_t|\pi_{t-1}) = \pi_{t-1}^2 (1 - \pi_{t-1})^2 \int \frac{(f(w) - g(w))^2}{h(w|\pi_{t-1})} dw . +$$ + +2. 利用鞅性质证明 $E_{-1} \sum_{s=0}^{t} \Delta_s^2 = E_{-1} \pi_t^2 - \pi_{-1}^2$。由此推出 $E_{-1} \sum_{t=0}^{\infty} \Delta_t^2 = E_{-1} \pi_\infty^2 - \pi_{-1}^2 \leq \pi_{-1}(1 - \pi_{-1})$,当 $\pi_\infty \in \{0, 1\}$ 以概率 1 成立时取等号。 + +3. 对 $\pi_{-1} = 0.3$ 和 $\pi_{-1} = 0.5$ 通过模拟验证该等式。 + +4. 利用第 1、2 部分给出 $\pi_\infty \in \{0, 1\}$ 以概率 1 成立的第二种证明。 +``` + +```{solution-start} likelihood_bayes_ex2 +:class: dropdown +``` + +第 1 部分。 + +在给定 $w^{t-1}$ 的条件下,$w_t$ 的密度为 $h(w_t|\pi_{t-1})$,且 $E[\pi_t | w^{t-1}] = \pi_{t-1}$,因此 $E[\Delta_t^2 | w^{t-1}]$ 就是条件方差 $\sigma^2(\pi_t|\pi_{t-1})$。 + +记 $\pi = \pi_{t-1}$。 + +则 $\pi_t - \pi = \pi f / h(w|\pi) - \pi = \pi (1 - \pi)(f - g) / h(w|\pi)$,且 + +$$ +\sigma^2(\pi_t|\pi_{t-1}) = \int \frac{\pi^2 (1-\pi)^2 (f(w) - g(w))^2}{h(w|\pi)^2} h(w|\pi) dw = \pi^2 (1-\pi)^2 \int \frac{(f(w) - g(w))^2}{h(w|\pi)} dw . +$$ + +当 $f \neq g$ 时该积分为正,所以 $\sigma^2$ 在 $(0,1)$ 上为正。 + +一个取值在 $[0,1]$ 中、均值为 $\pi$ 的随机变量,其方差至多为 $\pi(1-\pi)$,所以当 $\pi \rightarrow 0$ 或 $\pi \rightarrow 1$ 时 $\sigma^2 \rightarrow 0$。 + +第 2 部分。 + +由于 $E[\Delta_t | w^{t-1}] = 0$, + +$$ +E_{-1} \pi_t^2 = E_{-1} (\pi_{t-1} + \Delta_t)^2 = E_{-1} \pi_{t-1}^2 + E_{-1} \Delta_t^2 + 2 E_{-1}\bigl[\pi_{t-1} E[\Delta_t | w^{t-1}]\bigr] = E_{-1} \pi_{t-1}^2 + E_{-1} \Delta_t^2 . +$$ + +从 $0$ 到 $t$ 求和得到 $E_{-1} \sum_{s=0}^{t} \Delta_s^2 = E_{-1} \pi_t^2 - \pi_{-1}^2$。 + +令 $t \rightarrow \infty$。 + +左边依单调收敛收敛,右边依有界收敛收敛到 $E_{-1} \pi_\infty^2 - \pi_{-1}^2$。 + +因为 $0 \leq \pi_\infty \leq 1$,所以 $\pi_\infty^2 \leq \pi_\infty$,因此 $E_{-1} \pi_\infty^2 \leq E_{-1} \pi_\infty = \pi_{-1}$。 + +当且仅当 $\pi_\infty^2 = \pi_\infty$ 时等号成立,即 $\pi_\infty \in \{0, 1\}$ 以概率 1 成立。 + +第 3 部分。 + +```{code-cell} ipython3 +for π_prior in [0.3, 0.5]: + π_path_ex, _ = martingale_simulate(π_prior, rng_ex, N=20_000, T=500) + sum_sq = np.sum(np.diff(π_path_ex, axis=1)**2, axis=1) + print(f"π_-1 = {π_prior}: mean of sum of squared increments = {sum_sq.mean():.4f}, " + f"π_-1 (1 - π_-1) = {π_prior * (1 - π_prior):.4f}") +``` + +第 4 部分。 + +由第 1、2 部分可知, + +$$ +E_{-1} \sum_{t=0}^{\infty} \sigma^2(\pi_t|\pi_{t-1}) = E_{-1} \sum_{t=0}^{\infty} \Delta_t^2 \leq \pi_{-1}(1 - \pi_{-1}) < \infty , +$$ + +所以 $\sum_{t} \sigma^2(\pi_t|\pi_{t-1}) < \infty$,且 $\sigma^2(\pi_t|\pi_{t-1}) \rightarrow 0$ 以概率 1 成立。 + +函数 $\pi \mapsto \sigma^2$ 在 $[0,1]$ 上连续,在 $(0,1)$ 上为正,在 $0$ 和 $1$ 处为零。 + +由于 $\pi_t \rightarrow \pi_\infty$,根据连续性,在 $\pi_\infty$ 处取值的 $\sigma^2$ 为零,所以 $\pi_\infty \in \{0, 1\}$。 + +```{solution-end} +``` + +```{exercise} +:label: likelihood_bayes_ex3 + +两位贝叶斯主义者观察到相同的历史 $w^t$,但从不同的先验出发,$\pi^1_{-1} = 0.2$ 和 $\pi^2_{-1} = 0.8$。 + +1. 证明他们对数几率之间的差在每个日期都相同。 + +2. 证明当大自然从 $f$ 中抽取时,$\frac{1}{t+1} \log |\pi^1_t - \pi^2_t|$ 以概率 1 收敛到 $-KL(f, g)$;而当大自然从 $g$ 中抽取时,以概率 1 收敛到 $-KL(g, f)$。 + +3. 通过模拟验证第 2 部分。 + +{doc}`merging_of_opinions` 一般性地研究了不同先验的贝叶斯主义者的意见何时会趋同。 +``` + +```{solution-start} likelihood_bayes_ex3 +:class: dropdown +``` + +第 1 部分。 + +由 {eq}`eq_logodds` 可知,每位贝叶斯主义者在每个日期都对其对数几率加上相同的 $\log \ell(w_{t})$,所以他们对数几率之差 $c$ 等于其初始值 $\log \frac{0.2}{0.8} - \log \frac{0.8}{0.2} = -2 \log 4$。 + +第 2 部分。 + +设 $x_i$ 为贝叶斯主义者 $i$ 的对数几率,使得 $\pi^i_t = 1/(1 + e^{-x_i})$。 + +直接计算得到 + +$$ +\pi^1_t - \pi^2_t = \frac{\sinh(c/2)}{2 \cosh(x_1/2) \cosh(x_2/2)} . +$$ + +由于当 $|x| \rightarrow \infty$ 时 $\log \cosh(x/2) = |x|/2 - \log 2 + o(1)$,且 $x_i = x_i(-1) + \log L(w^t)$, + +$$ +\log |\pi^1_t - \pi^2_t| = - |\log L(w^t)| + O(1) . +$$ + +由强大数定律,$\frac{1}{t+1} \log L(w^t)$ 在 $f$ 下收敛到 $KL(f, g)$,在 $g$ 下收敛到 $-KL(g, f)$。 + +第 3 部分。 + +我们根据第 2 部分中的公式计算 $\log|\pi^1_t - \pi^2_t|$。 + +直接计算 $\pi^1_t - \pi^2_t$ 在两个概率都四舍五入为 $1$ 或 $0$ 后会返回零。 + +```{code-cell} ipython3 +def log_gap(x1, x2): + "log |expit(x1) - expit(x2)|, computed without cancellation." + log_cosh_half = lambda x: np.logaddexp(x / 2, -x / 2) - np.log(2) + c = x1 - x2 + return (np.log(np.abs(np.sinh(c / 2))) - np.log(2) + - log_cosh_half(x1) - log_cosh_half(x2)) + +KL_fg = compute_KL(f, g) +KL_gf = compute_KL(g, f) + +T_m, N_m = 200, 1000 +t_m = np.arange(T_m) +fig, ax = plt.subplots() +for name, (a, b), KL in [('f', (F_a, F_b), KL_fg), ('g', (G_a, G_b), KL_gf)]: + log_L = np.cumsum(np.log(simulate(a, b, rng_ex, T=T_m, N=N_m)), axis=1) + gap = log_gap(logit(0.2) + log_L, logit(0.8) + log_L) + med = np.median(gap, axis=0) + slope = np.polyfit(t_m[50:], med[50:], 1)[0] + ax.plot(t_m, med, lw=2, label=f'nature draws from ${name}$') + print(f"nature draws from {name}: slope of median log gap = {slope:.3f}, " + f"-KL = {-KL:.3f}") + +ax.set_xlabel('$t$') +ax.set_ylabel(r'median of $\log|\pi^1_t - \pi^2_t|$') +ax.legend() +plt.show() +``` + +这些斜率与 $-KL(f, g)$ 和 $-KL(g, f)$ 相匹配。 + +两位贝叶斯主义者的意见以指数速度趋同,当大自然从 $f$ 中抽取时比从 $g$ 中抽取时趋同得更快。 + +```{solution-end} +``` diff --git a/lectures/likelihood_ratio_process.md b/lectures/likelihood_ratio_process.md index f83fa924..261018d2 100644 --- a/lectures/likelihood_ratio_process.md +++ b/lectures/likelihood_ratio_process.md @@ -83,6 +83,7 @@ from math import gamma from scipy.integrate import quad from scipy.optimize import brentq, minimize_scalar from scipy.stats import beta as beta_dist +from scipy.special import betaln, digamma import pandas as pd from IPython.display import display, Math import quantecon as qe @@ -200,7 +201,7 @@ def plot_likelihood_paths(l_seq, title="Likelihood ratio paths", plt.figure(figsize=(10, 6)) for i in range(n_show): - plt.plot(range(T), l_seq[i, :], color='b', lw=0.8, alpha=0.5) + plt.plot(np.arange(1, T+1), l_seq[i, :], color='b', lw=0.8, alpha=0.5) if ylim: plt.ylim(ylim) @@ -223,8 +224,7 @@ plot_likelihood_paths(l_seq_g, ylim=[0, 3]) ``` -显然,随着样本长度 $T$ 的增长,大部分概率质量 -向零靠近 +显然,随着样本长度 $T$ 的增长,大部分概率质量向零靠近。 为了更清楚地看到这一点,我们绘制了随时间变化的 路径 $L\left(w^{t}\right)$ 落在区间 @@ -232,7 +232,8 @@ $\left[0, 0.01\right]$ 内的比例。 ```{code-cell} ipython3 N, T = l_arr_g.shape -plt.plot(range(T), np.sum(l_seq_g <= 0.01, axis=0) / N) +plt.plot(np.arange(1, T+1), np.sum(l_seq_g <= 0.01, axis=0) / N) +plt.xlabel('t') plt.show() ``` @@ -257,7 +258,7 @@ E\left[L\left(w^{1}\right)\bigm|q=g\right] &=E\left[\ell \left(w_{1}\right)\big \end{aligned} $$ -因为$L(w^t) = \ell(w_t) L(w^{t-1})$且$\{w_t\}_{t=1}^t$是独立同分布序列,我们有 +因为$L(w^t) = \ell(w_t) L(w^{t-1})$且$\{w_t\}_{t=1}^\infty$是独立同分布序列,我们有 $$ \begin{aligned} @@ -278,6 +279,18 @@ $$ 答案是,当 $t \rightarrow + \infty$ 时,$L_t$ 的分布变得越来越厚尾:足够多的质量向 $L_t$ 的更大值移动,使得尽管大部分概率质量堆积在 $0$ 附近,$L_t$ 的均值仍然保持为1。 +在 $g$ 下,过程 $\{L_t\}$ 是一个均值为 $1$ 的非负鞅。 + +根据强大数定律,$\frac{1}{t} \log L_t \rightarrow E_g \log \ell(w) = -D_{KL}(g\|f) < 0$ 几乎必然成立,因此 $L_t \rightarrow 0$ 几乎必然成立。 + +因此,对于每个 $t$ 都有 $E[L_t \mid q=g] = 1$,而 $E[\lim_{t \rightarrow \infty} L_t \mid q=g] = 0$。 + +鞅 $\{L_t\}$ 几乎必然收敛,但不依均值收敛,因为它不是一致可积的。 + +{doc}`merging_of_opinions` 研究了这个似然比鞅。 + +该讲座中的角谷定理指出,当 $\int \sqrt{f g} \, dw < 1$ 时,来自 $f$ 和来自 $g$ 的独立同分布序列的无穷分布是互相奇异的,这是另一种表达 $L_t \rightarrow 0$ 在 $g$ 下几乎必然成立的方式。 + 为了说明这个特殊性质,我们模拟多条路径,并通过在每个时刻 $t$ 对这些路径取平均来计算 $L\left(w^t\right)$ 的无条件均值。 ```{code-cell} ipython3 @@ -297,13 +310,15 @@ l_arr_g, l_seq_g = simulate_sequences('g', 在那里我们描述了一种通过从不同的概率分布中采样来计算不同随机变量的均值,从而计算似然比均值的替代方法。 + +(nature_likeli_f)= ## 自然永久从密度f中抽样 -现在假设在时间0之前,自然界永久决定反复从密度f中抽样。 +现在假设在时间0之前,自然界永久决定反复从密度f中抽样。 -虽然似然比$\ell \left(w_{t}\right)$在密度$g$下的均值是1,但在密度$f$下的均值超过1。 +虽然似然比$\ell \left(w_{t}\right)$在密度$g$下的均值是1,但在密度$f$下的均值超过1。 -为了说明这一点,我们计算: +为了说明这一点,我们计算: $$ \begin{aligned} @@ -317,11 +332,23 @@ E\left[\ell \left(w_{t}\right)\bigm|q=f\right] &=\int\frac{f\left(w_{t}\right)} \end{aligned} $$ -这反过来意味着似然比过程$L(w^t)$的无条件均值将趋向于$+ \infty$。 +对于我们例子中的$f$和$g$,$E\left[\ell \left(w_{t}\right)\bigm|q=f\right]$是无穷大。 + +因为$f$是均匀密度,$E\left[\ell \left(w_{t}\right)\bigm|q=f\right] = \int_0^1 1/g(w) \, dw$。 + +当$w \rightarrow 0$时,$g(w)$以$w^{G_a - 1} = w^2$的速度趋于零,因此该积分发散。 + +{ref}`lr_ex_lmean` 表明,当$G_a < 2$且$G_b < 2$时,$E\left[\ell \left(w_{t}\right)\bigm|q=f\right] = B(G_a, G_b) B(2-G_a, 2-G_b)$,其中$B$是贝塔函数,否则该值为无穷大。 + +因为$w_t$是独立同分布的,所以对于每个$t \geq 1$,都有$E\left[L\left(w^{t}\right)\bigm|q=f\right] = +\infty$。 + +因此,随着模拟路径数量的增加,$L\left(w^{t}\right)$在各模拟路径上的样本均值并不会趋于稳定。 -下面的模拟验证了这个结论。 +{doc}`imp_sample` 遇到了与$\ell(w_t)$在$g$下方差无穷大相同的发散积分问题,因为$E\left[\ell \left(w_{t}\right)^2\bigm|q=g\right] = E\left[\ell \left(w_{t}\right)\bigm|q=f\right]$。 -请注意$y$轴的刻度。 +$L\left(w^{t}\right)$的对数则表现良好。 + +在$f$下,$E\left[\log L\left(w^{t}\right)\bigm|q=f\right] = t \, D_{KL}(f\|g)$,并且根据强大数定律,$\frac{1}{t} \log L\left(w^{t}\right) \rightarrow D_{KL}(f\|g) > 0$几乎必然成立,因此$L\left(w^{t}\right) \rightarrow + \infty$几乎必然成立。 ```{code-cell} ipython3 # 模拟当自然从f中抽取时 @@ -329,16 +356,29 @@ l_arr_f, l_seq_f = simulate_sequences('f', f, g, rng, (F_a, F_b), (G_a, G_b), N=50000) ``` +下图绘制了各路径上$\log L\left(w^{t}\right)$的均值和中位数,以及直线$t \, D_{KL}(f\|g)$。 + ```{code-cell} ipython3 N, T = l_arr_f.shape -plt.plot(range(T), np.mean(l_seq_f, axis=0)) +t_grid = np.arange(1, T+1) +KL_fg, _ = quad(lambda w: f(w) * np.log(f(w) / g(w)), 0, 1) +log_l_seq_f = np.log(l_seq_f) + +plt.plot(t_grid, np.mean(log_l_seq_f, axis=0), label=r'mean of $\log L_t$') +plt.plot(t_grid, np.median(log_l_seq_f, axis=0), label=r'median of $\log L_t$') +plt.plot(t_grid, KL_fg * t_grid, 'k--', label=r'$t \, D_{KL}(f\|g)$') +plt.xlabel('t') +plt.legend() plt.show() + +print(f"D_KL(f||g) = {KL_fg:.4f}") ``` -我们还绘制了 $L\left(w^t\right)$ 落入区间 $[10000, \infty)$ 的概率随时间的变化图,观察概率质量向 $+\infty$ 发散的速度。 +我们还绘制了$L\left(w^t\right)$落入区间$[10000, \infty)$的概率随时间的变化图,观察概率质量向$+\infty$发散的速度。 ```{code-cell} ipython3 -plt.plot(range(T), np.sum(l_seq_f > 10000, axis=0) / N) +plt.plot(t_grid, np.sum(l_seq_f > 10000, axis=0) / N) +plt.xlabel('t') plt.show() ``` @@ -364,9 +404,11 @@ Neyman 和 Pearson 证明了检验这个假设的最佳方法是使用**似然 设置 $c=1$ 是一个常见的选择。 +当 $f$ 和 $g$ 具有相同的先验概率时,$c = 1$ 会选择后验概率较大的模型,从而使选错模型的概率最小化。 + 我们将在下面讨论其他 $c$ 值选择的影响。 -这个检验是*最佳的*,因为它是**一致最优检验**。 +这个检验是*最佳的*,因为它是**最优效能的**。 为了理解这一点,我们需要定义两个重要事件的概率,这些概率可以帮助我们描述与给定阈值 $c$ 相关的检验。 @@ -384,19 +426,9 @@ Neyman 和 Pearson 证明了检验这个假设的最佳方法是使用**似然 \beta \equiv \Pr\left\{ L\left(w^{t}\right)>c\mid q=g\right\} $$ -这两个概率是以下两个概念的基础: - -- 虚警概率(=显著性水平=第一类错误概率): - - $$ - \alpha \equiv \Pr\left\{ L\left(w^{t}\right) s$)的实验信息量更大,因为统计学家总是可以丢弃最后 $t-s$ 个观测值。 + +当只有两个假设时,一个实验在布莱克韦尔意义上比另一个实验信息量更大,当且仅当它的接收者操作特征曲线(定义见下文)处处位于另一条曲线之上。 + +{doc}`blackwell_kihlstrom` 描述了布莱克韦尔对实验的排序;其中关于{ref}`贝叶斯似然比学习 `的部分将这一思想应用于本讲座的背景之中。 + 下面我们将绘制一些说明性图表来展示这一点。 我们还将介绍一个用于选择样本量 $t$ 的经典频率派方法。 @@ -442,18 +480,19 @@ def plot_log_histograms(l_seq_f, l_seq_g, c=1, time_points=[1, 7, 14, 21]): axs[nr, nc].axvline(np.log(c), color="k", ls="--") - hist_f, x_f = np.histogram(np.log(l_seq_f[:, t]), 200, density=True) - hist_g, x_g = np.histogram(np.log(l_seq_g[:, t]), 200, density=True) + # l_seq的第t-1列保存L(w^t) + hist_f, x_f = np.histogram(np.log(l_seq_f[:, t-1]), 200, density=True) + hist_g, x_g = np.histogram(np.log(l_seq_g[:, t-1]), 200, density=True) - axs[nr, nc].plot(x_f[1:], hist_f, label="f下的分布") - axs[nr, nc].plot(x_g[1:], hist_g, label="g下的分布") + axs[nr, nc].plot(x_f[1:], hist_f, color="C0", label="f下的分布") + axs[nr, nc].plot(x_g[1:], hist_g, color="C1", label="g下的分布") # 填充错误区域 for j, (x, hist, label) in enumerate( zip([x_f, x_g], [hist_f, hist_g], ["第一类错误", "第二类错误"])): ind = x[1:] <= np.log(c) if j == 0 else x[1:] > np.log(c) - axs[nr, nc].fill_between(x[1:][ind], hist[ind], + axs[nr, nc].fill_between(x[1:][ind], hist[ind], color=f"C{j}", alpha=0.5, label=label) axs[nr, nc].legend() @@ -465,10 +504,10 @@ plot_log_histograms(l_seq_f, l_seq_g, c=c) ``` 在上述图表中, - * 蓝色区域与第一类错误的概率 $\alpha$ 相关但不相等,因为 -它们是在拒绝域 $L_t < 1$ 上 $\log L_t$ 的积分,而不是 $L_t$ 的积分 -* 橙色区域与第二类错误的概率 $\beta$ 相关但不相等,因为 -它们是在接受域 $L_t > 1$ 上 $\log L_t$ 的积分,而不是 $L_t$ 的积分 + * 蓝色区域等于第一类错误的概率 $\alpha$(在直方图分箱的精度范围内) + * 橙色区域等于第二类错误的概率 $\beta$(在直方图分箱的精度范围内) + +由于对数是单调的,事件 $\{L_t < 1\}$ 就是事件 $\{\log L_t < 0\}$,因此 $\log L_t$ 的密度曲线在 $0$ 左侧的面积就是 $\Pr\{L_t < 1\}$。 当我们将 $c$ 固定在 $c=1$ 时,下图显示: * 检测概率随着 $t$ 的增加单调增加 @@ -500,9 +539,10 @@ def compute_error_probabilities(l_seq_f, l_seq_g, c=1): def plot_error_probabilities(error_dict, T, c=1, title_suffix=""): """绘制随时间变化的错误概率。""" + t_grid = np.arange(1, T+1) plt.figure(figsize=(10, 6)) - plt.plot(range(T), error_dict['PD'], label="检测概率") - plt.plot(range(T), error_dict['PFA'], label="虚警概率") + plt.plot(t_grid, error_dict['PD'], label="检测概率") + plt.plot(t_grid, error_dict['PFA'], label="虚警概率") plt.xlabel("t") plt.ylabel("概率") plt.title(f"错误概率 (c={c}){title_suffix}") @@ -532,8 +572,9 @@ def plot_roc_curves(l_seq_f, l_seq_g, t_values=[1, 5, 9, 13], N=None): plt.figure(figsize=(10, 6)) for t in t_values: - percentile = np.percentile(l_seq_f[:, t], PFA) - PD = [np.sum(l_seq_g[:, t] < p) / N for p in percentile] + # l_seq的第t-1列保存L(w^t) + percentile = np.percentile(l_seq_f[:, t-1], PFA) + PD = [np.sum(l_seq_g[:, t-1] < p) / N for p in percentile] plt.plot(PFA / 100, PD, label=f"t={t}") plt.scatter(0, 1, label="完美检测") @@ -583,7 +624,8 @@ for t in range(T): c = np.percentile(l_seq_f[:, t], PFA * 100) PD[t] = np.sum(l_seq_g[:, t] < c) / N -plt.plot(range(T), PD) +# PD[t]对应的样本量为t+1 +plt.plot(np.arange(1, T+1), PD) plt.axhline(0.9, color="k", ls="--") plt.xlabel("t") @@ -596,6 +638,8 @@ plt.show() 一位被命令执行此类测试的海军上校对此产生了疑虑,他向米尔顿·弗里德曼提出了这些疑虑,我们在 {doc}`这篇讲座 ` 中对此进行了描述。 +{doc}`wald_friedman_2` 将这位上校的问题表述为一个贝叶斯序贯决策问题,而 {doc}`navy_captain` 比较了海军的频率派规则与贝叶斯决策规则。 + (llr_h)= ### 第三个分布 $h$ @@ -627,23 +671,21 @@ K_{g} = D_{KL}\bigl(h\|g\bigr) = KL(h, g) \end{aligned} $$ -让我们使用 {doc}`divergence_measures` 中的相同代码来计算库尔贝克-莱布勒差异。 +让我们使用 {doc}`divergence_measures` 中 Beta 密度函数的闭式解来计算库尔贝克-莱布勒差异。 ```{code-cell} ipython3 -def compute_KL(f, g): - """ - 计算KL散度 KL(f, g) - """ - integrand = lambda w: f(w) * np.log(f(w) / g(w)) - val, _ = quad(integrand, 1e-5, 1-1e-5) - return val +def KL_beta(a1, b1, a2, b2): + """以闭式计算 KL(Beta(a1, b1) ‖ Beta(a2, b2))。""" + return (betaln(a2, b2) - betaln(a1, b1) + + (a1 - a2) * digamma(a1) + (b1 - b2) * digamma(b1) + + (a2 - a1 + b2 - b1) * digamma(a1 + b1)) -def compute_KL_h(h, f, g): +def compute_KL_h(h_params, F_params=(F_a, F_b), G_params=(G_a, G_b)): """ - 计算相对于参考分布h的KL散度 + 计算 Beta 密度函数 h、f、g 的 K_f = KL(h, f) 和 K_g = KL(h, g) """ - Kf = compute_KL(h, f) - Kg = compute_KL(h, g) + Kf = KL_beta(*h_params, *F_params) + Kg = KL_beta(*h_params, *G_params) return Kf, Kg ``` @@ -678,7 +720,9 @@ def compute_likelihood_ratios(sequences, f, g): return l_ratios, L_cumulative ``` -我们考虑三种情况:(1) $h$ 更接近 $f$,(2) $f$ 和 $g$ 与 $h$ 的距离大致相等,以及 (3) $h$ 更接近 $g$。 +我们考虑三种情况:(1) $h$ 更接近 $f$,(2) $f$ 和 $g$ 与 $h$ 的距离相等,以及 (3) $h$ 更接近 $g$。 + +在情况 (2) 中,我们设定 $h = \text{Beta}(2.1035, 1.35)$,此时 $K_f$ 和 $K_g$ 在小数点后四位上一致。 ```{code-cell} ipython3 :tags: [hide-input] @@ -691,9 +735,9 @@ scenarios = [ "expected": r"$L_t \to \infty$" }, { - "name": "KL(h,g) ≈ KL(h,f)", - "h_params": (2, 1.35), - "expected": "$L_t$ fluctuates" + "name": "KL(h,g) = KL(h,f)", + "h_params": (2.1035, 1.35), + "expected": r"$\log L_t$ has no drift" }, { "name": "KL(h,g) < KL(h,f)", @@ -710,12 +754,13 @@ for i, scenario in enumerate(scenarios): scenario["h_params"][1]) # Compute KL divergences - Kf, Kg = compute_KL_h(h, f, g) + Kf, Kg = compute_KL_h(scenario["h_params"]) kl_diff = Kg - Kf # Simulate paths N_paths = 100 T = 150 + t_grid = np.arange(1, T+1) # Generate data from h h_data = rng.beta(scenario["h_params"][0], @@ -740,14 +785,15 @@ for i, scenario in enumerate(scenarios): # Plot log likelihood ratio paths ax = axes[1, i] for j in range(min(20, N_paths)): - ax.plot(log_l_cumulative[j, :], alpha=0.3, color='purple') + ax.plot(t_grid, log_l_cumulative[j, :], alpha=0.3, color='purple') # Plot theoretical expectation - theory_line = kl_diff * np.arange(1, T+1) - ax.plot(theory_line, 'k--', linewidth=2, label=r'$t \times (K_g - K_f)$') + theory_line = kl_diff * t_grid + ax.plot(t_grid, theory_line, 'k--', linewidth=2, + label=r'$t \times (K_g - K_f)$') ax.set_xlabel('t') - ax.set_ylabel('$log L_t$') + ax.set_ylabel(r'$\log L_t$') ax.set_title(f'KL(h,f)={Kf:.3f}, KL(h,g)={Kg:.3f}\n{scenario["expected"]}', fontsize=16) ax.legend(fontsize=16) @@ -759,9 +805,9 @@ plt.show() 请注意 - 在第一张图中,由于 $K_g > K_f$,$\log L(w^t)$ 发散到 $\infty$。 -- 在第二张图中,虽然仍然有 $K_g > K_f$,但差值较小,所以 $L(w^t)$ 发散到无穷的速度较慢。 +- 在第二张图中,$K_g = K_f$,所以 $\log L(w^t)$ 是一个均值为零、增量独立同分布的随机游走;其路径会向两个方向偏离零点,散布程度按 $\sqrt{t}$ 的速度增长。 - 在最后一张图中,由于 $K_g < K_f$,$\log L(w^t)$ 发散到 $-\infty$。 -- 黑色虚线 $t \left(D_{KL}(h\|g) - D_{KL}(h\|f)\right)$ 与验证 {eq}`eq:kl_likelihood_link` 的路径紧密吻合。 +- 黑色虚线 $t \left(D_{KL}(h\|g) - D_{KL}(h\|f)\right)$ 穿过路径的中心,正如 {eq}`eq:kl_likelihood_link` 所预测的那样。 这些观察结果与理论相符。 @@ -797,7 +843,7 @@ $$ **时序协议1:** 自然只在 $t=-1$ 时刻**一次性**掷硬币,以概率 $\pi_{-1}$ 从 $f$ 生成一个 IID 序列 $\{w_t\}_{t=1}^T$,以概率 $1-\pi_{-1}$ 从 $g$ 生成一个 IID 序列 $\{w_t\}_{t=1}^T$。 -**时序协议2:** 自然**频繁**掷硬币。在每个时刻 $t \geq 0$,自然掷一次硬币,以概率 $\pi_{-1}$ 从 $f$ 中抽取 $w_t$,以概率 $1-\pi_{-1}$ 从 $g$ 中抽取 $w_t$。 +**时序协议2:** 自然**频繁**掷硬币。在每个时刻 $t \geq 1$,自然掷一次硬币,以概率 $\pi_{-1}$ 从 $f$ 中抽取 $w_t$,以概率 $1-\pi_{-1}$ 从 $g$ 中抽取 $w_t$。 以下是我们用来实现时序协议1和2的Python代码 @@ -847,6 +893,10 @@ def protocol_2(π_minus_1, T, rng, N=1000, F_params=(1, 1), G_params=(3, 1.2)): **注释:** 在时序协议2下,$\{w_t\}_{t=1}^T$ 是从 $h(w)$ 中独立同分布(IID)抽取的序列。在时序协议1下,$\{w_t\}_{t=1}^T$ 不是独立同分布的。它是**条件独立同分布**的 -- 意味着以概率 $\pi_{-1}$ 它是从 $f(w)$ 中独立同分布抽取的序列,以概率 $1-\pi_{-1}$ 它是从 $g(w)$ 中独立同分布抽取的序列。关于这一点的更多信息,请参见 {doc}`这篇关于可交换性的讲座 `。 +{doc}`likelihood_bayes` 研究了一位知道数据由时序协议1支配并了解自然选择了哪种密度的贝叶斯学习者。 + +{doc}`mix_model` 研究了一位错误地相信时序协议1、而数据实际上由时序协议2生成的贝叶斯学习者。 + 我们再次部署一个**似然比过程**,其时间 $t$ 分量是似然比 $$ @@ -861,6 +911,7 @@ $$ 为简便起见,我们将写作 $L_t = L(w^t)$。 +(lrp_model_selection)= ### 模型选择错误概率 我们首先研究假设时序协议1的问题。 @@ -883,7 +934,7 @@ $$ p_g = {\rm Prob}\left(L_T \geq 1 \Big|g \right) = \beta_T. $$ -我们可以通过赋予自然选择模型 $f$ 的贝叶斯先验概率 $\pi_{-1} = .5$,然后对 $p_f$ 和 $p_g$ 取平均值来构造似然比选择错误模型的概率,从而得到检测错误的贝叶斯后验概率等于 +我们可以通过赋予自然选择模型 $f$ 的贝叶斯先验概率 $\pi_{-1} = .5$,然后对 $p_f$ 和 $p_g$ 取平均值来构造似然比选择错误模型的概率,从而得到检测错误的先验(事前)概率等于 $$ p(\textrm{wrong decision}) = {1 \over 2} (\alpha_T + \beta_T) . @@ -985,8 +1036,8 @@ result_p1 = analyze_protocol_1(π_minus_1, T_max, N_simulations, $$ \begin{aligned} -w_t & \ {\rm 来自 \ } f \ {\rm 如果 \ } l_t > 1 \\ -w_t & \ {\rm 来自 \ } g \ {\rm 如果 \ } l_t \leq 1 . +w_t & \ {\rm 来自 \ } f \ {\rm 如果 \ } l_t \geq 1 \\ +w_t & \ {\rm 来自 \ } g \ {\rm 如果 \ } l_t < 1 . \end{aligned} $$ @@ -1030,9 +1081,17 @@ def compute_protocol_2_errors(π_minus_1, T_max, N_simulations, f_func, g_func, 由于对于每个 $t$,决策边界都是相同的,因此可以通过以下方式计算决策边界 ```{code-cell} ipython3 -root = brentq(lambda w: f(w) / g(w) - 1, 0.001, 0.999) +root = brentq(lambda w: f(w) / g(w) - 1, 0.001, 0.99) +root_2 = brentq(lambda w: f(w) / g(w) - 1, 0.99, 1 - 1e-12) +print(f"f/g = 1 at w = {root:.4f} and at w = {root_2:.5f}") ``` +似然比 $f/g$ 在两个点上等于 $1$,这是因为 $g$ 在 $(0,1)$ 的两端都趋于零。 + +该规则将 $w_t$ 落在两个根之间时归类为来自 $g$,否则归类为来自 $f$。 + +第二个根非常靠近 $1$,以至于其右侧的区间在 $f$ 和 $g$ 下的概率都低于 $0.001$。 + 我们可以绘制$f$和$g$的分布以及决策边界 ```{code-cell} ipython3 @@ -1050,17 +1109,17 @@ ax.plot(w_range, f_values, 'b-', ax.plot(w_range, g_values, 'r-', label=r'$g(w) \sim Beta(3,1.2)$', linewidth=2) -type1_prob = 1 - beta_dist.cdf(root, F_a, F_b) -type2_prob = beta_dist.cdf(root, G_a, G_b) +# P(将f分类为g) 和 P(将g分类为f) +type1_prob = beta_dist.cdf(root_2, F_a, F_b) - beta_dist.cdf(root, F_a, F_b) +type2_prob = beta_dist.cdf(root, G_a, G_b) + beta_dist.sf(root_2, G_a, G_b) -w_type1 = w_range[w_range >= root] -f_type1 = [f(w) for w in w_type1] -ax.fill_between(w_type1, 0, f_type1, alpha=0.3, color='blue', +in_g_region = (w_range > root) & (w_range < root_2) +f_type1 = [f(w) if inside else 0 for w, inside in zip(w_range, in_g_region)] +ax.fill_between(w_range, 0, f_type1, alpha=0.3, color='blue', label=fr'$\tilde \alpha_t = {type1_prob:.2f}$') -w_type2 = w_range[w_range <= root] -g_type2 = [g(w) for w in w_type2] -ax.fill_between(w_type2, 0, g_type2, alpha=0.3, color='red', +g_type2 = [0 if inside else g(w) for w, inside in zip(w_range, in_g_region)] +ax.fill_between(w_range, 0, g_type2, alpha=0.3, color='red', label=fr'$\tilde \beta_t = {type2_prob:.2f}$') ax.axvline(root, color='green', linestyle='--', alpha=0.7, @@ -1076,27 +1135,20 @@ plt.show() 在绿色垂直线的左侧,$g < f$,所以 $l_t > 1$;因此,落在绿线左侧的 $w_t$ 被归类为 $f$ 类型个体。 - * 红色阴影区域等于 $\beta$ -- 将实际为 $f$ 类型的个体错误分类为 $g$ 类型的概率。 + * 红色阴影区域等于 $\tilde \beta_t$ -- 将实际为 $g$ 类型的个体错误分类为 $f$ 类型的概率。 -在绿色垂直线的右侧,$g > f$,所以 $l_t < 1$;因此,落在绿线右侧的 $w_t$ 被归类为 $g$ 类型个体。 +在绿色垂直线右侧、第二个根 $w = 0.99925$ 左侧的区间内,$g > f$,所以 $l_t < 1$;因此,落在这个区间内的 $w_t$ 被归类为 $g$ 类型个体。 - * 蓝色阴影区域等于 $\alpha$ -- 将实际为 $g$ 类型的个体错误分类为 $f$ 类型的概率。 + * 蓝色阴影区域等于 $\tilde \alpha_t$ -- 将实际为 $f$ 类型的个体错误分类为 $g$ 类型的概率。 这给了我们计算理论分类错误概率的线索 ```{code-cell} ipython3 -# 计算理论 tilde α_t 和 tilde β_t -def α_integrand(w): - """用于计算 tilde α_t = P(l_t < 1 | f) 的积分""" - return f(w) if f(w) / g(w) < 1 else 0 - -def β_integrand(w): - """用于计算 tilde β_t = P(l_t >= 1 | g) 的积分""" - return g(w) if f(w) / g(w) >= 1 else 0 +# tilde α_t = P(l_t < 1 | f) = P(root < w < root_2 | f) +α_theory = beta_dist.cdf(root_2, F_a, F_b) - beta_dist.cdf(root, F_a, F_b) -# 计算积分 -α_theory, _ = quad(α_integrand, 0, 1, limit=100) -β_theory, _ = quad(β_integrand, 0, 1, limit=100) +# tilde β_t = P(l_t >= 1 | g) = P(w <= root or w >= root_2 | g) +β_theory = beta_dist.cdf(root, G_a, G_b) + beta_dist.sf(root_2, G_a, G_b) theory_error = 0.5 * (α_theory + β_theory) @@ -1169,6 +1221,7 @@ compare_protocols(result_p1, result_p2) **注意:**思考一下大数定律是如何应用于计算模型选择问题和分类问题的误差概率的。 +(lrp_chernoff)= ### 误差概率和散度度量 一个合理的猜测是,似然比区分分布$f$和$g$的能力取决于它们有多"不同"。 @@ -1180,100 +1233,130 @@ compare_protocols(result_p1, result_p2) 回顾一下,概率密度$f$和$g$之间的Chernoff熵定义为: $$ -C(f,g) = - \log \min_{\phi \in (0,1)} \int f^\phi(x) g^{1-\phi}(x) dx +C(f,g) = - \log \min_{\phi \in (0,1)} \rho(\phi), \qquad \rho(\phi) = \int f^\phi(x) g^{1-\phi}(x) dx $$ -模型选择误差概率的上界是 +设 $f_T(w^T) = \prod_{t=1}^T f(w_t)$ 和 $g_T(w^T) = \prod_{t=1}^T g(w_t)$ 为两个模型下 $w^T$ 的联合密度。 + +似然比检验在 $f_T \geq g_T$ 时选择 $f$,在 $f_T < g_T$ 时选择 $g$。 + +因此,其模型选择错误概率 {eq}`eq:detectionerrorprob` 为 $$ -e^{-C(f,g)T} . +\frac{1}{2} (\alpha_T + \beta_T) += \frac{1}{2} \int_{f_T < g_T} f_T \, dw^T + \frac{1}{2} \int_{f_T \geq g_T} g_T \, dw^T += \frac{1}{2} \int \min\{f_T, g_T\} \, dw^T . $$ -让我们用Python代码来数值计算Chernoff熵 +对于 $x, y \geq 0$ 和 $\phi \in [0,1]$,有 $\min\{x, y\} \leq x^\phi y^{1-\phi}$。 -```{code-cell} ipython3 -def chernoff_integrand(ϕ, f, g): - """ - 计算Chernoff熵的被积函数 - """ - def integrand(w): - return f(w)**ϕ * g(w)**(1-ϕ) - - result, _ = quad(integrand, 1e-5, 1-1e-5) - return result +由于 $w_t$ 是独立同分布的, -def compute_chernoff_entropy(f, g): - """ - 计算Chernoff熵C(f,g) - """ - def objective(ϕ): - return chernoff_integrand(ϕ, f, g) - - # 在(0,1)区间内找到最小值 - result = minimize_scalar(objective, - bounds=(1e-5, 1-1e-5), - method='bounded') - min_value = result.fun - ϕ_optimal = result.x - - chernoff_entropy = -np.log(min_value) - return chernoff_entropy, ϕ_optimal -C_fg, ϕ_optimal = compute_chernoff_entropy(f, g) +$$ +\frac{1}{2} (\alpha_T + \beta_T) \leq \frac{1}{2} \int f_T^\phi \, g_T^{1-\phi} \, dw^T = \frac{1}{2} \rho(\phi)^T +$$ + +对每个 $\phi \in [0,1]$ 都成立。 + +对右侧关于 $\phi$ 取最小值,可得模型选择错误概率的上界: + +$$ +\frac{1}{2} (\alpha_T + \beta_T) \leq \frac{1}{2} e^{-C(f,g)T} . +$$ (eq:chernoff_bound) + +更弱的界 $e^{-C(f,g)T}$ 也成立。 + +{cite:t}`chernoff1952` 证明了界 {eq}`eq:chernoff_bound` 给出了正确的指数速率: + +$$ +-\frac{1}{T} \log \frac{1}{2} (\alpha_T + \beta_T) \rightarrow C(f,g) . +$$ + +逼近这一极限的速度较慢,因为错误概率中含有一个在 $T$ 中以多项式速率衰减的因子,而该界并未考虑这个因子。 + +对于Beta密度,Chernoff系数 $\rho(\phi)$ 具有闭式表达式,我们在 {doc}`divergence_measures` 中推导过。 + +让我们用Python代码来计算Chernoff熵 + +```{code-cell} ipython3 +def log_chernoff_coef_beta(ϕ, a1, b1, a2, b2): + """Beta(a1, b1)和Beta(a2, b2)的闭式log ρ(ϕ)。""" + return (betaln(ϕ * a1 + (1 - ϕ) * a2, ϕ * b1 + (1 - ϕ) * b2) + - ϕ * betaln(a1, b1) - (1 - ϕ) * betaln(a2, b2)) + +def chernoff_beta(a1, b1, a2, b2): + """两个Beta密度的Chernoff熵C(f, g)及最小化的ϕ。""" + res = minimize_scalar(log_chernoff_coef_beta, bounds=(0, 1), + args=(a1, b1, a2, b2), method='bounded') + return -res.fun, res.x + +C_fg, ϕ_optimal = chernoff_beta(F_a, F_b, G_a, G_b) print(f"Chernoff熵C(f,g) = {C_fg:.4f}") print(f"最优ϕ = {ϕ_optimal:.4f}") ``` -现在让我们来研究 $e^{-C(f,g)T}$ 作为 $T$ 的函数时的表现,并将其与模型选择错误概率进行比较 +现在让我们将时序协议1下模拟得到的模型选择错误概率与界 $\frac{1}{2} e^{-C(f,g)T}$ 和 $e^{-C(f,g)T}$ 进行比较。 + +右边的图绘制了模拟错误概率的 $-\frac{1}{T} \log$ 随 $T$ 的变化。 ```{code-cell} ipython3 T_range = np.arange(1, T_max+1) -chernoff_bound = np.exp(-C_fg * T_range) - -# 绘制比较图 -fig, ax = plt.subplots(figsize=(10, 6)) +chernoff_bound = 0.5 * np.exp(-C_fg * T_range) + +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5)) + +ax1.semilogy(T_range, 2 * chernoff_bound, 'r--', linewidth=2, + label=f'$e^{{-C(f,g)T}}$') +ax1.semilogy(T_range, chernoff_bound, 'r-', linewidth=2, + label=r'$\frac{1}{2} e^{-C(f,g)T}$') +ax1.semilogy(T_range, result_p1['error_prob'], 'b-', linewidth=2, + label='模型选择错误概率') +ax1.set_xlabel('T') +ax1.set_ylabel('错误概率(对数刻度)') +ax1.legend() + +ax2.plot(T_range, -np.log(result_p1['error_prob']) / T_range, 'b-', + linewidth=2, label=r'$-\frac{1}{T}\log \frac{1}{2}(\alpha_T + \beta_T)$') +ax2.axhline(C_fg, color='r', linestyle='-', linewidth=2, label='$C(f,g)$') +ax2.set_xlabel('T') +ax2.set_ylim(0, None) +ax2.legend() -ax.semilogy(T_range, chernoff_bound, 'r-', linewidth=2, - label=f'$e^{{-C(f,g)T}}$') -ax.semilogy(T_range, result_p1['error_prob'], 'b-', linewidth=2, - label='模型选择错误概率') - -ax.set_xlabel('T') -ax.set_ylabel('错误概率(对数刻度)') -ax.legend() plt.tight_layout() plt.show() ``` -显然,$e^{-C(f,g)T}$是误差率的上界。 +模拟的错误概率低于 $\frac{1}{2} e^{-C(f,g)T}$,这符合 {eq}`eq:chernoff_bound` 的要求。 + +它的负对数除以 $T$ 会缓慢地趋近于 $C(f,g)$。 在 {doc}`divergence_measures` 中,我们还研究了**Jensen-Shannon散度**作为分布之间的对称距离度量。 我们可以使用Jensen-Shannon散度来测量分布$f$和$g$之间的距离,并计算它与模型选择错误概率的协方差。 -我们还可以通过一些Python代码来数值计算Jensen-Shannon散度 +我们还可以通过一些Python代码来数值计算Jensen-Shannon散度。 + +我们在 $(0,1)$ 的整个区间上积分,并在 $1/2$ 处将区间分开,因为U形的Beta密度在端点处会发散。 ```{code-cell} ipython3 def compute_JS(f, g): """ 计算Jensen-Shannon散度 """ - def m(w): - return 0.5 * (f(w) + g(w)) + def integrand(w): + fw, gw = f(w), g(w) + mw = 0.5 * (fw + gw) + return 0.5 * fw * np.log(fw / mw) + 0.5 * gw * np.log(gw / mw) - js_div = 0.5 * compute_KL(f, m) + 0.5 * compute_KL(g, m) - return js_div + left, _ = quad(integrand, 0, 0.5, limit=200) + right, _ = quad(integrand, 0.5, 1, limit=200) + return left + right ``` 现在让我们回到我们的猜想,即在大样本量情况下的错误概率与两个分布之间的Chernoff熵有关。 我们通过计算时序协议1下$T=50$时错误概率的对数与散度度量之间的相关性来验证这一点。 -在下面的模拟中,自然界从$g$中抽取$N/2$个序列,从$f$中抽取$N/2$个序列。 - -```{note} -自然界采用这种方式,而不是在每次长度为$T$的模拟之前抛一次公平硬币来决定是从$g$还是$f$中抽取。 -``` - 我们使用以下Beta分布对作为$f$和$g$的测试用例 ```{code-cell} ipython3 @@ -1296,13 +1379,73 @@ distribution_pairs = [ ] ``` -现在让我们运行模拟 +对于差异最明显的一对分布,Chernoff界 {eq}`eq:chernoff_bound` 将 $T = 50$ 时的错误概率限制在 $\frac{1}{2} e^{-0.443 \times 50} \approx 1.2 \times 10^{-10}$ 以下。 + +对这类分布对,从$f$和$g$各模拟几千条序列通常根本不会记录到任何错误。 + +我们改用重要性抽样来计算错误概率,这是 {doc}`imp_sample` 介绍的一种技术。 + +我们从**倾斜密度**中抽取 $w^T$ + +$$ +q(w) = \frac{f(w)^{\phi^*} g(w)^{1-\phi^*}}{\rho(\phi^*)} , +$$ + +其中 $\phi^*$ 是 $C(f,g)$ 定义中取得最小值的点。 + +对于Beta密度 $f$ 和 $g$,$q$ 同样是Beta密度,如 {doc}`divergence_measures` 所示。 + +由于 $f/q = \rho(\phi^*)\, \ell^{1-\phi^*}$ 和 $g/q = \rho(\phi^*)\, \ell^{-\phi^*}$, + +$$ +\frac{1}{2} (\alpha_T + \beta_T) += \frac{1}{2} \int \min\left\{\frac{f_T}{q_T}, \frac{g_T}{q_T}\right\} q_T \, dw^T += \frac{1}{2} e^{-C(f,g)T} \, E_q\left[\min\left\{L_T^{1-\phi^*}, L_T^{-\phi^*}\right\}\right] , +$$ + +其中 $q_T(w^T) = \prod_{t=1}^T q(w_t)$。 + +期望内部的随机变量位于 $0$ 和 $1$ 之间。 + +这一事实再次给出了界 {eq}`eq:chernoff_bound`,并使得 $\min\{L_T^{1-\phi^*}, L_T^{-\phi^*}\}$ 的样本均值具有较小的方差。 + +```{code-cell} ipython3 +def log_beta_pdf(w, a, b): + """Beta(a, b)的对数密度。""" + return (a - 1) * np.log(w) + (b - 1) * np.log1p(-w) - betaln(a, b) + +def error_prob_tilted(f_params, g_params, T, N, rng): + """ + 通过从Chernoff倾斜密度中进行重要性抽样, + 计算模型选择错误概率 (α_T + β_T) / 2。 + """ + (f_a, f_b), (g_a, g_b) = f_params, g_params + C, ϕ = chernoff_beta(f_a, f_b, g_a, g_b) + q_a, q_b = ϕ * f_a + (1 - ϕ) * g_a, ϕ * f_b + (1 - ϕ) * g_b + + # 使抽取值远离边界,因为在边界处对数密度为无穷大 + w = np.clip(rng.beta(q_a, q_b, (N, T)), 1e-300, 1 - 1e-16) + log_L = np.sum(log_beta_pdf(w, f_a, f_b) + - log_beta_pdf(w, g_a, g_b), axis=1) + weights = np.exp(np.minimum((1 - ϕ) * log_L, -ϕ * log_L)) + return 0.5 * np.exp(-C * T) * np.mean(weights) +``` + +作为检验,我们将重要性抽样估计器应用于我们的 $f$ 和 $g$(在 $T = 30$ 时),并将其与上面时序协议1的模拟结果进行比较。 + +```{code-cell} ipython3 +is_estimate = error_prob_tilted((F_a, F_b), (G_a, G_b), T_max, 5000, rng) +print(f"在T={T_max}时的重要性抽样估计值: {is_estimate:.5f}") +print(f"在T={T_max}时模拟的协议1误差: " + f"{result_p1['error_prob'][-1]:.5f}") +``` + +现在我们计算每一对分布在 $T = 50$ 时的散度度量和错误概率 ```{code-cell} ipython3 # 模拟参数 T_large = 50 N_sims = 5000 -N_half = N_sims // 2 # 初始化数组 n_pairs = len(distribution_pairs) @@ -1315,30 +1458,18 @@ pair_names = [] for i, ((f_a, f_b), (g_a, g_b)) in enumerate(distribution_pairs): # 创建密度函数 - f = jit(lambda x, a=f_a, b=f_b: p(x, a, b)) - g = jit(lambda x, a=g_a, b=g_b: p(x, a, b)) + f_pair = jit(lambda x, a=f_a, b=f_b: p(x, a, b)) + g_pair = jit(lambda x, a=g_a, b=g_b: p(x, a, b)) # 计算散度度量 - kl_fg_vals[i] = compute_KL(f, g) - kl_gf_vals[i] = compute_KL(g, f) - js_vals[i] = compute_JS(f, g) - chernoff_vals[i], _ = compute_chernoff_entropy(f, g) - - # 生成样本 - sequences_f = rng.beta(f_a, f_b, (N_half, T_large)) - sequences_g = rng.beta(g_a, g_b, (N_half, T_large)) - - # 计算似然比和累积乘积 - _, L_cumulative_f = compute_likelihood_ratios(sequences_f, f, g) - _, L_cumulative_g = compute_likelihood_ratios(sequences_g, f, g) - - # 获取最终值 - L_cumulative_f = L_cumulative_f[:, -1] - L_cumulative_g = L_cumulative_g[:, -1] - - # 计算错误概率 - error_probs[i] = 0.5 * (np.mean(L_cumulative_f < 1) + - np.mean(L_cumulative_g >= 1)) + kl_fg_vals[i] = KL_beta(f_a, f_b, g_a, g_b) + kl_gf_vals[i] = KL_beta(g_a, g_b, f_a, f_b) + js_vals[i] = compute_JS(f_pair, g_pair) + chernoff_vals[i], _ = chernoff_beta(f_a, f_b, g_a, g_b) + + # 通过重要性抽样计算错误概率 + error_probs[i] = error_prob_tilted((f_a, f_b), (g_a, g_b), + T_large, N_sims, rng) pair_names.append(f"Beta({f_a},{f_b}) and Beta({g_a},{g_b})") cor_data = { @@ -1351,7 +1482,9 @@ cor_data = { 'T': T_large} ``` -现在让我们来可视化这些相关性 +现在让我们来可视化这些相关性。 + +左边的图绘制了对数误差概率与 $-C(f,g)T$ 的关系,并附有Chernoff界 $\log \frac{1}{2} - C(f,g)T$。 ```{code-cell} ipython3 :tags: [hide-input] @@ -1360,11 +1493,10 @@ def plot_error_divergence(data): """ 绘制误差概率和散度测量之间的相关性。 """ - # 过滤掉接近零的误差概率以适应对数刻度 - nonzero_mask = data['error_prob'] > 1e-6 - log_error = np.log(data['error_prob'][nonzero_mask]) - js_vals = data['js'][nonzero_mask] - chernoff_vals = data['chernoff'][nonzero_mask] + T = data['T'] + log_error = np.log(data['error_prob']) + neg_CT = -data['chernoff'] * T + js_vals = data['js'] # 创建图形和坐标轴 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5)) @@ -1373,20 +1505,24 @@ def plot_error_divergence(data): def plot_correlation(ax, x_vals, x_label, color): ax.scatter(x_vals, log_error, alpha=0.7, s=60, color=color) ax.set_xlabel(x_label) - ax.set_ylabel(f'T={data["T"]}时的对数误差概率') + ax.set_ylabel(f'T={T}时的对数误差概率') - # 计算相关性和趋势线 + # 计算相关性和线性趋势线 corr = np.corrcoef(x_vals, log_error)[0, 1] - z = np.polyfit(x_vals, log_error, 2) + z = np.polyfit(x_vals, log_error, 1) x_trend = np.linspace(x_vals.min(), x_vals.max(), 100) ax.plot(x_trend, np.poly1d(z)(x_trend), - "r--", alpha=0.8, linewidth=2) + "r--", alpha=0.8, linewidth=2, label='线性拟合') ax.set_title(f'对数误差概率与{x_label}的关系\n' f'相关性 = {corr:.3f}') # 绘制两个相关性图 - plot_correlation(ax1, js_vals, 'JS散度', 'C0') - plot_correlation(ax2, chernoff_vals, 'Chernoff熵', 'C1') + plot_correlation(ax1, neg_CT, r'$-C(f,g) \, T$', 'C1') + x_line = np.linspace(neg_CT.min(), neg_CT.max(), 100) + ax1.plot(x_line, np.log(0.5) + x_line, 'k-', linewidth=1, + label=r'Chernoff界 $\log \frac{1}{2} - C(f,g)T$') + ax1.legend() + plot_correlation(ax2, js_vals, 'JS散度', 'C0') plt.tight_layout() plt.show() @@ -1394,7 +1530,11 @@ def plot_error_divergence(data): plot_error_divergence(cor_data) ``` -显然,Chernoff熵和Jensen-Shannon熵都与模型选择错误概率密切相关。 +所有十四个点都位于Chernoff界之下。 + +显然,Chernoff熵和Jensen-Shannon散度都与模型选择错误概率密切相关。 + +这些点与Chernoff界之间的垂直距离是 $E_q\left[\min\left\{L_T^{1-\phi^*}, L_T^{-\phi^*}\right\}\right]$ 的对数,这个量在各个分布对之间的变化远小于 $C(f,g) T$ 的变化。 我们很快将在 {doc}`wald_friedman` 中遇到相关概念。 @@ -1431,7 +1571,7 @@ $$ (eq:llr_markov) ### KL散度率 -根据不可约非周期马尔可夫链的遍历定理,我们有 +根据不可约马尔可夫链的遍历定理,我们有 $$ \frac{N_{ij}}{T} \xrightarrow{a.s.} \pi_i^{(f)}P_{ij}^{(f)} \quad \text{当 } T \to \infty @@ -1471,6 +1611,8 @@ $$ 在这里我们邀请读者停下来比较这个结果与{eq}`eq:kl_likelihood_link`。 +{doc}`likelihood_var` 将这些计算扩展到了向量自回归模型。 + 让我们在下面的模拟中验证这一点。 ### 模拟 @@ -1561,6 +1703,10 @@ def analyze_markov_chains(P_f, P_g, rng, print(f"\nKL散度率 h(f, g): {kl_rate_fg:.4f}") print(f"KL散度率 h(g, f): {kl_rate_gf:.4f}") + # 初始分布之间的KL散度 + kl_initial = np.sum(π_f * np.log(π_f / π_g)) + print(f"KL(π_f, π_g): {kl_initial:.4f}") + if plot_paths: # 模拟并绘制路径 paths_from_f = simulate_markov_chain(P_f, π_f, T, rng, N_paths) @@ -1573,10 +1719,10 @@ def analyze_markov_chains(P_f, P_g, rng, for i in range(min(n_show, N_paths)): plt.plot(np.log(L_ratios_f[i, :]), alpha=0.3, color='blue', lw=0.8) - # 绘制理论期望 - theory_line = kl_rate_fg * np.arange(T+1) + # 绘制当x_0从π_f中抽取时的理论期望 + theory_line = kl_initial + kl_rate_fg * np.arange(T+1) plt.plot(theory_line, 'k--', linewidth=2.5, - label=r'$T \times h_{KL}(f,g)$') + label=r'$D_{KL}(\pi^{(f)}\|\pi^{(g)}) + T \times h_{KL}(f,g)$') # 绘制经验平均值 avg_log_L = np.mean(np.log(L_ratios_f), axis=0) @@ -1626,7 +1772,17 @@ def compute_markov_selection_error(T_values, P_f, P_g, π_0_f, π_0_g, rng, N_si 我们现在准备模拟路径并可视化似然比是如何演变的。 -我们通过绘制经验平均值和理论预测线来验证从平稳分布开始的 $\frac{1}{T}E_f\left[\log \frac{L_T^{(f)}}{L_T^{(g)}}\right] = h_{KL}(f, g)$ +我们从平稳分布 $\pi^{(f)}$ 中抽取 $x_0$,并设定 $\pi_0^{(f)} = \pi^{(f)}$ 和 $\pi_0^{(g)} = \pi^{(g)}$。 + +因此该链在 $f$ 下是平稳的,所以 $E_f N_{ij} = T \pi_i^{(f)} P_{ij}^{(f)}$,并且 {eq}`eq:llr_markov` 意味着 + +$$ +E_f\left[\log \frac{L_T^{(f)}}{L_T^{(g)}}\right] = D_{KL}\bigl(\pi^{(f)}\|\pi^{(g)}\bigr) + T \, h_{KL}(f, g) +$$ + +对任意 $T$ 均成立。 + +我们通过绘制经验平均值和理论预测线来验证这个公式 ```{code-cell} ipython3 # 定义示例马尔可夫链转移矩阵 @@ -1643,11 +1799,11 @@ markov_results = analyze_markov_chains(P_f, P_g, rng) ## 相关讲座 -似然过程在贝叶斯学习中扮演重要角色,正如在{doc}`likelihood_bayes`中所描述的,并在{doc}`odu`中得到应用。 +似然过程在贝叶斯学习中扮演重要角色,正如在 {doc}`likelihood_bayes` 中所描述的,并在 {doc}`odu` 中得到应用。 -似然比过程是Lawrence Blume和David Easley回答他们提出的问题"如果你那么聪明,为什么不富有?" {cite}`Blume_Easley2006`的核心,这是讲座{doc}`likelihood_ratio_process_2`的主题。 +似然比过程是 Lawrence Blume 和 David Easley 回答他们提出的问题"如果你那么聪明,为什么不富有?" {cite}`Blume_Easley2006` 的核心,这是讲座 {doc}`likelihood_ratio_process_2` 的主题。 -似然比过程也出现在{doc}`advanced:additive_functionals`中,其中包含了另一个关于上述似然比过程**特殊性质**的说明。 +似然比过程也出现在 {doc}`advanced:additive_functionals` 中,其中包含了另一个关于上述似然比过程**特殊性质**的说明。 ## 练习 @@ -1658,14 +1814,14 @@ markov_results = analyze_markov_chains(P_f, P_g, rng) 设$\{w_t\}_{t=1}^T$是从$h$中独立同分布抽取的样本,且$L_t = L(w^t)$是如讲座中定义的似然比过程。 +假设$K_f$和$K_g$有限,且$E_h |\log f(W)| < \infty$,$E_h |\log g(W)| < \infty$。 + 证明: $$ \frac{1}{t} E_h[\log L_t] = K_g - K_f $$ -其中$K_g, K_f$有限,$E_h |\log f(W)| < \infty$且$E_h |\log g(W)| < \infty$。 - *提示:* 首先将$\log L_t$表示为$\log \ell(w_i)$项的和,并与$K_f$和$K_g$的定义进行比较。 ``` @@ -1762,7 +1918,7 @@ $$ E_h[\log L_t] = t \cdot (K_g - K_f) \to +\infty \text{ 当 } t \to \infty $$ -根据大数定律,$\frac{1}{t} \log L_t \to K_g - K_f > 0$ 几乎必然成立。 +根据强大数定律,$\frac{1}{t} \log L_t \to K_g - K_f > 0$ 几乎必然成立。 因此 $L_t \to +\infty$ 几乎必然成立。 @@ -1778,3 +1934,189 @@ $$ ```{solution-end} ``` + +```{exercise} +:label: lr_ex_markov + +本练习将切尔诺夫界 {eq}`eq:chernoff_bound` 推广到 {ref}`本节 ` 中的马尔可夫链。 + +设$x_0$在模型$f$下从$\pi_0^{(f)}$中抽取,在模型$g$下从$\pi_0^{(g)}$中抽取。 + +似然比检验在$L_T^{(f)}/L_T^{(g)} \geq 1$时选择$f$,否则选择$g$;设$\alpha_T$和$\beta_T$为其两种错误概率。 + +对于$\phi \in [0,1]$,设$Q_\phi$为$n \times n$矩阵,其元素为$Q_\phi(i,j) = \bigl(P^{(f)}_{ij}\bigr)^\phi \bigl(P^{(g)}_{ij}\bigr)^{1-\phi}$,并设$\lambda(\phi)$为其最大特征值(佩龙根)。 + +1. 证明 + + $$ + \frac{1}{2}(\alpha_T + \beta_T) \leq \frac{1}{2} v_\phi^\top Q_\phi^T \mathbf{1} , + $$ + + 其中$v_\phi(i) = \bigl(\pi^{(f)}_{0,i}\bigr)^\phi \bigl(\pi^{(g)}_{0,i}\bigr)^{1-\phi}$,$\mathbf{1}$是全1向量。 +2. 利用佩龙-弗罗贝尼乌斯定理推出错误概率至少以指数速率$C_M = -\log \min_{\phi \in [0,1]} \lambda(\phi)$衰减。 +3. 针对讲座中的矩阵$P^{(f)}$和$P^{(g)}$,计算$C_M$和使其最小化的$\phi$,并将$C_M$与KL散度速率$h_{KL}(f,g)$和$h_{KL}(g,f)$进行比较。 +4. 设$\pi_0^{(f)} = \pi^{(f)}$且$\pi_0^{(g)} = \pi^{(g)}$。使用 `compute_markov_selection_error` 对若干个$T$值模拟错误概率,并将其与第1部分中的界一起绘制。 +``` + +```{solution-start} lr_ex_markov +:class: dropdown +``` + +**第1部分。** 设$p_f(x^T) = \pi^{(f)}_{0,x_0} \prod_{t=1}^T P^{(f)}_{x_{t-1} x_t}$,并以同样方式定义$p_g(x^T)$。 + +与独立同分布情形相同,错误概率等于$\frac{1}{2} \sum_{x^T} \min\{p_f(x^T), p_g(x^T)\}$。 + +由于$\min\{x, y\} \leq x^\phi y^{1-\phi}$, + +$$ +\frac{1}{2}(\alpha_T + \beta_T) +\leq \frac{1}{2} \sum_{x_0, \ldots, x_T} v_\phi(x_0) \prod_{t=1}^T Q_\phi(x_{t-1}, x_t) += \frac{1}{2} v_\phi^\top Q_\phi^T \mathbf{1} . +$$ + +**第2部分。** 矩阵$Q_\phi$的元素全为正。 + +根据佩龙-弗罗贝尼乌斯定理,当$T \rightarrow \infty$时,$Q_\phi^T = \lambda(\phi)^T \bigl(r_\phi \ell_\phi^\top + o(1)\bigr)$,其中$r_\phi$和$\ell_\phi$是正的右、左特征向量,且归一化满足$\ell_\phi^\top r_\phi = 1$。 + +因此$\frac{1}{T} \log \bigl(v_\phi^\top Q_\phi^T \mathbf{1}\bigr) \rightarrow \log \lambda(\phi)$,对于任意$\phi$,错误概率至少以速率$-\log \lambda(\phi)$衰减。 + +最优速率来自使$\lambda(\phi)$最小化的$\phi$。 + +由于$P^{(f)}$和$P^{(g)}$都是随机矩阵,所以$\lambda(0) = \lambda(1) = 1$。 + +马尔可夫链的大偏差理论表明$C_M$就是精确速率{cite}`DemboZeitouni1998`。 + +**第3部分。** + +```{code-cell} ipython3 +def perron_root(ϕ, P_f, P_g): + """矩阵元素为 P_f^ϕ P_g^(1-ϕ) 的最大特征值。""" + Q = P_f**ϕ * P_g**(1 - ϕ) + return np.max(np.abs(np.linalg.eigvals(Q))) + +res = minimize_scalar(perron_root, bounds=(0, 1), args=(P_f, P_g), + method='bounded') +C_M, ϕ_M = -np.log(res.fun), res.x + +print(f"C_M = {C_M:.5f} at ϕ = {ϕ_M:.4f}") +print(f"h_KL(f, g) = {markov_results['kl_rate_fg']:.4f}, " + f"h_KL(g, f) = {markov_results['kl_rate_gf']:.4f}") +``` + +切尔诺夫速率$C_M = 0.0143$大约是任一KL散度速率的四分之一。 + +因此错误概率下降的速度要比$\log L_T^{(f)}/L_T^{(g)}$的漂移速度慢得多。 + +**第4部分。** + +```{code-cell} ipython3 +π_f = markov_results['stationary_f'] +π_g = markov_results['stationary_g'] +T_values = np.array([25, 50, 100, 150, 200, 250, 300]) + +errors = compute_markov_selection_error(T_values, P_f, P_g, π_f, π_g, + rng, N_sim=4000) + +Q_M = P_f**ϕ_M * P_g**(1 - ϕ_M) +v_M = π_f**ϕ_M * π_g**(1 - ϕ_M) +bound = [0.5 * v_M @ np.linalg.matrix_power(Q_M, T) @ np.ones(3) + for T in T_values] + +plt.figure(figsize=(10, 6)) +plt.semilogy(T_values, errors, 'bo-', label='模拟错误概率') +plt.semilogy(T_values, bound, 'r-', + label=r'界 $\frac{1}{2} v_\phi^\top Q_\phi^T \mathbf{1}$') +plt.semilogy(T_values, 0.5 * np.exp(-C_M * T_values), 'r--', + label=r'$\frac{1}{2} e^{-C_M T}$') +plt.xlabel('T') +plt.ylabel('错误概率(对数坐标)') +plt.legend() +plt.show() +``` + +第1部分给出的界几乎与$\frac{1}{2} e^{-C_M T}$重合。 + +模拟的错误概率位于该界之下。 + +在对数坐标上,它们的下降速度大致与该界平行,但因该界省略了一个多项式因子,所以下降得略快一些。 + +```{solution-end} +``` + +```{exercise} +:label: lr_ex_lmean + +设$f = \text{Beta}(1,1)$,$g = \text{Beta}(G_a, G_b)$。 + +1. 证明 + + $$ + E\left[\ell(w_t) \mid q = f\right] = \int_0^1 \frac{f(w)^2}{g(w)} dw = B(G_a, G_b) \, B(2 - G_a, 2 - G_b) + $$ + + 在$G_a < 2$且$G_b < 2$时成立,否则$E\left[\ell(w_t) \mid q = f\right] = +\infty$。 +2. 对于$g = \text{Beta}(1.5, 1.2)$和讲座中的$g = \text{Beta}(3, 1.2)$,计算$E\left[\ell(w_t) \mid q = f\right]$。 +3. 对于每个$g$,从$f$中抽取$w_1, w_2, \ldots, w_N$,并绘制滚动样本均值$\frac{1}{n} \sum_{i=1}^n \ell(w_i)$随$n$变化的图形。解释两幅图之间的差异。 +``` + +```{solution-start} lr_ex_lmean +:class: dropdown +``` + +**第1部分。** 由于在$(0,1)$上$f = 1$, + +$$ +\int_0^1 \frac{f(w)^2}{g(w)} dw = B(G_a, G_b) \int_0^1 w^{1 - G_a} (1-w)^{1 - G_b} dw . +$$ + +该积分收敛当且仅当$1 - G_a > -1$且$1 - G_b > -1$,即当且仅当$G_a < 2$且$G_b < 2$。 + +当其收敛时,等于$B(2 - G_a, 2 - G_b)$。 + +**第2部分。** + +```{code-cell} ipython3 +def mean_ell_under_f(G_a, G_b): + """对于 f = Beta(1, 1) 和 g = Beta(G_a, G_b),计算 E[ℓ(w) | q=f]。""" + if G_a < 2 and G_b < 2: + return np.exp(betaln(G_a, G_b) + betaln(2 - G_a, 2 - G_b)) + return np.inf + +for G_params in [(1.5, 1.2), (3, 1.2)]: + print(f"g = Beta{G_params}: E[ℓ | f] = {mean_ell_under_f(*G_params):.4f}") +``` + +**第3部分。** + +```{code-cell} ipython3 +N = 1_000_000 +n_grid = np.arange(1, N+1) + +fig, axes = plt.subplots(1, 2, figsize=(14, 5)) +for ax, (g_a, g_b) in zip(axes, [(1.5, 1.2), (3, 1.2)]): + w = rng.uniform(size=N) + ℓ = np.exp(-log_beta_pdf(w, g_a, g_b)) + ax.plot(n_grid, np.cumsum(ℓ) / n_grid, lw=1.5, + label='滚动样本均值') + mean = mean_ell_under_f(g_a, g_b) + if np.isfinite(mean): + ax.axhline(mean, color='k', ls='--', label=r'$E[\ell \mid q=f]$') + ax.set_xscale('log') + ax.set_yscale('log') + ax.set_xlabel('n') + ax.set_title(f'g = Beta({g_a}, {g_b})') + ax.legend() +plt.tight_layout() +plt.show() +``` + +对于$g = \text{Beta}(1.5, 1.2)$,$\ell$在$f$下的均值是有限的,强大数定律使滚动均值趋向$1.2112$。 + +对于$g = \text{Beta}(3, 1.2)$,该均值是无限的。 + +在$w = 0$附近出现的罕见抽样会产生极大的$\ell = 1/g$值,使滚动均值不断向上跳跃而无法稳定下来。 + +正因如此,我们在{ref}`自然从f中抽取数据的那一节 `中绘制了$\log L_t$。 + +```{solution-end} +``` diff --git a/lectures/likelihood_var.md b/lectures/likelihood_var.md index 0ad71319..c2e215ca 100644 --- a/lectures/likelihood_var.md +++ b/lectures/likelihood_var.md @@ -19,7 +19,9 @@ translation: Likelihood ratio process: 似然比过程 'Example 1: two AR(1) processes': 示例1:两个AR(1)过程 'Example 2: bivariate VAR models': 示例2:二元VAR模型 + KL divergence rate: KL 散度率 'Application: Samuelson multiplier-accelerator': 应用:萨缪尔森乘数-加速器模型 + Exercises: 练习 --- (var_likelihood)= @@ -37,14 +39,6 @@ translation: :depth: 2 ``` -除了Anaconda中已有的库外,本讲座还需要以下库: - -```{code-cell} ipython3 -:tags: [hide-output] - -!pip install quantecon -``` - ## 概述 本讲座将我们对似然比过程的分析扩展到向量自回归(VAR)模型。 @@ -54,10 +48,12 @@ translation: * 构建VAR模型的似然函数 * 形成用于比较两个VAR模型的似然比过程 * 可视化似然比随时间的演变 +* 计算控制对数似然比漂移的库尔贝克-莱布勒散度率 * 将VAR似然比与萨缪尔森乘数-加速器模型联系起来 我们的分析建立在以下概念之上: - {doc}`likelihood_ratio_process` +- {doc}`divergence_measures` - {doc}`linear_models` - {doc}`samuelson` @@ -73,13 +69,9 @@ plt.rcParams['font.family'] = ['Source Han Serif SC'] from scipy import linalg from scipy.stats import multivariate_normal as mvn -from quantecon import LinearStateSpace -import quantecon as qe -from numba import jit -from typing import NamedTuple, Optional, Tuple from collections import namedtuple -rng = np.random.default_rng() +rng = np.random.default_rng(1234) ``` ## VAR模型设置 @@ -168,24 +160,26 @@ def create_var_model(A, C, μ_0=None, Σ_0=None, stationary=True): ### 联合分布 -联合概率分布 $f(x_T, x_{T-1}, \ldots, x_0)$ 可以分解为: +联合概率密度 $p(x_T, x_{T-1}, \ldots, x_0)$ 可以分解为: $$ -f(x_T, \ldots, x_0) = f(x_T | x_{T-1}) f(x_{T-1} | x_{T-2}) \cdots f(x_1 | x_0) f(x_0) +p(x_T, \ldots, x_0) = p(x_T | x_{T-1}) p(x_{T-1} | x_{T-2}) \cdots p(x_1 | x_0) p(x_0) $$ -由于VAR是马尔可夫的,$f(x_{t+1} | x_t, \ldots, x_0) = f(x_{t+1} | x_t)$。 +由于VAR是马尔可夫的,$p(x_{t+1} | x_t, \ldots, x_0) = p(x_{t+1} | x_t)$。 + +我们用 $p$ 表示一般的密度,并保留 $f$ 和 $g$ 作为两个模型的名称。 ### 条件密度 -基于高斯结构,条件分布 $f(x_{t+1} | x_t)$ 是高斯分布,其: +基于高斯结构,条件分布 $p(x_{t+1} | x_t)$ 是高斯分布,其: - 均值:$A x_t$ -- 协方差:$CC'$ +- 协方差:$CC^\top$ 对数条件密度为 $$ -\log f(x_{t+1} | x_t) = -\frac{n}{2} \log(2\pi) - \frac{1}{2} \log \det(CC') - \frac{1}{2} (x_{t+1} - A x_t)' (CC')^{-1} (x_{t+1} - A x_t) +\log p(x_{t+1} | x_t) = -\frac{n}{2} \log(2\pi) - \frac{1}{2} \log \det(CC^\top) - \frac{1}{2} (x_{t+1} - A x_t)^\top (CC^\top)^{-1} (x_{t+1} - A x_t) $$ (eq:cond_den) ```{code-cell} ipython3 @@ -204,8 +198,8 @@ def log_likelihood_transition(x_next, x_curr, model): 初始状态的对数密度为: $$ -\log f(x_0) = -\frac{n}{2} \log(2\pi) - \frac{1}{2} \log \det(\Sigma_0) - \frac{1}{2} (x_0 - \mu_0)' \Sigma_0^{-1} (x_0 - \mu_0) -$$ +\log p(x_0) = -\frac{n}{2} \log(2\pi) - \frac{1}{2} \log \det(\Sigma_0) - \frac{1}{2} (x_0 - \mu_0)^\top \Sigma_0^{-1} (x_0 - \mu_0) +$$ (eq:init_den) ```{code-cell} ipython3 def log_likelihood_initial(x_0, model): @@ -219,22 +213,9 @@ def log_likelihood_initial(x_0, model): diff @ model.Σ_0_inv @ diff) ``` -现在让我们把似然计算组合成一个函数,用于计算整个路径的对数似然 +下面的函数从VAR模型中模拟路径 ```{code-cell} ipython3 -def log_likelihood_path(X, model): - """ - 计算整个路径的对数似然 - """ - - T = X.shape[0] - 1 - log_L = log_likelihood_initial(X[0], model) - - for t in range(T): - log_L += log_likelihood_transition(X[t+1], X[t], model) - - return log_L - def simulate_var(model, T, rng, N_paths=1): """ 从VAR模型中模拟路径 @@ -260,23 +241,28 @@ def simulate_var(model, T, rng, N_paths=1): ## 似然比过程 -现在让我们计算两个VAR模型的似然比过程。 +现在让我们计算用于比较两个VAR模型$f$和$g$的似然比过程。 + +设$p_f$和$p_g$分别表示模型$f$和$g$下的密度。 -对于具有状态向量$x_t$的VAR模型,在时间$t$的对数似然比为 +正如 {doc}`likelihood_ratio_process` 中那样,$L_t$表示样本$x_0, x_1, \ldots, x_t$的似然比: $$ -\ell_t = \log \frac{p_f(x_t | x_{t-1})}{p_g(x_t | x_{t-1})} +L_t = \frac{p_f(x_t, \ldots, x_0)}{p_g(x_t, \ldots, x_0)} + = \frac{p_f(x_0)}{p_g(x_0)} \prod_{s=1}^{t} \frac{p_f(x_s | x_{s-1})}{p_g(x_s | x_{s-1})} $$ -其中$p_f$和$p_g$分别是模型$f$和$g$下的条件密度。 +其中条件密度由 {eq}`eq:cond_den` 给出,$x_0$的密度由 {eq}`eq:init_den` 给出。 -累积对数似然比过程为 +对数似然比过程为 $$ -L_t = \sum_{s=1}^{t} \ell_s = \sum_{s=1}^{t} \log \frac{p_f(x_s | x_{s-1})}{p_g(x_s | x_{s-1})} -$$ +\log L_t = \log \frac{p_f(x_0)}{p_g(x_0)} + \sum_{s=1}^{t} \ell_s, +\qquad +\ell_s = \log \frac{p_f(x_s | x_{s-1})}{p_g(x_s | x_{s-1})} +$$ (eq:var_llr) -其中$p_f(x_t | x_{t-1})$和$p_g(x_t | x_{t-1})$由{eq}`eq:cond_den`中定义的各自条件密度给出。 +它满足递归式$\log L_t = \log L_{t-1} + \ell_t$,初始条件为$\log L_0 = \log p_f(x_0) - \log p_g(x_0)$。 让我们用Python编写这些方程 @@ -356,20 +342,20 @@ plt.tight_layout() plt.show() ``` -正如我们预期的那样,似然比过程随着T的增加趋向于$+\infty$,表明我们的算法正确选择了模型$f$。 +正如我们预期的那样,对数似然比过程随着$t$的增加趋向于$+\infty$,表明我们的算法正确选择了模型$f$。 ## 示例2:二元VAR模型 现在让我们考虑一个二元VAR模型的例子,其中 $$ -A_f & = \begin{bmatrix} 0.7 & 0.2 \\ 0.1 & 0.6 \end{bmatrix}, \quad C_f = \begin{bmatrix} 0.3 & 0.1 \\ 0.1 & 0.3 \end{bmatrix} +A_f = \begin{bmatrix} 0.7 & 0.2 \\ 0.1 & 0.6 \end{bmatrix}, \quad C_f = \begin{bmatrix} 0.3 & 0.1 \\ 0.1 & 0.3 \end{bmatrix} $$ 和 $$ -A_g & = \begin{bmatrix} 0.5 & 0.3 \\ 0.2 & 0.5 \end{bmatrix}, \quad C_g = \begin{bmatrix} 0.4 & 0.0 \\ 0.0 & 0.4 \end{bmatrix} +A_g = \begin{bmatrix} 0.5 & 0.3 \\ 0.2 & 0.5 \end{bmatrix}, \quad C_g = \begin{bmatrix} 0.4 & 0.0 \\ 0.0 & 0.4 \end{bmatrix} $$ ```{code-cell} ipython3 @@ -409,8 +395,6 @@ L_ratios_ff = compute_likelihood_ratio_var(paths_from_f, model2_f, model2_g) L_ratios_gf = compute_likelihood_ratio_var(paths_from_g, model2_f, model2_g) ``` -我们可以看到,对于从模型 $f$ 生成的路径,似然比过程趋向于 $+\infty$,而对于从模型 $g$ 生成的路径,则趋向于 $-\infty$。 - ```{code-cell} ipython3 # 可视化结果 fig, axes = plt.subplots(1, 2, figsize=(12, 5)) @@ -431,7 +415,19 @@ plt.tight_layout() plt.show() ``` -让我们应用 {doc}`likelihood_ratio_process` 中描述的Neyman-Pearson频率主义决策规则,当$\log L_T \geq 0$时选择模型$f$,当$\log L_T < 0$时选择模型$g$ +对于从模型 $f$ 生成的路径,对数似然比过程趋向于 $+\infty$,而对于从模型 $g$ 生成的路径,则趋向于 $-\infty$。 + +在 $g$ 下路径下降的速度比在 $f$ 下上升的速度更快;{ref}`var_kl_rate` 一节将解释其中的原因。 + +让我们应用 {doc}`likelihood_ratio_process` 中 {ref}`模型选择错误概率 ` 一节所描述的决策规则:当 $\log L_T \geq 0$ 时选择模型 $f$,当 $\log L_T < 0$ 时选择模型 $g$。 + +该规则是一个阈值为 $L_T = 1$ 的似然比检验。 + +假设某位贝叶斯主义者对每个模型赋予先验概率 $1/2$。 + +那么模型 $f$ 的后验概率为 $L_T/(1 + L_T)$,正如 {doc}`likelihood_bayes` 中所述。 + +该规则选择后验概率较高的模型,因此它使选错模型的概率 $\frac{1}{2}(\alpha_T + \beta_T)$ 最小化,其中 $\alpha_T = {\rm Prob}(\log L_T < 0 | f)$,$\beta_T = {\rm Prob}(\log L_T \geq 0 | g)$。 ```{code-cell} ipython3 fig, ax = plt.subplots() @@ -458,7 +454,7 @@ plt.show() 显然,随着 $T$ 的增加,准确率趋近于 $1$,而且这个过程非常快。 -让我们也检查一下类型 I 和类型 II 错误作为 $T$ 的函数的变化 +让我们也检查一下类型 I 和类型 II 错误 $\alpha_T$ 和 $\beta_T$ 作为 $T$ 的函数的变化 ```{code-cell} ipython3 def model_selection_analysis(T_values, model_f, model_g, N_sim=500): @@ -488,17 +484,152 @@ errors_f, errors_g = model_selection_analysis(T_values, model2_f, model2_g, N_si fig, ax = plt.subplots() -ax.plot(T_values, errors_f, 'C0', linewidth=2, label='类型 I 错误') -ax.plot(T_values, errors_g, 'C1', linewidth=2, label='类型 II 错误') +ax.plot(T_values, errors_f, 'C0', linewidth=2, label=r'type I error $\alpha_T$') +ax.plot(T_values, errors_g, 'C1', linewidth=2, label=r'type II error $\beta_T$') ax.plot(T_values, 0.5 * (errors_f + errors_g), 'g--', -linewidth=2, label='平均错误') +linewidth=2, label='average error') ax.set_xlabel('$T$') -ax.set_ylabel('错误概率') -ax.set_title('模型选择错误') +ax.set_ylabel('error probability') +ax.set_title('model selection errors') +ax.legend() plt.tight_layout() plt.show() ``` +上面的决策规则是预先固定样本大小 $T$ 的。 + +{doc}`wald_friedman` 中描述的瓦尔德序贯概率比检验则不同,它在 $\log L_t$ 首次离开某个区间时才停止抽样。 + +该讲座的练习 {ref}`wald_friedman_ex2` 将此方法应用于两个VAR模型。 + +(var_kl_rate)= +## KL 散度率 + +上面各图中对数似然比路径的平均斜率就是库尔贝克-莱布勒散度率。 + +它们是 {doc}`likelihood_ratio_process` 中 {ref}`马尔可夫链的 KL 散度率 ` 的向量自回归(VAR)对应版本。 + +{doc}`divergence_measures` 描述了库尔贝克-莱布勒散度。 + +设 $\Sigma_f = C_f C_f^\top$ 且 $\Sigma_g = C_g C_g^\top$,并设 $V_f$ 求解以下离散李雅普诺夫方程 + +$$ +V_f = A_f V_f A_f^\top + \Sigma_f +$$ + +从而 $\mathcal{N}(0, V_f)$ 是模型 $f$ 下 $x_t$ 的平稳分布。 + +假设模型 $f$ 生成数据,并且 $x_0$ 服从 $\mathcal{N}(0, V_f)$ 分布,如示例 1 和示例 2 中所述。 + +那么 {eq}`eq:var_llr` 中的每个增量 $\ell_t$ 都具有相同的期望值 + +$$ +\begin{aligned} +h_{KL}(f, g) & = E_f \left[ \log \frac{p_f(x_t | x_{t-1})}{p_g(x_t | x_{t-1})} \right] \\ +& = \frac{1}{2} \left[ \operatorname{tr}(\Sigma_g^{-1} \Sigma_f) - n + + \log \frac{\det \Sigma_g}{\det \Sigma_f} + + \operatorname{tr}\left( \Sigma_g^{-1} (A_f - A_g) V_f (A_f - A_g)^\top \right) \right] +\end{aligned} +$$ (eq:var_kl_rate) + +括号中前三项衡量冲击协方差矩阵 $\Sigma_f$ 和 $\Sigma_g$ 之间的差异。 + +最后一项衡量条件均值 $A_f x_{t-1}$ 和 $A_g x_{t-1}$ 之间的差异,该差异是在 $x_{t-1}$ 的平稳分布上取平均得到的。 + +由于 $\{x_t\}$ 在 $f$ 下是遍历的, + +$$ +\frac{1}{t} \log L_t \to h_{KL}(f, g) \quad \text{当 } t \to \infty \text{ 时几乎必然成立} +$$ + +当模型 $g$ 生成数据时,$\frac{1}{t} \log L_t \to -h_{KL}(g, f)$,其中 $h_{KL}(g, f)$ 是将 {eq}`eq:var_kl_rate` 中 $f$ 和 $g$ 的角色互换后得到的表达式。 + +练习 {ref}`lv_ex1` 要求你推导 {eq}`eq:var_kl_rate`,并通过模拟验证这些极限。 + +下面的函数计算 {eq}`eq:var_kl_rate` 的两个部分。 + +它从 `model_f.Σ_0` 中获取 $V_f$,因此 `model_f` 必须在创建时设置 `stationary=True`。 + +```{code-cell} ipython3 +def kl_rate_terms(model_f, model_g): + """ + Covariance and conditional-mean terms of the KL divergence rate + h_KL(f, g), with x_t drawn from the stationary distribution of model f + """ + n = model_f.A.shape[0] + D = model_f.A - model_g.A + V_f = model_f.Σ_0 + cov_term = 0.5 * (np.trace(model_g.CC_inv @ model_f.CC) - n + + model_g.log_det_CC - model_f.log_det_CC) + mean_term = 0.5 * np.trace(model_g.CC_inv @ D @ V_f @ D.T) + return cov_term, mean_term + +def kl_rate_var(model_f, model_g): + """ + KL divergence rate h_KL(f, g) between two stationary Gaussian VARs + """ + return sum(kl_rate_terms(model_f, model_g)) + +examples = [("Example 1", model_f, model_g), + ("Example 2", model2_f, model2_g)] + +for name, m_f, m_g in examples: + for label, m1, m2 in [("h_KL(f, g)", m_f, m_g), ("h_KL(g, f)", m_g, m_f)]: + cov_term, mean_term = kl_rate_terms(m1, m2) + print(f"{name}: {label} = {cov_term + mean_term:.4f} " + f"(covariance terms {cov_term:.4f}, mean term {mean_term:.4f})") +``` + +对于示例 2,$h_{KL}(g, f) = 0.961$ 几乎是 $h_{KL}(f, g) = 0.344$ 的三倍。 + +这就是为什么当 $g$ 生成数据时 $\log L_t$ 下降的速度比 $f$ 生成数据时 $\log L_t$ 上升的速度更快。 + +协方差项在两个速率中都占据主要部分。 + +两个模型都为 $(x_{1t} + x_{2t})/\sqrt{2}$ 的冲击赋予了方差 $0.16$。 + +模型 $g$ 为 $(x_{1t} - x_{2t})/\sqrt{2}$ 的冲击赋予了方差 $0.16$;模型 $f$ 则赋予其方差 $0.04$。 + +设 $r$ 为生成数据的模型下 $(x_{1t} - x_{2t})/\sqrt{2}$ 冲击的方差除以另一模型下该冲击方差的比值。 + +由于两个模型在另一方向上是一致的,协方差项等于 $\frac{1}{2}(r - 1 - \log r)$。 + +当 $r = 4$(自然 $= g$)时,该表达式等于 $0.807$;当 $r = 1/4$(自然 $= f$)时,该表达式等于 $0.318$。 + +库尔贝克-莱布勒散度对低估方差的模型的惩罚力度,要比对高估方差的模型更重。 + +在示例 1 中,两部分的贡献大致相等,且 $h_{KL}(g, f) = 0.208$ 超过了 $h_{KL}(f, g) = 0.139$。 + +让我们将示例 2 的理论速率与上面模拟得到的各路径中 $\frac{1}{T} \log L_T$ 的样本均值进行比较 + +```{code-cell} ipython3 +T2 = L_ratios_ff.shape[1] - 1 + +print(f"nature = f: mean of log L_T / T = {L_ratios_ff[:, -1].mean() / T2:.4f}, " + f"h_KL(f, g) = {kl_rate_var(model2_f, model2_g):.4f}") +print(f"nature = g: mean of log L_T / T = {L_ratios_gf[:, -1].mean() / T2:.4f}, " + f"-h_KL(g, f) = {-kl_rate_var(model2_g, model2_f):.4f}") +``` + +样本均值包含了初始条件项 $\log L_0$ 除以 $T = 50$ 的结果,因此它们不一定与理论速率完全相等。 + +KL 速率描述的是增量 $\ell_t$ 的均值。 + +小样本 $T$ 下的误差概率取决于 $\log L_T$ 的整个分布。 + +```{code-cell} ipython3 +for nature, L_ratios in [('f', L_ratios_ff), ('g', L_ratios_gf)]: + ℓ = np.diff(L_ratios, axis=1).ravel() + print(f"nature = {nature}: increments ℓ_t have mean {ℓ.mean():.2f}, " + f"median {np.median(ℓ):.2f}, standard deviation {ℓ.std():.2f}") +``` + +在 $g$ 下,增量 $\ell_t$ 的均值接近 $-1$,中位数接近 $0$,标准差较大。 + +在 $f$ 下,其中位数超过均值,且标准差较小。 + +这就是为什么在上面的误差概率图中,尽管 $\log L_t$ 在 $g$ 下下降的速度比在 $f$ 下上升的速度更快,但对于较小的 $T$,$\beta_T$ 仍然超过 $\alpha_T$。 + ## 应用:萨缪尔森乘数-加速器模型 现在让我们来看萨缪尔森乘数-加速器模型。 @@ -506,7 +637,7 @@ plt.show() 该模型包括: - 消费:$C_t = \gamma + a Y_{t-1}$ 其中 $a \in (0,1)$ 是边际消费倾向 -- 投资:$I_t = b(Y_{t-1} - Y_{t-2})$ 其中 $b > 0$ 是加速系数 +- 投资:$I_t = b(Y_{t-1} - Y_{t-2}) + \sigma \epsilon_t$ 其中 $b > 0$ 是加速系数,且 $\{\epsilon_t\}$ 是独立同分布的标准正态随机变量序列 - 政府支出:$G_t = G$ (常数) 我们有国民收入恒等式 @@ -515,7 +646,15 @@ $$ Y_t = C_t + I_t + G_t $$ -这些方程得出二阶差分方程: +{doc}`samuelson` 用 $\alpha$ 和 $\beta$ 来表示 $a$ 和 $b$。 + +那篇讲座将冲击 $\sigma \epsilon_t$ 直接加到 $Y_t$ 的二阶差分方程中。 + +我们将冲击置于投资方程中。 + +这样得到与 $Y_t$ 相同的差分方程,同时也确定了 $C_t$ 和 $I_t$ 对 $\epsilon_t$ 的反应方式。 + +将消费方程和投资方程代入国民收入恒等式,得出二阶差分方程: $$ Y_t = (\gamma + G) + (a + b)Y_{t-1} - b Y_{t-2} + \sigma \epsilon_t @@ -527,12 +666,20 @@ $$ Y_t = (\gamma + G) + \rho_1 Y_{t-1} + \rho_2 Y_{t-2} + \sigma \epsilon_t $$ +当 $z^2 - \rho_1 z - \rho_2$ 的根位于单位圆内时,$Y_t$ 具有平稳分布,其均值为 + +$$ +Y^* = \frac{\gamma + G}{1 - \rho_1 - \rho_2} = \frac{\gamma + G}{1 - a} +$$ + +当 $\sigma = 0$ 时,$Y_t$ 收敛到稳态 $Y^*$,此时投资为零,且 $Y^* = \gamma + a Y^* + G$。 + 为了符合我们的讨论,我们将其写成状态空间表示。 -为了正确处理常数项,我们使用增广状态向量 $\mathbf{x}_t = [1, Y_t, Y_{t-1}]'$: +为了正确处理常数项,我们使用增广状态向量 $x_t = [1, Y_t, Y_{t-1}]^\top$: $$ -\mathbf{x}_{t+1} = \begin{bmatrix} +x_{t+1} = \begin{bmatrix} 1 \\ Y_{t+1} \\ Y_t @@ -554,14 +701,14 @@ $$ 观测方程提取经济变量: $$ -\mathbf{y}_t = \begin{bmatrix} +y_t = \begin{bmatrix} Y_t \\ C_t \\ I_t \end{bmatrix} = \begin{bmatrix} -\gamma + G & \rho_1 & \rho_2 \\ -\gamma & a & 0 \\ -0 & b & -b +0 & 1 & 0 \\ +\gamma & 0 & a \\ +-(\gamma + G) & 1 & -a \end{bmatrix} \begin{bmatrix} 1 \\ Y_t \\ @@ -571,9 +718,25 @@ $$ 这给出了: -- $Y_t = (\gamma + G) \cdot 1 + \rho_1 Y_{t-1} + \rho_2 Y_{t-2}$ (总产出) +- $Y_t$ (总产出) - $C_t = \gamma \cdot 1 + a Y_{t-1}$ (消费) -- $I_t = b(Y_{t-1} - Y_{t-2})$ (投资) +- $I_t = Y_t - C_t - G = b(Y_{t-1} - Y_{t-2}) + \sigma \epsilon_t$ (投资) + +第三行利用国民收入恒等式,从 $Y_t$ 和 $Y_{t-1}$ 中恢复出 $I_t$,因此状态向量无需包含 $Y_{t-2}$。 + +矩阵 $CC^\top$ 的秩为一:给定 $x_t$,$x_{t+1}$ 的第一和第三个分量是已知的,只有 $Y_{t+1}$ 是随机的。 + +因此 {eq}`eq:cond_den` 不是关于 $\mathbb{R}^3$ 上勒贝格测度的密度。 + +`create_var_model` 用伪逆替代 $(CC^\top)^{-1}$,并在取对数行列式之前为 $CC^\top$ 加上 $10^{-10} I$。 + +这些正则化项在 $\ell_{t+1}$ 中相互抵消,$\ell_{t+1}$ 等于在给定 $x_t$ 的条件下,两个模型中 $Y_{t+1}$ 条件密度的对数比。 + +同样的方法也用于处理 $x_0$ 的奇异协方差矩阵 $\Sigma_0$,其第一个分量恒为 $1$。 + +一个观测到 $Y_t$ 和 $Y_{t-1}$ 的计量经济学家,相当于观测到了状态 $x_t$。 + +当计量经济学家只观测到状态向量的部分分量,或者带有误差地观测它们时,卡尔曼滤波器会产生用于计算似然的新息,正如 {doc}`kalman` 和 {doc}`kalman_filter_var` 中所述。 ```{code-cell} ipython3 def samuelson_to_var(a, b, γ, G, σ): @@ -583,7 +746,7 @@ def samuelson_to_var(a, b, γ, G, σ): 萨缪尔森模型: - Y_t = C_t + I_t + G - C_t = γ + a*Y_{t-1} - - I_t = b*(Y_{t-1} - Y_{t-2}) + - I_t = b*(Y_{t-1} - Y_{t-2}) + σ*ε_t 简化形式: Y_t = (γ+G) + (a+b)*Y_{t-1} - b*Y_{t-2} + σ*ε_t @@ -602,43 +765,52 @@ def samuelson_to_var(a, b, γ, G, σ): [σ], [0]]) - # 观测矩阵(提取Y_t, C_t, I_t) - G_obs = np.array([[γ + G, ρ_1, ρ_2], # Y_t - [γ, a, 0], # C_t - [0, b, -b]]) # I_t + # 观测矩阵(从[1, Y_t, Y_{t-1}]'中提取Y_t, C_t, I_t) + G_obs = np.array([[0, 1, 0], # Y_t + [γ, 0, a], # C_t = γ + a Y_{t-1} + [-(γ + G), 1, -a]]) # I_t = Y_t - C_t - G return A, C, G_obs ``` 我们在下面的代码单元中定义函数来获取初始条件并检查稳定性 +当 `stationary_init=True` 时,初始状态 $[1, Y_0, Y_{-1}]^\top$ 具有平稳分布:$(Y_0, Y_{-1})$ 的均值为 $(Y^*, Y^*)$,协方差矩阵通过求解离散李雅普诺夫方程得到。 + ```{code-cell} ipython3 :tags: [hide-input] -def get_samuelson_initial_conditions(a, b, γ, G, y_0=None, y_m1=None, +def get_samuelson_initial_conditions(a, b, γ, G, σ, y_0=None, y_m1=None, stationary_init=False): """ - 获取萨缪尔森模型的初始条件 + 获取萨缪尔森模型初始状态[1, Y_0, Y_{-1}]'的均值和协方差 """ - # 计算稳态 - y_ss = (γ + G) / (1 - a - b) + # 稳态(投资为零): Y* = γ + a Y* + G + y_ss = (γ + G) / (1 - a) + + if stationary_init: + # (Y_t, Y_{t-1})的平稳分布 + ρ = np.array([[a + b, -b], + [1, 0]]) + if np.max(np.abs(np.linalg.eigvals(ρ))) >= 1: + raise ValueError("萨缪尔森模型不是平稳的") + V = linalg.solve_discrete_lyapunov(ρ, np.diag([σ**2, 0])) + μ_0 = np.array([1.0, y_ss, y_ss]) + Σ_0 = np.zeros((3, 3)) + Σ_0[1:, 1:] = V + return μ_0, Σ_0 if y_0 is None: y_0 = y_ss if y_m1 is None: - y_m1 = y_ss if stationary_init else y_0 * 0.95 + y_m1 = y_0 * 0.95 # 初始均值 μ_0 = np.array([1.0, y_0, y_m1]) - if stationary_init: - Σ_0 = np.array([[0, 0, 0], - [0, 1, 0.5], - [0, 0.5, 1]]) - else: - Σ_0 = np.array([[0, 0, 0], - [0, 25, 15], - [0, 15, 25]]) + Σ_0 = np.array([[0, 0, 0], + [0, 25, 15], + [0, 15, 25]]) return μ_0, Σ_0 @@ -682,7 +854,7 @@ def create_samuelson_var_model(a, b, γ, G, σ, stationary_init=False, A, C, G_obs = samuelson_to_var(a, b, γ, G, σ) μ_0, Σ_0 = get_samuelson_initial_conditions( - a, b, γ, G, y_0, y_m1, stationary_init + a, b, γ, G, σ, y_0, y_m1, stationary_init ) # 创建VAR模型 @@ -691,7 +863,7 @@ def create_samuelson_var_model(a, b, γ, G, σ, stationary_init=False, info = { 'a': a, 'b': b, 'γ': γ, 'G': G, 'σ': σ, 'ρ_1': a + b, 'ρ_2': -b, - 'steady_state': (γ + G) / (1 - a - b), + 'steady_state': (γ + G) / (1 - a), 'is_stable': is_stable, 'roots': roots, 'max_abs_root': max_root, @@ -722,6 +894,10 @@ def simulate_samuelson(model, G_obs, T, rng, N_paths=1): 现在让我们模拟两个具有不同加速系数的萨缪尔森模型并绘制它们的样本路径 +两个模型具有相同的稳态 $Y^* = 20/(1 - 0.98) = 1000$。 + +两者都从 $Y_0 \sim \mathcal{N}(100, 25)$ 和 $Y_{-1} \sim \mathcal{N}(95, 25)$ 开始,远低于 $Y^*$。 + ```{code-cell} ipython3 # 模型 f: 较高的加速系数 a_f, b_f = 0.98, 0.9 @@ -759,12 +935,14 @@ print(f" ρ_1 = a + b = {info_f['ρ_1']:.2f}") print(f" ρ_2 = -b = {info_f['ρ_2']:.2f}") print(f" 特征根: {info_f['roots']}") print(f" 动态特征: {info_f['dynamics']}") +print(f" 稳态: {info_f['steady_state']:.1f}") print("\n模型 g:") print(f" ρ_1 = a + b = {info_g['ρ_1']:.2f}") print(f" ρ_2 = -b = {info_g['ρ_2']:.2f}") print(f" 特征根: {info_g['roots']}") print(f" 动态特征: {info_g['dynamics']}") +print(f" 稳态: {info_g['steady_state']:.1f}") fig, ax = plt.subplots(1, 1) @@ -772,9 +950,10 @@ fig, ax = plt.subplots(1, 1) for i in range(min(20, N_paths)): ax.plot(output_paths_f[i], alpha=0.6, color='C0', linewidth=0.8) ax.plot(output_paths_g[i], alpha=0.6, color='C1', linewidth=0.8) +ax.axhline(info_f['steady_state'], color='gray', linestyle='--', alpha=0.5) ax.set_xlabel('$t$') ax.set_ylabel('$Y_t$') -ax.legend(['模型 f', '模型 g'], loc='upper left') +ax.legend(['模型 f', '模型 g'], loc='lower right') plt.tight_layout() plt.show() ``` @@ -801,10 +980,368 @@ ax.set_title(r'$\log L_t$ (真实模型 = g)') plt.show() ``` -在左图中,数据由 $f$ 生成,似然比趋向正无穷。 +在左图中,数据由 $f$ 生成,对数似然比趋向正无穷。 -在右图中,数据由 $g$ 生成,似然比趋向负无穷。 - -在这两种情况下,为了数值稳定性,我们对对数似然比过程设置了上下限阈值,因为它们会很快增长到无界。 +在右图中,数据由 $g$ 生成,对数似然比趋向负无穷。 在这两种情况下,似然比过程最终都能帮助我们选择正确的模型。 + +区分这两个模型的信息几乎全部来自于使 $Y_t$ 从 $Y_0 \approx 100$ 向 $Y^* = 1000$ 过渡的瞬态过程。 + +这两个模型共享相同的 $a$、$\gamma$、$G$、$\sigma$ 和 $Y^*$;它们仅在加速系数 $b$ 上有所不同。 + +它们对 $Y_{t+1}$ 的预测相差 $(b_f - b_g)(Y_t - Y_{t-1}) = 0.05 \, \Delta Y_t$。 + +由于两个模型共享相同的 $\sigma$,在模型 $f$ 下 $\log L_t$ 的预期增量为 + +$$ +E_f [\ell_{t+1} | x_t] = \frac{(b_f - b_g)^2 (\Delta Y_t)^2}{2 \sigma^2} +$$ + +而 $E_g [-\ell_{t+1} | x_t]$ 由同样的公式给出。 + +在瞬态过程中,相对于 $\sigma = 0.5$ 而言,$|\Delta Y_t|$ 较大。 + +在平稳分布中,$\Delta Y_t$ 较小,且KL散度率为 $h_{KL}(f, g) = (b_f - b_g)^2 E_f[(\Delta Y_t)^2] / (2\sigma^2)$。 + +下面的函数根据使用 `stationary_init=True` 创建的模型的 $x_t$ 平稳分布,计算该散度率。 + +```{code-cell} ipython3 +def samuelson_kl_rate(model_f, model_g): + """ + 针对两个使用stationary_init=True创建的萨缪尔森模型的KL散度率 + h_KL(f, g);x_{t+1}中只有Y分量是随机的 + """ + σ2_f, σ2_g = model_f.CC[1, 1], model_g.CC[1, 1] + d = model_f.A[1] - model_g.A[1] # Y_{t+1}预测的差异 + M_f = model_f.Σ_0 + np.outer(model_f.μ_0, model_f.μ_0) # E_f[x_t x_t'] + return 0.5 * (σ2_f / σ2_g - 1 + np.log(σ2_g / σ2_f) + + d @ M_f @ d / σ2_g) + +model_stat_f, _, _ = create_samuelson_var_model( + a_f, b_f, γ_f, G_f, σ_f, stationary_init=True) +model_stat_g, _, _ = create_samuelson_var_model( + a_g, b_g, γ_g, G_g, σ_g, stationary_init=True) + +h_fg = samuelson_kl_rate(model_stat_f, model_stat_g) +h_gf = samuelson_kl_rate(model_stat_g, model_stat_f) + +print(f"median log L_{T}: nature = f: {np.median(L_ratios_ff[:, -1]):.1f}, " + f"nature = g: {np.median(L_ratios_gf[:, -1]):.1f}") +print(f"stationary sd of ΔY_t under f: " + f"{np.sqrt(2 * (model_stat_f.Σ_0[1, 1] - model_stat_f.Σ_0[1, 2])):.2f}") +print(f"h_KL(f, g) = {h_fg:.4f}, h_KL(g, f) = {h_gf:.4f}") +print(f"{T} × h_KL(f, g) = {T * h_fg:.2f}, {T} × h_KL(g, f) = {T * h_gf:.2f}") + +# 沿模拟路径计算预期增量 E[ℓ_t | x_{t-1}] +d = model_sam_f.A[1] - model_sam_g.A[1] +σ2 = σ_f**2 +inc_f = ((states_f[:, :-1, :] @ d)**2 / (2 * σ2)).mean(axis=0) +inc_g = ((states_g[:, :-1, :] @ d)**2 / (2 * σ2)).mean(axis=0) +t_grid = np.arange(1, T + 1) + +print(f"largest mean expected increment: " + f"nature = f: {inc_f.max():.1f} at t = {t_grid[inc_f.argmax()]}, " + f"nature = g: {inc_g.max():.1f} at t = {t_grid[inc_g.argmax()]}") + +fig, ax = plt.subplots() +ax.semilogy(t_grid, inc_f, color='C0', lw=2, + label=r'$E_f[\ell_t | x_{t-1}]$, mean over paths') +ax.semilogy(t_grid, inc_g, color='C1', lw=2, + label=r'$E_g[-\ell_t | x_{t-1}]$, mean over paths') +ax.axhline(h_fg, color='C0', ls='--', lw=2, label=r'$h_{KL}(f, g)$') +ax.axhline(h_gf, color='C1', ls='--', lw=2, label=r'$h_{KL}(g, f)$') +ax.set_xlabel('$t$') +ax.set_ylabel('expected increment') +ax.legend() +plt.show() +``` + +在 $t = 10$ 附近,即 $Y_t$ 上升最快时,模型 $f$ 下的预期增量达到约 $34$,模型 $g$ 下达到约 $24$。 + +只有在振荡的转折点附近,即 $\Delta Y_t$ 接近零时,它们才接近平稳速率 $h_{KL}(f, g)$ 和 $h_{KL}(g, f)$。 + +模型 $f$ 下 $\Delta Y_t$ 的平稳标准差为 $1.15$。 + +从平稳分布来看,$50$ 期只能使 $E_f [\log L_t]$ 增加约 $0.33$,而瞬态过程则能使 $\log L_{50}$ 的中位数提高到约 $400$。 + +练习 {ref}`lv_ex2` 让两个模型都从各自的平稳分布开始,研究这两个模型变得难以区分的程度。 + +## 练习 + +```{exercise} +:label: lv_ex1 + +推导公式 {eq}`eq:var_kl_rate`,即 KL 散度率 $h_{KL}(f, g)$ 的公式。 + +使用两个多元正态分布的 Kullback-Leibler 散度公式: + +$$ +KL\bigl(\mathcal{N}(\mu_1, \Sigma_1), \mathcal{N}(\mu_2, \Sigma_2)\bigr) += \frac{1}{2} \left[ \operatorname{tr}(\Sigma_2^{-1} \Sigma_1) - n + + (\mu_1 - \mu_2)^\top \Sigma_2^{-1} (\mu_1 - \mu_2) + + \log \frac{\det \Sigma_2}{\det \Sigma_1} \right] +$$ + +然后通过模拟验证:当 $f$ 生成数据时,$\frac{1}{t} \log L_t \to h_{KL}(f, g)$;当 $g$ 生成数据时,$\frac{1}{t} \log L_t \to -h_{KL}(g, f)$。 + +针对示例 1 和示例 2,取 $T = 2000$ 完成此验证。 +``` + +```{solution-start} lv_ex1 +:class: dropdown +``` + +在模型 $f$ 下,$x_t | x_{t-1} \sim \mathcal{N}(A_f x_{t-1}, \Sigma_f)$;在模型 $g$ 下,$x_t | x_{t-1} \sim \mathcal{N}(A_g x_{t-1}, \Sigma_g)$。 + +因此 $E_f [\ell_t | x_{t-1}] = KL\bigl(\mathcal{N}(A_f x_{t-1}, \Sigma_f), \mathcal{N}(A_g x_{t-1}, \Sigma_g)\bigr)$。 + +在上述公式中令 $\mu_1 - \mu_2 = (A_f - A_g) x_{t-1}$,得到 + +$$ +E_f [\ell_t | x_{t-1}] = \frac{1}{2} \left[ \operatorname{tr}(\Sigma_g^{-1} \Sigma_f) - n + + \log \frac{\det \Sigma_g}{\det \Sigma_f} + + x_{t-1}^\top (A_f - A_g)^\top \Sigma_g^{-1} (A_f - A_g) x_{t-1} \right] +$$ + +在 $f$ 下,$x_{t-1} \sim \mathcal{N}(0, V_f)$。 + +对任意矩阵 $M$,$E [x_{t-1}^\top M x_{t-1}] = \operatorname{tr}(M V_f)$。 + +令 $M = (A_f - A_g)^\top \Sigma_g^{-1} (A_f - A_g)$,并利用迹的循环性质,有 + +$$ +E_f [x_{t-1}^\top M x_{t-1}] = \operatorname{tr}\left( \Sigma_g^{-1} (A_f - A_g) V_f (A_f - A_g)^\top \right) +$$ + +对 $E_f [\ell_t | x_{t-1}]$ 关于 $x_{t-1}$ 取期望,即得 {eq}`eq:var_kl_rate`。 + +由于 $x_{t-1}$ 在每个 $t$ 都服从相同的分布 $\mathcal{N}(0, V_f)$,所以每个增量 $\ell_t$ 的均值均为 $h_{KL}(f, g)$,且 + +$$ +E_f [\log L_t] = E_f \left[ \log \frac{p_f(x_0)}{p_g(x_0)} \right] + t \, h_{KL}(f, g) +$$ + +遍历定理表明 $\frac{1}{t} \sum_{s=1}^t \ell_s \to h_{KL}(f, g)$ 几乎必然成立,且 $\frac{1}{t} \log \frac{p_f(x_0)}{p_g(x_0)} \to 0$。 + +以下是模拟过程。 + +```{code-cell} ipython3 +T_long = 2000 +N_long = 20 +t_grid = np.arange(1, T_long + 1) + +fig, axes = plt.subplots(1, 2, figsize=(12, 5)) + +for ax, (name, m_f, m_g) in zip(axes, examples): + for nature, m_true, rate, color in [ + ('f', m_f, kl_rate_var(m_f, m_g), 'C0'), + ('g', m_g, -kl_rate_var(m_g, m_f), 'C1')]: + paths = simulate_var(m_true, T_long, rng, N_long) + log_L = compute_likelihood_ratio_var(paths, m_f, m_g) + avg = log_L[:, 1:] / t_grid + ax.plot(t_grid, avg.T, color=color, alpha=0.2, lw=1) + ax.axhline(rate, color=color, ls='--', lw=2, + label=f'theory (nature = {nature})') + print(f"{name}, nature = {nature}: mean of log L_T / T = " + f"{avg[:, -1].mean():.4f}, theory = {rate:.4f}") + ax.set_xscale('log') + ax.set_xlabel('$t$') + ax.set_ylabel(r'$\log L_t / t$') + ax.set_title(name) + ax.legend() + +plt.tight_layout() +plt.show() +``` + +在全部四种情形中,$\frac{1}{t} \log L_t$ 都稳定在理论比率附近。 + +```{solution-end} +``` + +```{exercise} +:label: lv_ex2 + +在萨缪尔森示例中,两个模型都从 $Y_0 \approx 100$ 开始,远低于共同的稳态 $Y^* = 1000$。 + +现在改为利用通过 `stationary_init=True` 创建的模型 `model_stat_f` 和 `model_stat_g`,让两个模型都从各自的平稳分布开始。 + +1. 对每个模型分别模拟 500 条长度为 $T = 50$ 的路径。报告 $\log L_{50}$ 的中位数以及误差概率 $\alpha_{50}$、$\beta_{50}$,以及 $\frac{1}{2}(\alpha_{50} + \beta_{50})$。将其与从 $Y_0 \approx 100$ 开始的路径结果进行比较。 +1. 利用 `samuelson_kl_rate` 以及 $(Y_0, Y_{-1})$ 两个平稳分布之间的 Kullback-Leibler 散度,计算使得 $E_f [\log L_t] = 5$ 成立的周期数 $t$。 +1. 模拟该长度的路径,并绘制 $\alpha_t$ 和 $\beta_t$ 的图像。 +``` + +```{solution-start} lv_ex2 +:class: dropdown +``` + +以下是两种初始条件下,在 $T = 50$ 时的误差概率。 + +```{code-cell} ipython3 +T_s, N_s = 50, 500 + +paths_stat_f = simulate_var(model_stat_f, T_s, rng, N_s) +paths_stat_g = simulate_var(model_stat_g, T_s, rng, N_s) +log_L_stat_f = compute_likelihood_ratio_var(paths_stat_f, + model_stat_f, model_stat_g) +log_L_stat_g = compute_likelihood_ratio_var(paths_stat_g, + model_stat_f, model_stat_g) + +for label, log_L_f, log_L_g in [ + ("stationary start", log_L_stat_f, log_L_stat_g), + ("Y_0 ≈ 100", L_ratios_ff, L_ratios_gf)]: + α = np.mean(log_L_f[:, -1] < 0) + β = np.mean(log_L_g[:, -1] >= 0) + print(f"{label}:") + print(f" median log L_50: nature = f: {np.median(log_L_f[:, -1]):.3f}, " + f"nature = g: {np.median(log_L_g[:, -1]):.3f}") + print(f" α_50 = {α:.3f}, β_50 = {β:.3f}, " + f"average error = {0.5 * (α + β):.3f}") +``` + +从平稳分布出发,$\log L_{50}$ 的中位数都在零附近 $0.5$ 的范围内,$\alpha_{50}$ 大约为 $0.4$,并且似然比检验大约有三分之一的样本选错了模型。 + +而从 $Y_0 \approx 100$ 出发,每个模型的全部 $50$ 个样本都能正确选出模型。 + +在 $f$ 下,$E_f [\log L_t] = KL_0 + t \, h_{KL}(f, g)$,其中 $KL_0$ 是在 $f$ 与在 $g$ 下 $(Y_0, Y_{-1})$ 平稳分布之间的 Kullback-Leibler 散度。 + +```{code-cell} ipython3 +def kl_gauss(μ_1, Σ_1, μ_2, Σ_2): + """ + KL divergence of N(μ_2, Σ_2) from N(μ_1, Σ_1) + """ + n = len(μ_1) + Σ_2_inv = np.linalg.inv(Σ_2) + d = μ_1 - μ_2 + return 0.5 * (np.trace(Σ_2_inv @ Σ_1) - n + d @ Σ_2_inv @ d + + np.log(np.linalg.det(Σ_2) / np.linalg.det(Σ_1))) + +KL_0 = kl_gauss(model_stat_f.μ_0[1:], model_stat_f.Σ_0[1:, 1:], + model_stat_g.μ_0[1:], model_stat_g.Σ_0[1:, 1:]) +t_star = int(np.ceil((5 - KL_0) / h_fg)) + +print(f"KL_0 = {KL_0:.4f}, h_KL(f, g) = {h_fg:.5f}") +print(f"E_f[log L_50]: theory = {KL_0 + 50 * h_fg:.3f}, " + f"simulation = {log_L_stat_f[:, -1].mean():.3f}") +print(f"stationary start: E_f[log L_t] = 5 at t = {t_star}") + +# Transient from Y_0 ≈ 100: cumulative mean expected increments +t_transient = np.argmax(np.cumsum(inc_f) >= 5) + 1 +print(f"Y_0 ≈ 100: cumulative expected increments reach 5 at t = {t_transient}") +``` + +平均而言,大约 $750$ 期的平稳数据所含有关于 $b$ 的信息量,相当于从 $Y_0 \approx 100$ 开始的过渡过程中前三期所含的信息量。 + +```{code-cell} ipython3 +N_star = 200 + +paths_f = simulate_var(model_stat_f, t_star, rng, N_star) +paths_g = simulate_var(model_stat_g, t_star, rng, N_star) +log_L_f = compute_likelihood_ratio_var(paths_f, model_stat_f, model_stat_g) +log_L_g = compute_likelihood_ratio_var(paths_g, model_stat_f, model_stat_g) + +α_t = np.mean(log_L_f < 0, axis=0) +β_t = np.mean(log_L_g >= 0, axis=0) + +fig, ax = plt.subplots() +ax.plot(α_t, color='C0', lw=2, label=r'$\alpha_t$') +ax.plot(β_t, color='C1', lw=2, label=r'$\beta_t$') +ax.plot(0.5 * (α_t + β_t), 'g--', lw=2, label='average error') +ax.set_xlabel('$t$') +ax.set_ylabel('error probability') +ax.legend() +plt.show() + +print(f"at t = {t_star}: α = {α_t[-1]:.3f}, β = {β_t[-1]:.3f}") +``` + +即使经过大约 $750$ 期,两个误差概率仍大致保持在 $0.1$ 左右。 + +```{solution-end} +``` + +```{exercise} +:label: lv_ex3 + +假设示例 2 中的 $f$ 和 $g$ 都不是数据的生成模型。 + +而是由第三个矩阵为 $(A_h, C_h)$ 的 VAR 模型 $h$ 来生成数据。 + +证明 + +$$ +\frac{1}{t} \log L_t \to h_{KL}(h, g) - h_{KL}(h, f) +$$ + +几乎必然成立,其中 $h_{KL}(h, \cdot)$ 是用 $h$ 替代 $f$ 后的 {eq}`eq:var_kl_rate`。 + +这是 {doc}`likelihood_ratio_process` 中 {ref}`KL_link` 公式的 VAR 对应形式。 + +针对 $(A_h, C_h) = (A_f, C_g)$ 和 $(A_h, C_h) = (A_g, C_f)$ 两种情形,通过模拟验证该极限。 + +在每种情形下,似然比会选择哪个模型? +``` + +```{solution-start} lv_ex3 +:class: dropdown +``` + +写出 + +$$ +\ell_t = \log \frac{p_h(x_t | x_{t-1})}{p_g(x_t | x_{t-1})} - \log \frac{p_h(x_t | x_{t-1})}{p_f(x_t | x_{t-1})} +$$ + +在 $h$ 下取期望,其中 $x_{t-1}$ 取自 $h$ 的平稳分布,得到 $E_h [\ell_t] = h_{KL}(h, g) - h_{KL}(h, f)$。 + +随后利用 $h$ 下的遍历定理即可得到该几乎必然极限。 + +```{code-cell} ipython3 +model_h1 = create_var_model(model2_f.A, model2_g.C) +model_h2 = create_var_model(model2_g.A, model2_f.C) + +T_h, N_h = 1000, 20 +t_grid = np.arange(1, T_h + 1) + +fig, axes = plt.subplots(1, 2, figsize=(12, 5)) + +cases = [("(A_f, C_g)", r'$(A_h, C_h) = (A_f, C_g)$', model_h1), + ("(A_g, C_f)", r'$(A_h, C_h) = (A_g, C_f)$', model_h2)] + +for ax, (name, title, m_h) in zip(axes, cases): + K_f = kl_rate_var(m_h, model2_f) + K_g = kl_rate_var(m_h, model2_g) + paths = simulate_var(m_h, T_h, rng, N_h) + log_L = compute_likelihood_ratio_var(paths, model2_f, model2_g) + avg = log_L[:, 1:] / t_grid + ax.plot(t_grid, avg.T, color='C2', alpha=0.3, lw=1) + ax.axhline(K_g - K_f, color='k', ls='--', lw=2, + label=r'$h_{KL}(h, g) - h_{KL}(h, f)$') + ax.set_xscale('log') + ax.set_xlabel('$t$') + ax.set_ylabel(r'$\log L_t / t$') + ax.set_title(title) + ax.legend() + print(f"(A_h, C_h) = {name}: h_KL(h, f) = {K_f:.4f}, " + f"h_KL(h, g) = {K_g:.4f}, difference = {K_g - K_f:.4f}, " + f"mean of log L_T / T = {avg[:, -1].mean():.4f}") + +plt.tight_layout() +plt.show() +``` + +当 $(A_h, C_h) = (A_f, C_g)$ 时,$\log L_t \to -\infty$,似然比选择了 $g$,尽管 $f$ 具有正确的转移矩阵。 + +当 $(A_h, C_h) = (A_g, C_f)$ 时,$\log L_t \to +\infty$,似然比选择了 $f$,尽管 $g$ 具有正确的转移矩阵。 + +在这两种情形下,似然比都选择了具有正确冲击协方差矩阵的模型。 + +当 $(A_h, C_h) = (A_f, C_g)$ 时,$h_{KL}(h, f)$ 仅由协方差项构成,而 $h_{KL}(h, g)$ 仅由条件均值项构成。 + +当 $(A_h, C_h) = (A_g, C_f)$ 时,$f$ 与 $g$ 的角色互换。 + +在这两种情形下,协方差项都更大,这与上文针对示例 2 的分解结果一致。 + +```{solution-end} +``` diff --git a/lectures/market_diffusion.md b/lectures/market_diffusion.md index e9b54282..066ee8ec 100644 --- a/lectures/market_diffusion.md +++ b/lectures/market_diffusion.md @@ -69,14 +69,20 @@ translation: 第二,当信念偏悲观时,均衡实验是**过度**的;当信念偏乐观时,均衡实验是**不足**的,中间存在唯一的交叉点。 -第三,成功的新产品的扩散路径呈**S形**,这与一个悠久的经验传统相符,而拐点恰好出现在我们可以精确确定的某个信念处。 +第三,成功的新产品的无噪声扩散路径呈**S形**,这与一个悠久的经验传统相符,其拐点出现在我们可以精确确定的某个信念处。 ```{note} 与本节其余内容的联系是通过*信息的价值*建立的。 -{doc}`blackwell_kihlstrom` 表明,当决策问题的价值函数在信念上是凸的时,决策者恰好会从更具信息性的实验中获益,因为更具信息性的实验会以凸序展开后验分布。 +{doc}`blackwell_kihlstrom` 表明,更具信息性的实验会以凸序展开后验分布。 -在这里,信念是一个鞅,而实验决定了信念展开的速度,因此每个企业从实验中获得的收益取决于其价值函数的凸性。 +单个决策者的价值函数是若干在信念上为线性函数的最大值,因此是凸的,于是每个决策者都会从更具信息性的实验中弱获益。 + +而在博弈中,参与者的均衡价值函数未必是凸的,因为其他参与者的策略也会随信念变化。 + +在这里,信念是一个鞅,而实验决定了信念展开的速度,因此每个企业从实验中获得的收益取决于其均衡价值函数的凸性。 + +而本模型中两家企业的均衡价值函数都是凸的。 信念本身由一个对数似然比过程驱动,这与 {doc}`likelihood_ratio_process` 中研究的过程类似,只是现在运行在连续时间中。 ``` @@ -186,6 +192,8 @@ $$ (eq:md_variance) 这是通过扩散过程观察到的两点先验的标准滤波结果;参见 {cite:t}`LiptserShiryaev1977`。 +{doc}`likelihood_bayes` 和 {doc}`wald_friedman_2` 在离散时间中研究了同样的两点学习问题。 + {eq}`eq:md_variance` 的两个特征驱动了一切。 方差**与 $n$ 呈线性关系**,因此信息的到达速率与实验规模成比例,而只有新企业的销售才能产生信息。 @@ -205,7 +213,7 @@ $$ = \frac{(\mu_H - \mu_L)\,\Delta X - \tfrac12 n \Delta (\mu_H^2 - \mu_L^2)}{\sigma^2} . $$ (eq:md_loglr) -信念随后遵循贝叶斯法则的对数比形式,与离散时间讲座中完全相同, +信念随后遵循贝叶斯法则的对数比形式,与 {doc}`likelihood_bayes` 中完全相同, $$ \log\frac{\alpha_{t+\Delta}}{1 - \alpha_{t+\Delta}} @@ -285,6 +293,10 @@ $$ (eq:md_bellman) 由于信念是一个鞅,因此不会出现一阶导数项。 +我们所考虑的每一个策略都使 $n$ 保持远离零,因此信息会无限积累。 + +先验对 $\mu$ 的两个可能取值均赋予正概率,因此真实值相对于先验预测分布是绝对连续的,后验几乎必然收敛到真实值;参见 {doc}`merging_of_opinions` 中关于有限参数空间下贝叶斯学习的讨论。 + 由于 $\mu$ 最终会被了解,因此 $v$ 恰好是两个完全信息值的线性插值, $$ @@ -343,14 +355,36 @@ for a, mu_i in [(0.0, mkt.mu_L), (1.0, mkt.mu_H)]: A = np.linspace(1e-6, 1 - 1e-6, 4001) # full grid, for plotting A_int = np.linspace(0.05, 0.95, 1801) # strictly interior grid - -gap_myopic = n_star(mkt, A_int) - m_star(mkt, A_int) -print(f'\nn*(alpha) - m*(alpha) on [0.05, 0.95]: ' - f'min {gap_myopic.min():.5f}, at alpha = 0.5 it is ' - f'{float(n_star(mkt, 0.5) - m_star(mkt, 0.5)):.5f}') ``` -规划者总是比短视基准**多**进行实验,这体现了信息价值的跨期性,其表现形式为新产品销售量的额外增加。 +规划者总是比短视基准**多**进行实验。 + +设 $m_i = (\mu_i - s + h)/(2h)$ 为 $\mu = \mu_i$ 时完全信息下的高效份额,并设 $E_\alpha$ 表示对 $i \in \{L, H\}$ 以权重 $1 - \alpha$ 和 $\alpha$ 取平均。 + +将 $m_i$ 代入 {eq}`eq:md_vsocial` 可得 +$v(\alpha) - s - \frac h2 = h E_\alpha[m_i^2]$,因此 + +$$ +n^*(\alpha) = \sqrt{E_\alpha[m_i^2]} \geq E_\alpha[m_i] = m^*(\alpha) +$$ + +由詹森不等式可得,且当 $\alpha \in (0, 1)$ 时由于 $m_L \neq m_H$,不等号严格成立。 + +这个差距正是信息价值的跨期性,其表现形式为新产品销售量的额外增加。 + +```{code-cell} ipython3 +def E_alpha(f_L, f_H, a): + """Average of full-information quantities under belief a.""" + return (1 - a) * f_L + a * f_H + + +m_L, m_H = [(mu_i - mkt.s + mkt.h) / (2 * mkt.h) for mu_i in (mkt.mu_L, mkt.mu_H)] +print(f'max |n*(alpha)^2 - E[m_i^2]| ' + f'{np.abs(n_star(mkt, A) ** 2 - E_alpha(m_L ** 2, m_H ** 2, A)).max():.1e}') +print(f'max |m*(alpha) - E[m_i]| ' + f'{np.abs(m_star(mkt, A) - E_alpha(m_L, m_H, A)).max():.1e}') +print(f'n*(0.5) - m*(0.5) = {float(n_star(mkt, 0.5) - m_star(mkt, 0.5)):.5f}') +``` ## 均衡 @@ -416,11 +450,30 @@ def n_myopic(mkt, a): 将动态均衡与逐期博弈的静态均衡进行比较,揭示了本文核心的不对称性。 +在信念 $\alpha$ 下的静态博弈中,新企业的市场份额为 +$(\mu(\alpha) - s + h + p_1 - p_2)/(2h)$,而两家以收入最大化为目标的企业的一阶条件构成了关于 $(p_1, p_2)$ 的线性方程组。 + +我们直接求解该方程组,并将其解与动态均衡进行比较。 + ```{code-cell} ipython3 +def static_equilibrium(mkt, a): + """Prices and share in the one-shot Hotelling game at belief a.""" + d = mkt.mu(a) - mkt.s + # firm 1: -2 p1 + p2 = d - h; firm 2: p1 - 2 p2 = -(d + h) + coef = np.array([[-2.0, 1.0], [1.0, -2.0]]) + p1_s, p2_s = np.linalg.solve(coef, np.stack([d - mkt.h, -(d + mkt.h)])) + n_s = (d + mkt.h + p1_s - p2_s) / (2 * mkt.h) + return p1_s, p2_s, n_s + + +p1_s, p2_s, n_s = static_equilibrium(mkt, A_int) +print('checking the static formulas, on [0.05, 0.95]') +print(f' max |p1_myopic - p1_static| {np.abs(p1_myopic(mkt, A_int) - p1_s).max():.1e}') +print(f' max |n_myopic - n_static| {np.abs(n_myopic(mkt, A_int) - n_s).max():.1e}') print('comparing the dynamic equilibrium with the static one, on [0.05, 0.95]') -print(f' max |p2 - p2_myopic| {np.abs(p2(mkt, A_int) - p2(mkt, A_int)).max():.2e}') -print(f' min (p1 - p1_myopic) {(p1(mkt, A_int) - p1_myopic(mkt, A_int)).min():.5f}') -print(f' min (n_eq - n_myopic) {(n_eq(mkt, A_int) - n_myopic(mkt, A_int)).min():.5f}') +print(f' max |p2 - p2_static| {np.abs(p2(mkt, A_int) - p2_s).max():.1e}') +print(f' min (p1 - p1_static) {(p1(mkt, A_int) - p1_s).min():.5f}') +print(f' min (n_eq - n_static) {(n_eq(mkt, A_int) - n_s).min():.5f}') ``` 新企业的价格*恰好*等于它的短视价格,这是线性偏好结构和无贴现假设的一个边缘性结果。 @@ -447,9 +500,35 @@ print(f'ratio voi_1 / voi_2: min {np.min(voi_1 / voi_2):.6f}, ' 这正是 {doc}`blackwell_kihlstrom` 的逻辑在起作用:信念是一个鞅,更多的实验会使其进一步展开,而拥有凸值函数的企业会从这种展开中获益。 -更令人意外的是,这个比值在任何信念下都恰好等于 $2$。 +更令人意外的是,这个比值在任何信念下都恰好等于 $2$:**老牌**企业对信息的重视程度是进入者的两倍。 + +设 $n_i$ 为当 $\mu = \mu_i$ 时完全信息均衡下的市场份额,并设 +$\bar n(\alpha) = E_\alpha[n_i]$,这等于静态均衡份额 `n_myopic`。 + +完全信息下的价格为 $p_{1,i} = 2h(1 - n_i)$ 和 $p_{2,i} = 2h n_i$,因此 +$v_2 = 2h E_\alpha[n_i^2] = 2h n^2$,$v_1 = 2h E_\alpha[(1 - n_i)^2] = 2h(1 - 2\bar n + n^2)$。 -**老牌**企业对信息的重视程度是进入者的两倍,因为在均衡中,正是老牌企业相对于不确定性消解后本可获得的收入,放弃了当前的收入。 +进入者按其静态价格 $p_2 = 2h\bar n$ 定价,而老牌企业的定价为 +$p_1 = 2h(1 - \bar n) + 2h(n - \bar n)$,高出其静态价格 $2h(n - \bar n)$。 + +代入可得: + +$$ +v_2 - n p_2 = 2h\, n (n - \bar n), +\qquad +v_1 - (1 - n) p_1 = 4h\, n (n - \bar n) . +$$ + +由延森不等式,当 $\alpha \in (0, 1)$ 时 $n = \sqrt{E_\alpha[n_i^2]} > E_\alpha[n_i] = \bar n$, +这使得两个差距都为正。 + +```{code-cell} ipython3 +n_bar = n_myopic(mkt, A) +print(f'max |voi_2 - 2h n (n - n_bar)| ' + f'{np.abs(voi_2 - 2 * mkt.h * n_eq(mkt, A) * (n_eq(mkt, A) - n_bar)).max():.1e}') +print(f'max |voi_1 - 4h n (n - n_bar)| ' + f'{np.abs(voi_1 - 4 * mkt.h * n_eq(mkt, A) * (n_eq(mkt, A) - n_bar)).max():.1e}') +``` ## 先过度实验,后不足实验 @@ -487,10 +566,19 @@ axes[1].set(xlabel=r'$\alpha$', ylabel=r'$n^*(\alpha) - n(\alpha)$', fig.tight_layout() plt.show() -print(f'gap is monotone increasing: {np.all(np.diff(gap) > 0)}') -print(f'number of sign changes: {int(np.sum(np.diff(np.sign(gap)) != 0))}') +n_L, n_H = n_eq(mkt, 0.0), n_eq(mkt, 1.0) +print(f'n*^2 - n^2 at alpha = 0: m_L^2 - n_L^2 = {m_L ** 2 - n_L ** 2:+.4f}') +print(f'n*^2 - n^2 at alpha = 1: m_H^2 - n_H^2 = {m_H ** 2 - n_H ** 2:+.4f}') ``` +单次交叉性来自我们之前已经使用过的仿射结构。 + +$n^*(\alpha)^2 = E_\alpha[m_i^2]$ 与 $n(\alpha)^2 = E_\alpha[n_i^2]$ 都是关于 $\alpha$ 的仿射函数,因此 $n^*(\alpha)^2 - n(\alpha)^2$ 也是仿射的,至多改变一次符号。 + +差值 $n^* - n$ 的符号与之相同。 + +条件 {eq}`eq:md_condition4` 使得 $m_L < n_L$ 且 $m_H > n_H$,因此该差值在 $\alpha = 0$ 处为负,在 $\alpha = 1$ 处为正,恰好穿越零点一次。 + 这里的直觉在于谁必须降价来争取一个买家。 在悲观信念下,进入者规模较小,因此再吸引一个买家在存量收入上的成本很低,而老牌企业规模较大,不愿通过对所有人降价来保住自己的份额。 @@ -512,11 +600,30 @@ d\alpha = \frac{n(\alpha)(\mu_H - \mu_L)^2 \alpha (1-\alpha)^2}{\sigma^2}\, dt + \frac{(\mu_H - \mu_L)\alpha(1-\alpha)\sqrt{n(\alpha)}}{\sigma}\, dB . $$ (eq:md_conditional) -去除噪声后,得到平均信念的确定性路径。 +等价地,对数比率 $\log(\alpha/(1-\alpha))$ 以速率 $n(\alpha)(\mu_H - \mu_L)^2/(2\sigma^2)$ 向上漂移。 + +因子 $(\mu_H - \mu_L)^2/(2\sigma^2)$ 是在 $\mu_H$ 与 $\mu_L$ 下信号分布之间单位时间的 Kullback–Leibler 散度(参见 {ref}`rel_entropy`),而 $n(\alpha)$ 则根据实验规模对其进行缩放;{ref}`md_ex5` 推导了这一漂移,并用它来界定学习所需的期望时间。 + +遵循 {cite:t}`BergemannValimaki1997`,我们略去噪声项。 + +信念路径 $\hat\alpha(t)$ 随后满足如下常微分方程 + +$$ +\frac{d\hat\alpha}{dt} = \frac{n(\hat\alpha)(\mu_H - \mu_L)^2 \hat\alpha (1-\hat\alpha)^2}{\sigma^2}, +\qquad \hat\alpha(0) = \alpha_0 , +$$ (eq:md_ode) + +而 $\hat n(t) = n(\hat\alpha(t))$ 则是相应的市场份额。 + +{cite:t}`BergemannValimaki1997` 将 $\hat\alpha$ 称为平均后验。 + +由于 {eq}`eq:md_conditional` 中的漂移项在 $\alpha$ 中是非线性的,所以 $\hat\alpha(t)$ 并非条件均值 $E[\alpha_t \mid \mu = \mu_H]$,而 $\hat n(t)$ 也并非 $E[n(\alpha_t) \mid \mu = \mu_H]$。 + +我们将 $\hat\alpha$ 和 $\hat n$ 称为无噪声路径。 ```{code-cell} ipython3 -def mean_belief_path(mkt, alpha0, T, dt, policy): - """Deterministic path of the mean posterior when mu = mu_H.""" +def noise_free_belief_path(mkt, alpha0, T, dt, policy): + """Euler solution of the noise-free belief equation when mu = mu_H.""" steps = int(T / dt) a = np.empty(steps + 1) a[0] = alpha0 @@ -530,15 +637,33 @@ def mean_belief_path(mkt, alpha0, T, dt, policy): ```{prf:proposition} S形扩散 :label: md_prop_sshape -在产品确实优质的条件下,平均市场份额 $\hat n(t)$ 随时间递增。 +设 $\hat\alpha(t)$ 在 $\alpha_0 \in (0, 1)$ 条件下求解 {eq}`eq:md_ode`,并令 +$\hat n(t) = n(\hat\alpha(t))$。 -当 $\hat\alpha(t) \leq 1/3$ 时,其增长速率本身是递增的;此后则是递减的。 +无噪声市场份额 $\hat n(t)$ 随时间递增。 + +当 $\hat\alpha(t) < 1/3$ 时,其增长速率本身是递增的;此后则是递减的。 ``` +证明再次利用了仿射结构。 + +由于 $n(\alpha)^2 = n_L^2 + (n_H^2 - n_L^2)\alpha$,乘积 $n(\alpha)n'(\alpha)$ 等于常数 $(n_H^2 - n_L^2)/2$,并且 + +$$ +\frac{d\hat n}{dt} = n'(\hat\alpha)\frac{d\hat\alpha}{dt} += \frac{(n_H^2 - n_L^2)(\mu_H - \mu_L)^2}{2\sigma^2}\, \hat\alpha (1 - \hat\alpha)^2 . +$$ + +由于 $\hat\alpha$ 随 $t$ 递增,且 $\alpha(1-\alpha)^2$ 恰好在 $\alpha < 1/3$ 时随 $\alpha$ 递增,因此 $d\hat n/dt$ 在 $\hat\alpha = 1/3$ 之前上升,此后下降。 + 两种力量的结合产生了S形曲线。 随着信念远离零,学习会加速,从而加快进入者份额的增长;但均衡份额 $n(\alpha)$ 是凹的,因此信念的进一步改善所带来的份额增益会越来越小。 +S形曲线及其在 $\hat\alpha = 1/3$ 处的拐点是无噪声路径的性质。 + +{ref}`md_ex4` 通过蒙特卡洛方法计算 $E[\alpha_t \mid \mu = \mu_H]$ 和 $E[n_t \mid \mu = \mu_H]$,并将它们与 $\hat\alpha$ 和 $\hat n$ 进行比较。 + ```{code-cell} ipython3 --- mystnb: @@ -549,8 +674,8 @@ mystnb: T, dt, alpha0 = 8.0, 1e-3, 0.03 policy = lambda a: n_eq(mkt, a) -a_mean = mean_belief_path(mkt, alpha0, T, dt, policy) -t_grid = np.linspace(0, T, len(a_mean)) +a_hat = noise_free_belief_path(mkt, alpha0, T, dt, policy) +t_grid = np.linspace(0, T, len(a_hat)) rng = np.random.default_rng(12) paths = simulate_beliefs(mkt, alpha0, T, dt, np.full(6, mkt.mu_H), rng, policy) @@ -558,14 +683,14 @@ paths = simulate_beliefs(mkt, alpha0, T, dt, np.full(6, mkt.mu_H), rng, policy) fig, axes = plt.subplots(1, 2, figsize=(12, 4.2)) for pth in paths: axes[0].plot(t_grid, pth, lw=0.7, alpha=0.55, color='C0') -axes[0].plot(t_grid, a_mean, lw=2.5, color='C3', label='mean path') +axes[0].plot(t_grid, a_hat, lw=2.5, color='C3', label='noise-free path') axes[0].axhline(1 / 3, color='0.5', ls=':', lw=1.5) axes[0].set(xlabel='time', ylabel=r'$\alpha(t)$', title='beliefs') axes[0].legend(fontsize=9) for pth in paths: axes[1].plot(t_grid, n_eq(mkt, pth), lw=0.7, alpha=0.55, color='C0') -axes[1].plot(t_grid, n_eq(mkt, a_mean), lw=2.5, color='C3', label='mean path') +axes[1].plot(t_grid, n_eq(mkt, a_hat), lw=2.5, color='C3', label='noise-free path') axes[1].set(xlabel='time', ylabel=r'$n(t)$', title='market share of the new firm') axes[1].legend(fontsize=9) @@ -573,14 +698,14 @@ fig.tight_layout() plt.show() ``` -拐点恰好出现在 {prf:ref}`md_prop_sshape` 所说的位置。 +无噪声路径的拐点恰好出现在 {prf:ref}`md_prop_sshape` 所说的位置。 ```{code-cell} ipython3 -n_mean = n_eq(mkt, a_mean) -growth = np.gradient(n_mean, t_grid) +n_hat = n_eq(mkt, a_hat) +growth = np.gradient(n_hat, t_grid) k = np.argmax(growth) -print(f'share grows fastest at t = {t_grid[k]:.3f}, ' - f'where alpha = {a_mean[k]:.4f} (theory: 1/3)') +print(f'noise-free share grows fastest at t = {t_grid[k]:.3f}, ' + f'where alpha_hat = {a_hat[k]:.4f} (theory: 1/3)') drift = policy(A) * (mkt.mu_H - mkt.mu_L) ** 2 * A * (1 - A) ** 2 print(f'belief drift peaks at alpha = {A[np.argmax(drift)]:.4f} ' @@ -600,9 +725,10 @@ fig, ax = plt.subplots() for pth in paths: ax.plot(t_grid, p1(mkt, pth), lw=0.7, alpha=0.5, color='C0') ax.plot(t_grid, p2(mkt, pth), lw=0.7, alpha=0.5, color='C1') -ax.plot(t_grid, p1(mkt, a_mean), lw=2.5, color='C0', - label=r'$p_1$, established firm') -ax.plot(t_grid, p2(mkt, a_mean), lw=2.5, color='C1', label=r'$p_2$, new firm') +ax.plot(t_grid, p1(mkt, a_hat), lw=2.5, color='C0', + label=r'$p_1$, established firm (noise-free path)') +ax.plot(t_grid, p2(mkt, a_hat), lw=2.5, color='C1', + label=r'$p_2$, new firm (noise-free path)') ax.set(xlabel='time', ylabel='price', title='the incumbent retreats as the entrant is vindicated') ax.legend() @@ -653,7 +779,9 @@ for name, x0, xT, pred in rows: 在这里,没有人为信息定价,而有趣的经济学源自这样一个事实:只有一家企业的销售能够产生信息。 -两者都建立在 {doc}`blackwell_kihlstrom` 提出的同一基础之上:对决策者而言,信息恰好在决策问题的价值函数在信念上是凸的这一程度上才具有价值。 +两者都建立在 {doc}`blackwell_kihlstrom` 提出的同一基础之上:信息量更大的实验会以凸序扩散后验信念,而价值函数在信念上是凸的决策者会从这种扩散中获益。 + +单个决策者的价值函数总是在信念上是凸的,但博弈中的均衡价值函数未必如此。 {cite:t}`BergemannValimaki1997` 的独特之处在于,这种凸性是由*竞争对手*共同分享的。 @@ -822,18 +950,42 @@ $\mu_H - \mu_L < 2h$。 提高 $h$ 则会产生相反的效果,因为强烈依附于自身偏好的买家会削弱价格这一竞争工具的作用,从而使进入者比规划者所选择的更为自由地扩张。 -这种对称性是关键所在。 +这个对称公式在中点发生偏移时并不成立,但存在一个一般的封闭形式。 + +设 $d_i = (\mu_i - s)/h$。 + +高效份额与完全信息下的均衡份额分别为 $m_i = (1 + d_i)/2$ 和 +$n_i = (1 + d_i/3)/2$,因此 $m_i^2 - n_i^2 = \varphi(d_i)/9$,其中 +$\varphi(d) = d(3 + 2d)$。 + +由于 $n^*(\alpha)^2 - n(\alpha)^2 = E_\alpha[m_i^2 - n_i^2]$ 是 $\alpha$ 的仿射函数,它在以下点取零值: + +$$ +\alpha^{\mathrm{cross}} = \frac{\varphi(d_L)}{\varphi(d_L) - \varphi(d_H)} . +$$ + +条件 {eq}`eq:md_condition4` 给出 $d_L \in (-1, 0)$ 和 $d_H \in (0, 1)$,因此 +$\varphi(d_L) < 0 < \varphi(d_H)$,从而 $\alpha^{\mathrm{cross}} \in (0, 1)$。 + +当 $d_H = -d_L = (\mu_H - \mu_L)/(2h)$ 时,该公式化简为 +$\frac12 - (\mu_H - \mu_L)/(6h)$。 ```{code-cell} ipython3 +def crossing_formula(mkt): + φ = lambda d: d * (3 + 2 * d) + d_L, d_H = (mkt.mu_L - mkt.s) / mkt.h, (mkt.mu_H - mkt.s) / mkt.h + return φ(d_L) / (φ(d_L) - φ(d_H)) + + print('moving the quality midpoint away from s, with mu = (3.4, 4.6), h = 1') for s_ in [3.9, 4.0, 4.1]: m_ = Market(s=s_, h=1, mu_L=3.4, mu_H=4.6) - mid = (3.4 + 4.6) / 2 - print(f' s = {s_} (midpoint {mid}): crossing = {crossing(m_):.6f}' - f' formula = {0.5 - 1.2 / 6:.6f}') + print(f' s = {s_}: bisection = {crossing(m_):.6f}' + f' general formula = {crossing_formula(m_):.6f}' + f' symmetric formula = {0.5 - 1.2 / 6:.6f}') ``` -一旦中点不再等于 $s$,这个公式就会失效,因此它是一个边缘性的结果,而非一般性结论。 +一般公式在每个 $s$ 处都与二分法结果相符;而对称公式只在 $s = 4$ 处才相符。 ```{solution-end} ``` @@ -844,9 +996,9 @@ for s_ in [3.9, 4.0, 4.1]: 本练习将与 {doc}`blackwell_kihlstrom` 的联系精确化。 -在那一讲中,决策者恰好在决策问题的价值函数在信念上是凸的时才能从更具信息性的实验中获益,因为更具信息性的实验会产生后验分布的均值保持展开。 +在那一讲中,更具信息性的实验会产生后验分布的均值保持展开,而价值函数在信念上为凸的决策者能从中获益。 -在这里,信念是一个鞅,而实验决定了它展开的速度,因此同样的逻辑适用于每一家企业。 +在这里,信念是一个鞅,而实验决定了它展开的速度,因此同样的逻辑适用于每一家企业,只要其均衡价值函数是凸的。 1. 绘制每家企业的信息价值(即 $v_i(\alpha)$ 减去当前均衡收入)对 $\alpha$ 的曲线图。 @@ -903,8 +1055,293 @@ print(f'minimum of V1\'\' {V1pp.min():.4f} minimum of V2\'\' {V2pp.min():.4 而且学习速度 $\Sigma^2(\alpha) \propto \alpha^2(1-\alpha)^2$ 同样趋于零,因此即便价值函数是凸的,一个不再揭示任何信息的实验也不会带来任何收益。 -而两个二阶导数在端点处却*并不*趋于零,这恰恰是 -{doc}`blackwell_kihlstrom` 所强调的要点:为信息付费的*意愿*一直保持为正,但当信念趋于退化时,信息的*供给*却枯竭了。 +而两个二阶导数在端点处并不趋于零,反而发散。 + +在 $\alpha = 0$ 附近,新企业的信息价值近似为 +$h(n_H - n_L)^2\alpha$,而 $\Sigma^2(\alpha) \approx (\mu_H - \mu_L)^2\alpha^2/\sigma^2$。 + +因此 $V_2''(\alpha) \approx 2h(n_H - n_L)^2\sigma^2/\bigl(n_L(\mu_H - \mu_L)^2\alpha\bigr)$, +所以 $\alpha V_2''(\alpha)$ 收敛于一个正常数,在 $\alpha = 1$ 附近用 $1 - \alpha$ 代替 $\alpha$,同样的结论对 $V_1''$ 也成立。 + +信念展开的影子价值 $V_i''$ 以 $1/\alpha$ 的速度增长,但实验使信念展开的速度 $\Sigma^2$ 却以 $\alpha^2$ 的速度下降。 + +两者的乘积——即信息价值——因而呈线性方式趋于零。 + +```{code-cell} ipython3 +n_L, n_H = n_eq(mkt, 0.0), n_eq(mkt, 1.0) +limit = 2 * mkt.h * (n_H - n_L) ** 2 * mkt.sigma ** 2 / ( + n_L * (mkt.mu_H - mkt.mu_L) ** 2) +for a in [1e-2, 1e-3, 1e-4]: + voi_2a = v2(mkt, a) - n_eq(mkt, a) * p2(mkt, a) + V2pp_a = 2 * voi_2a / (n_eq(mkt, a) * Sigma2(mkt, a)) + print(f'alpha = {a:.0e}: alpha * V2\'\' = {a * V2pp_a:.4f}') +print(f'limit: {limit:.4f}') +``` + +```{solution-end} +``` + +```{exercise-start} +:label: md_ex4 +``` + +{prf:ref}`md_prop_sshape` 描述的是无噪声路径 $\hat\alpha(t)$,而不是信念的条件均值。 + +1. 使用 `simulate_beliefs` 估计 $E[\alpha_t \mid \mu = \mu_H]$ 和 + $E[n(\alpha_t) \mid \mu = \mu_H]$,取 $t \in [0, 8]$,初始值为 + $\alpha_0 = 0.03$,并将它们与 $\hat\alpha(t)$ 和 $\hat n(t)$ 一起绘图比较。 + +2. 找出 $E[n(\alpha_t) \mid \mu = \mu_H]$ 增长最快的时间,以及该时刻 $E[\alpha_t \mid \mu = \mu_H]$ 的值。 + +3. 解释为何无噪声路径会领先于条件均值。 + +*提示:* 对蒙特卡洛平均值关于时间求导会放大抽样噪声。 + +应改用 $\frac{d}{dt}E[n(\alpha_t)] = E[\mathcal{G}n(\alpha_t)]$,其中 +$\mathcal{G}n = n' \times \text{漂移} + \frac12 n'' \times \text{方差}$ 是信念过程 +{eq}`eq:md_conditional` 作用于 $n$ 的生成元。 + +```{exercise-end} +``` + +```{solution-start} md_ex4 +:class: dropdown +``` + +以下是一种解法。 + +设 $n(\alpha)^2 = n_L^2 + b\alpha$,其中 $b = n_H^2 - n_L^2$,令 +$k = (\mu_H - \mu_L)^2/\sigma^2$。 + +那么 $n' = b/(2n)$,$n'' = -b^2/(4n^3)$,代入 {eq}`eq:md_conditional` 的系数得到 + +$$ +\mathcal{G}n(\alpha) = \frac{bk}{2}\,\alpha(1-\alpha)^2\left[1 - \frac{b\alpha}{4n(\alpha)^2}\right] . +$$ + +第一项是沿无噪声路径的变化率 $d\hat n/dt$;第二项是源自 $n$ 的凹性的伊藤修正项。 + +为节省内存,我们分五批模拟共10,000条路径。 + +```{code-cell} ipython3 +alpha0, T4, dt4 = 0.03, 8.0, 5e-3 +n_L, n_H = n_eq(mkt, 0.0), n_eq(mkt, 1.0) +b = n_H ** 2 - n_L ** 2 +k2 = (mkt.mu_H - mkt.mu_L) ** 2 / mkt.sigma ** 2 + + +def generator_n(a): + """Generator of the belief process under mu_H applied to n(alpha).""" + n = n_eq(mkt, a) + return 0.5 * b * k2 * a * (1 - a) ** 2 * (1 - b * a / (4 * n ** 2)) + + +rng = np.random.default_rng(2024) +M_batch, n_batches = 2_000, 5 +sum_a = sum_n = sum_g = 0.0 +for _ in range(n_batches): + pth = simulate_beliefs(mkt, alpha0, T4, dt4, np.full(M_batch, mkt.mu_H), + rng, policy) + sum_a = sum_a + pth.sum(axis=0) + sum_n = sum_n + n_eq(mkt, pth).sum(axis=0) + sum_g = sum_g + generator_n(pth).sum(axis=0) +M_total = M_batch * n_batches +E_a, E_n, E_g = sum_a / M_total, sum_n / M_total, sum_g / M_total + +t4 = np.linspace(0, T4, len(E_a)) +a_hat4 = noise_free_belief_path(mkt, alpha0, T4, dt4, policy) + +fig, axes = plt.subplots(1, 2, figsize=(12, 4.2)) +axes[0].plot(t4, a_hat4, lw=2, color='C3', label=r'noise-free $\hat\alpha(t)$') +axes[0].plot(t4, E_a, lw=2, color='C0', label=r'$E[\alpha_t \mid \mu_H]$') +axes[0].axhline(1 / 3, color='0.5', ls=':', lw=1.5) +axes[0].set(xlabel='time', ylabel='belief', title='beliefs') +axes[0].legend(fontsize=9) +axes[1].plot(t4, n_eq(mkt, a_hat4), lw=2, color='C3', + label=r'noise-free $\hat n(t)$') +axes[1].plot(t4, E_n, lw=2, color='C0', label=r'$E[n(\alpha_t) \mid \mu_H]$') +axes[1].set(xlabel='time', ylabel='market share of the new firm', + title='market shares') +axes[1].legend(fontsize=9) +fig.tight_layout() +plt.show() + +print(f'{"t":>4}{"alpha_hat":>11}{"E[alpha]":>10}{"n_hat":>8}{"E[n]":>8}') +for t in [2, 4, 6, 8]: + j = int(round(t / dt4)) + print(f'{t:>4}{a_hat4[j]:11.3f}{E_a[j]:10.3f}' + f'{n_eq(mkt, a_hat4[j]):8.3f}{E_n[j]:8.3f}') + +j = np.argmax(E_g) +near = t4[E_g > 0.99 * E_g.max()] +print(f'\nE[n_t] grows fastest at t = {t4[j]:.2f}, where E[alpha_t] = {E_a[j]:.3f}') +print(f'its growth rate is within 1% of the maximum for t in ' + f'[{near.min():.2f}, {near.max():.2f}]') + +A_c = np.linspace(1e-3, 1 - 1e-3, 9_999) +drift_c = n_eq(mkt, A_c) * A_c * (1 - A_c) ** 2 +curv = np.gradient(np.gradient(drift_c, A_c), A_c) +print(f'the belief drift is concave for alpha below {A_c[np.argmax(curv > 0)]:.2f}') +``` + +无噪声路径明显领先于条件均值:在 $t = 4$ 时,它给出的信念为0.64、份额为0.561,而条件均值分别约为0.38和0.48。 + +条件均值份额同样呈S形。 + +它在与无噪声份额大致相同的时间点——约 $t = 2.4$——增长最快,但此时条件均值信念约为0.21,而非1/3。 + +$E[n_t \mid \mu_H]$ 的增长率在 $t \approx 2.0$ 到 $t \approx 2.8$ 之间都处于最大值的百分之一以内,因此增长最快的确切日期难以精确定位。 + +有两种力量在拖慢均值。 + +{eq}`eq:md_conditional` 中的漂移项在 $\alpha$ 小于约0.72时是凹的,因此只要大多数路径都处于该区域,各路径漂移的平均值就会低于平均信念处的漂移。 + +那些早期收到坏消息的路径会沉向 $\alpha = 0$,在那里漂移和波动率都趋于消失,学习几乎停滞;这些路径拉低了均值。 ```{solution-end} -``` \ No newline at end of file +``` + +```{exercise-start} +:label: md_ex5 +``` + +设 $\ell_t = \log\bigl(\alpha_t/(1-\alpha_t)\bigr)$, +$\kappa = (\mu_H - \mu_L)^2/(2\sigma^2)$。 + +1. 利用 {eq}`eq:md_signal` 和 {eq}`eq:md_loglr` 证明,在 $\mu = \mu_H$ 条件下 + + $$ + d\ell = \kappa\, n(\alpha)\, dt + \frac{\mu_H - \mu_L}{\sigma}\sqrt{n(\alpha)}\, dB , + $$ + + 而在 $\mu = \mu_L$ 条件下漂移为 $-\kappa\, n(\alpha)$。 + 将 $\kappa$ 解释为一个库尔贝克-莱布勒散度率。 + +2. 当 $\mu = \mu_H$ 时,设 $\tau$ 为信念从 $\alpha_0 = 0.03$ 出发首次到达0.9的时刻。 + 利用第1部分的结论、可选停止定理以及 $n(\alpha) \in (1/3, 2/3)$,给出 + $E[\tau]$ 的上下界,并通过模拟进行验证。 + +3. 对 $\mu = \mu_L$ 的情形重复上述过程。 + 解释为何此时信念从0.03上升到0.9的期望时间为无穷大,转而给出信念从0.97下降到0.1的期望时间的上下界。 + 解释为何这两个模拟得到的期望时间不同,尽管上下界是相同的。 + +```{exercise-end} +``` + +```{solution-start} md_ex5 +:class: dropdown +``` + +以下是一种解法。 + +*第1部分。* +在连续时间下,{eq}`eq:md_loglr` 变为 +$d\ell = \bigl[(\mu_H - \mu_L)\,dX - \frac12 n(\mu_H^2 - \mu_L^2)\,dt\bigr]/\sigma^2$。 + +在 $\mu = \mu_H$ 条件下,$dX = n\mu_H\,dt + \sigma\sqrt{n}\,dB$,因此 $\ell$ 的漂移为 + +$$ +\frac{n}{\sigma^2}\left[(\mu_H - \mu_L)\mu_H - \tfrac12(\mu_H - \mu_L)(\mu_H + \mu_L)\right] += \frac{n(\mu_H - \mu_L)^2}{2\sigma^2} = \kappa n +$$ + +其扩散系数为 $(\mu_H - \mu_L)\sqrt{n}/\sigma$。 + +在 $\mu = \mu_L$ 条件下,将括号第一项中的 $\mu_H$ 替换为 $\mu_L$,得到漂移为 $-\kappa n$。 + +在长度为 $\Delta$、$n = 1$ 的区间内,增量 $\Delta X$ 在 $\mu_H$ 下服从 +$N(\mu_H\Delta, \sigma^2\Delta)$,在 $\mu_L$ 下服从 $N(\mu_L\Delta, \sigma^2\Delta)$。 + +这两个分布之间的库尔贝克-莱布勒散度,无论方向如何, +都是 $(\mu_H - \mu_L)^2\Delta/(2\sigma^2) = \kappa\Delta$(参见 {ref}`rel_entropy`)。 + +所以对数几率以 $n$ 倍的KL散度率向真值漂移,这正是 +{doc}`likelihood_ratio_process` 中期望对数似然比与KL散度之间联系的连续时间版本。 + +*第2部分。* +过程 $\ell_t - \ell_0 - \kappa\int_0^t n(\alpha_s)\,ds$ 是一个鞅。 + +由于 $n \geq n_L > 0$,$\ell$ 的漂移以一个正常数为下界, +因此 $E[\tau] < \infty$,可选停止定理适用。 + +由于 $\ell$ 的路径是连续的,$\ell_\tau = \ell^* = \log 9$。 + +因此 + +$$ +\kappa\, E\left[\int_0^\tau n(\alpha_s)\,ds\right] = \ell^* - \ell_0 , +$$ + +而 $\frac13 E[\tau] < E\left[\int_0^\tau n(\alpha_s)\,ds\right] < \frac23 E[\tau]$ 给出 + +$$ +\frac{3}{2}\,\frac{\ell^* - \ell_0}{\kappa} < E[\tau] < 3\,\frac{\ell^* - \ell_0}{\kappa} . +$$ + +在本讲参数下,$n$ 实际上始终保持在 $[n_L, n_H] = [0.35, 0.65]$ 之内,这进一步将上下界收紧为 +$(\ell^* - \ell_0)/(\kappa n_H) \le E[\tau] \le (\ell^* - \ell_0)/(\kappa n_L)$。 + +*第3部分。* +在 $\mu = \mu_L$ 条件下,由伊藤引理及第1部分的结论可知,几率 +$e^{\ell_t} = \alpha_t/(1-\alpha_t)$ 构成一个鞅:$\ell$ 的漂移 $-\kappa n$ +恰为其瞬时方差 $2\kappa n$ 的负二分之一。 + +这些几率等于先验几率乘以 +{doc}`likelihood_ratio_process` 中研究的那类似然比过程。 + +当信念首次到达0.9时停止,此时几率被限制在9以内,而在那些永远达不到该点的路径上 $\ell_t \to -\infty$。 + +可选停止定理给出信念从0.03达到0.9的概率为 +$(0.03/0.97)/9 \approx 0.0034$,因此几乎可以肯定它永远不会达到,期望命中时间为无穷大。 + +信念从0.97下降到0.1所需的时间遵循第2部分中对 $-\ell$ 应用的论证,其中距离 +$|\ell^* - \ell_0| = \log 9 + \log(0.97/0.03)$ 相同,因此上下界也相同。 + +```{code-cell} ipython3 +def first_passage_times(mkt, alpha0, alpha_target, mu_true, M, dt, T, rng): + """First times at which the belief reaches alpha_target (nan if not by T).""" + dmu, half = mkt.mu_H - mkt.mu_L, (mkt.mu_H ** 2 - mkt.mu_L ** 2) / 2 + ell = np.full(M, np.log(alpha0 / (1 - alpha0))) + ell_target = np.log(alpha_target / (1 - alpha_target)) + up = alpha_target > alpha0 + tau = np.full(M, np.nan) + alive = np.ones(M, dtype=bool) + for j in range(int(T / dt)): + n = policy(1 / (1 + np.exp(-ell[alive]))) + dX = (n * mu_true * dt + + mkt.sigma * np.sqrt(n * dt) * rng.standard_normal(alive.sum())) + ell[alive] += (dmu * dX - n * dt * half) / mkt.sigma ** 2 + hit = alive & ((ell >= ell_target) if up else (ell <= ell_target)) + tau[hit] = (j + 1) * dt + alive &= ~hit + if not alive.any(): + break + return tau + + +κ = (mkt.mu_H - mkt.mu_L) ** 2 / (2 * mkt.sigma ** 2) +rng = np.random.default_rng(7) +cases = [('good product, 0.03 -> 0.9', 0.03, 0.9, mkt.mu_H), + ('bad product, 0.97 -> 0.1', 0.97, 0.1, mkt.mu_L)] +print(f'{"":27}{"bounds (1/3, 2/3)":>20}{"bounds (n_L, n_H)":>20}{"simulated":>16}') +for name, a_start, a_end, mu_true in cases: + dist = abs(np.log(a_end / (1 - a_end)) - np.log(a_start / (1 - a_start))) + tau = first_passage_times(mkt, a_start, a_end, mu_true, 4_000, 5e-3, 100.0, rng) + print(f'{name:27}{1.5 * dist / κ:9.2f},{3 * dist / κ:9.2f} ' + f'{dist / (κ * n_H):9.2f},{dist / (κ * n_L):9.2f} ' + f'{np.nanmean(tau):9.2f} ({np.nanstd(tau) / np.sqrt(len(tau)):.2f})') +``` + +两个模拟均值都落在上下界之内。 + +可选停止定理所确定的是期望累积实验规模 +$E\left[\int_0^\tau n(\alpha_s)\,ds\right]$,而非 $E[\tau]$ 本身。 + +一个从悲观信念出发的好产品,在市场对其进行了解的过程中,只卖给一小部分买家,接近 $n_L$。 + +而一个从乐观信念出发的坏产品,则卖给了大部分买家,接近 $n_H$。 + +因此,市场发现一个受欢迎的产品是坏产品,要比发现一个不受欢迎的产品是好产品来得更快。 + +```{solution-end} +``` diff --git a/lectures/merging_of_opinions.md b/lectures/merging_of_opinions.md index 05769489..e6f4ec12 100644 --- a/lectures/merging_of_opinions.md +++ b/lectures/merging_of_opinions.md @@ -28,7 +28,7 @@ translation: The Beta–Bernoulli model::The exact Blackwell–Dubins distance: 精确的布莱克韦尔-杜宾斯距离 The Beta–Bernoulli model::Simulation: 模拟 The Beta–Bernoulli model::Almost-sure convergence across many paths: 跨多条路径的几乎必然收敛 - The Beta–Bernoulli model::The supermartingale property of $d_n$: $d_n$ 的上鞅性质 + The Beta–Bernoulli model::Is $d_n$ a supermartingale?: $d_n$ 是上鞅吗? 'Failure of merging: mutual singularity': 融合的失败:相互奇异 'Failure of merging: mutual singularity::Point-mass priors': 点质量先验 'Kakutani''s theorem: when does merging hold?': 角谷定理:融合何时成立? @@ -46,7 +46,7 @@ translation: The rate of merging: 融合的速率 Summary and extensions: 总结与推广 Summary and extensions::Applications in economics: 经济学中的应用 - Summary and extensions::A companion result from probability: 一个来自概率论的配套结果 + Exercises: 练习 --- (merging_of_opinions)= @@ -81,7 +81,7 @@ translation: 这个结果与其他若干思想相关联: - 贝叶斯一致性:当先验位于正确的绝对连续性类中时,后验预测趋近于真值({doc}`likelihood_bayes`)。 -- 一致性结果:即使主体从不同的先验出发,共同的数据也能消除分歧({cite:t}`aumann1976`)。 +- 一致性结果:{cite:t}`aumann1976` 研究了具有共同先验和私人信息的主体;布莱克韦尔-杜宾斯则研究了具有不同先验和共同信息的主体。 - 角谷二分法:对于乘积测度,等价性与奇异性可以从一个海林格准则中读出。 我们在离散时间中展开理论,然后勾勒连续时间的类比。 @@ -95,17 +95,17 @@ translation: ```{code-cell} ipython3 import numpy as np import matplotlib.pyplot as plt -from scipy.stats import beta as beta_dist -from scipy.special import betaln +from scipy.stats import beta as beta_dist, binom, betabinom, norm +from scipy.special import betaln, beta as beta_fn, polygamma import matplotlib as mpl # i18n FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" # i18n mpl.font_manager.fontManager.addfont(FONTPATH) # i18n mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n ``` - ## 序列空间上的概率测度 + ### 序列空间及其滤流 设 $(S, \mathscr{S})$ 是一个标准博雷尔空间(即与完备可分度量空间的一个博雷尔子集同构的可测空间),称为信号空间。 @@ -122,9 +122,13 @@ $$ \mathscr{F}_n = \sigma(x_1, \ldots, x_n), $$ -因此 $\mathscr{F}_1 \subseteq \mathscr{F}_2 \subseteq \cdots \subseteq \mathscr{F}$。 +并设 $\mathscr{F}_0 = \{\emptyset, \Omega\}$,因此 $\mathscr{F}_0 \subseteq \mathscr{F}_1 \subseteq \mathscr{F}_2 \subseteq \cdots \subseteq \mathscr{F}$。 + +定义 $\mathscr{F}_\infty = \sigma\!\left(\bigcup_{n \geq 1} \mathscr{F}_n\right)$,即最终能够学到的事件所构成的 $\sigma$-代数。 -定义**尾 $\sigma$-代数** $\mathscr{F}_\infty = \sigma\!\left(\bigcup_{n \geq 1} \mathscr{F}_n\right)$,它编码了最终能够学到的一切。 +柱集 $\{x_1 \in A_1, \ldots, x_n \in A_n\}$ 生成了乘积 $\sigma$-代数,并且属于 $\bigcup_n \mathscr{F}_n$,因此 $\mathscr{F}_\infty = \mathscr{F}$。 + +$\sigma$-代数 $\mathscr{F}_\infty$ 不同于**尾 $\sigma$-代数** $\mathscr{T} = \bigcap_{n \geq 1} \sigma(x_n, x_{n+1}, \ldots)$,后者的事件(例如 $\{x_n \in A \text{ 对无穷多个 } n \text{ 成立}\}$)不依赖于任何有限长度的数据。 集合 $\{\mathscr{F}_n\}_{n \geq 1}$ 是由观察过程生成的**自然滤流**;$\mathscr{F}_n$ 编码了从前 $n$ 个数据点能够学到的一切。 @@ -169,7 +173,7 @@ $$ 其中 $\lambda$ 是任意**支配测度**,即 $\mu \ll \lambda$ 且 $\nu \ll \lambda$(例如 $\lambda = \mu + \nu$)。 -等价地,$\|\mu - \nu\|_{\mathrm{TV}} \in [0,1]$,其中 0 表示 $\mu = \nu$,1 表示 $\mu \perp \nu$(相互奇异)。 +距离 $\|\mu - \nu\|_{\mathrm{TV}}$ 位于 $[0,1]$ 之中;它等于 0 当且仅当 $\mu = \nu$,等于 1 当且仅当 $\mu \perp \nu$(相互奇异)。 ``` 当 $\mu \ll \nu$ 且 $f = d\mu/d\nu$ 时, @@ -230,6 +234,7 @@ $$ 当 $n \to \infty$ 时几乎必然成立。 +在 $n = 0$ 时,条件化是平凡的,此时 $d_0 = \|P - Q\|_{\mathrm{TV}}$。 ## 似然比鞅 @@ -253,8 +258,12 @@ $$ Z_n = \mathbb{E}_P[Z \,|\, \mathscr{F}_n] \qquad P\text{-a.s.} $$ -也就是说,$\{Z_n, \mathscr{F}_n\}_{n \geq 1}$ 是一个非负、一致 -可积的 $P$-鞅。 +也就是说,$\{Z_n, \mathscr{F}_n\}_{n \geq 0}$ 是一个非负、一致 +可积的 $P$-鞅,且 $Z_0 = 1$。 + +在本讲座中,$Z$ 和 $Z_n$ 均表示 $Q$ 相对于 $P$ 的密度。 + +后验概率是同一类型的鞅;{doc}`blackwell_kihlstrom` 利用这一性质来比较实验。 ```{prf:lemma} 鞅收敛 :label: martingale_convergence @@ -262,20 +271,24 @@ $$ 似然比过程 $\{Z_n\}$ 满足: 1. 当 $n \to \infty$ 时,$Z_n \to Z_\infty$ $P$-几乎必然。 -2. $Z_\infty = \mathbb{E}_P[Z \,|\, \mathscr{F}_\infty]$ $P$-a.s. +2. $Z_\infty = \mathbb{E}_P[Z \,|\, \mathscr{F}_\infty] = Z$ $P$-a.s. 3. $Z_n \to Z_\infty$ 在 $L^1(P)$ 中:$\;\mathbb{E}_P[|Z_n - Z_\infty|] \to 0$。 *证明概要。*非负性和鞅性质给出了在 $L^1(P)$ 中的 有界性。 然后几乎必然收敛由杜布鞅 -收敛定理 {cite:t}`doob1953` 得出。 +收敛定理 {cite:p}`doob1953` 得出。 一致可积性(它通过条件延森不等式 由 $Z \in L^1(P)$ 得出)将其提升到 -$L^1(P)$ 收敛。$\square$ +$L^1(P)$ 收敛。 + +列维上升定理确定该极限为 $\mathbb{E}_P[Z \,|\, \mathscr{F}_\infty]$,而由于 $\mathscr{F}_\infty = \mathscr{F}$,此极限即为 $Z$。$\square$ ``` +从此以后,我们用 $Z_\infty$ 表示 $Z = dQ/dP$。 + ### 将条件测度与似然比联系起来 下面的恒等式将似然比与条件分布联系起来。 @@ -289,6 +302,10 @@ $$ \qquad P\text{-a.s. on } \{Z_n > 0\}. $$ +这就是抽象贝叶斯公式 $Q(A \,|\, \mathscr{F}_n) = \mathbb{E}_P[Z_\infty \mathbf{1}_A \,|\, \mathscr{F}_n] / \mathbb{E}_P[Z_\infty \,|\, \mathscr{F}_n]$。 + +集合 $\{Z_n > 0\}$ 的 $Q$-概率为一,因为 $Q(Z_n = 0) = \mathbb{E}_P[Z_n \mathbf{1}\{Z_n = 0\}] = 0$。 + 于是应用带 $f = Z_\infty / Z_n$ 的全变差公式给出 $$ @@ -297,14 +314,24 @@ d_n = 1 - \mathbb{E}_{P(\cdot|\mathscr{F}_n)}\!\left[\min\!\left(\frac{Z_\infty}{Z_n},\,1\right)\right]. $$ -两边乘以 $Z_n$ 并取 $P$-期望(然后对 $\mathscr{F}_n$-可测的 $g$ 使用 $\mathbb{E}_P[Z_n \, g(\mathscr{F}_n)] = \mathbb{E}_Q[g(\mathscr{F}_n)]$): +由于 $Z_n$ 是 $\mathscr{F}_n$-可测的,该量也可写成条件期望之比: $$ -2\,\mathbb{E}_Q[d_n] \;=\; \mathbb{E}_P[|Z_\infty - Z_n|], -$$ +d_n += \frac{\mathbb{E}_P[(Z_\infty - Z_n)^+ \,|\, \mathscr{F}_n]}{Z_n} += \frac{\mathbb{E}_P[|Z_\infty - Z_n| \,|\, \mathscr{F}_n]}{2 Z_n} +\qquad Q\text{-a.s.} +$$ (eq_dn_conditional) -因此鞅的 $L^1(P)$ 收敛控制了全变差距离趋于零的速度。 +第二个等式成立是因为 $\mathbb{E}_P[Z_\infty - Z_n \,|\, \mathscr{F}_n] = 0$,所以 $Z_\infty - Z_n$ 的正部与负部具有相同的条件均值。 +两边乘以 $Z_n$ 并取 $P$-期望(然后对非负的 $\mathscr{F}_n$-可测的 $g$ 使用 $\mathbb{E}_P[Z_n \, g] = \mathbb{E}_Q[g]$): + +$$ +2\,\mathbb{E}_Q[d_n] \;=\; \mathbb{E}_P[|Z_\infty - Z_n|]. +$$ + +因此鞅的 $L^1(P)$ 收敛给出 $\mathbb{E}_Q[d_n] \to 0$,且其收敛速度决定了 $\mathbb{E}_Q[d_n]$ 趋于零的快慢。 ## 布莱克韦尔-杜宾斯定理 @@ -323,43 +350,59 @@ $$ 那么 $d_n \to 0$ $Q$-几乎必然。 ``` -证明有三个步骤。 +恒等式 $\mathbb{E}_Q[d_n] = \tfrac{1}{2}\,\mathbb{E}_P[|Z_\infty - Z_n|] \to 0$ 给出了 $Q$-概率意义下的收敛。 + +几乎必然收敛的证明有三个步骤。 + +步骤 1. $d_n$ 的一个公式。 -步骤 1. 通过 $Z_n$ 表示 $d_n$。 +方程 {eq}`eq_dn_conditional` 将 $d_n$ 写为 $\mathbb{E}_P[|Z_\infty - Z_n| \,|\, \mathscr{F}_n]$ 与 $2 Z_n$ 的比值,$Q$-a.s. -如上所示,$d_n$ 可以用 $Z_\infty / Z_n$ 表示,其中 $Z_n = \mathbb{E}_P[Z \,|\, \mathscr{F}_n]$ 且 $Z = dQ/dP$。 +步骤 2. 分母收敛到一个正的极限。 -这将问题化归为关于 $P$ 下一个鞅的陈述。 +由 {prf:ref}`martingale_convergence`,$Z_n \to Z_\infty$ $P$-a.s.,从而由 $Q \ll P$ 得 $Q$-a.s. 成立。 -步骤 2. $\{d_n\}$ 是一个非负上鞅。 +该极限 $Q$-几乎必然为正,因为 $Q(Z_\infty = 0) = \mathbb{E}_P[Z_\infty \mathbf{1}\{Z_\infty = 0\}] = 0$。 -对更多信息取条件平均地降低了可区分性。 +步骤 3. 分子收敛到零。 -形式上,因为 -$P(\,\cdot\,|\,\mathscr{F}_n) = \mathbb{E}[P(\,\cdot\,|\,\mathscr{F}_{n+1})\,|\,\mathscr{F}_n]$ -且全变差是凸的, +固定 $M > 0$,将 $Z_\infty = U + V$ 拆分,其中 $U = \min(Z_\infty, M)$,$V = (Z_\infty - M)^+$。 + +令 $U_n = \mathbb{E}_P[U \,|\, \mathscr{F}_n]$ 且 $V_n = \mathbb{E}_P[V \,|\, \mathscr{F}_n]$,于是 $Z_n = U_n + V_n$。 + +由三角不等式得 $|Z_\infty - Z_n| \leq |U - U_n| + V + V_n$,对 $\mathscr{F}_n$ 取条件期望得到 $$ -\mathbb{E}_Q[d_{n+1}\,|\,\mathscr{F}_n] \leq d_n \qquad Q\text{-a.s.} +\mathbb{E}_P[|Z_\infty - Z_n| \,|\, \mathscr{F}_n] +\leq \mathbb{E}_P[|U - U_n| \,|\, \mathscr{F}_n] + 2 V_n . $$ -因此 $\{d_n, \mathscr{F}_n\}$ 是 $[0,1]$ 中的非负 $Q$-上鞅。 +由列维向上定理,$V_n \to V$ $P$-a.s. + +对于有界部分,固定 $m$,令 $W_m = \sup_{k \geq m} |U - U_k| \leq 2M$。 -由杜布定理,$d_n \to d_\infty$ $Q$-几乎必然,其中 $d_\infty$ 是某个取值于 $[0,1]$ 的随机变量。 +对于 $n \geq m$,有 $\mathbb{E}_P[|U - U_n| \,|\, \mathscr{F}_n] \leq \mathbb{E}_P[W_m \,|\, \mathscr{F}_n]$,而列维向上定理使右边当 $n \to \infty$ 时趋于 $W_m$。 -步骤 3. 几乎必然的极限为零。 +列维向上定理同样给出 $U_k \to U$ $P$-a.s.,因此当 $m \to \infty$ 时 $W_m \to 0$。 -由步骤 1 和 $L^1$ 界: +综合这些极限, $$ -\mathbb{E}_Q[d_n] = \tfrac{1}{2}\,\mathbb{E}_P[|Z_\infty - Z_n|] \to 0. +\limsup_{n \to \infty} \mathbb{E}_P[|Z_\infty - Z_n| \,|\, \mathscr{F}_n] \leq 2\,(Z_\infty - M)^+ +\qquad P\text{-a.s.} $$ -右边由鞅的 $L^1(P)$ 收敛而消失。 +对每个 $M$ 都成立。 + +令 $M$ 沿整数趋于无穷,右边趋于零,因为 $Z_\infty$ 是有限的。 + +所以分子 $P$-几乎必然收敛到零,从而 $Q$-几乎必然也收敛到零。 -因此 $d_n \to 0$ 在 $L^1(Q)$ 中,从而在 $Q$-概率意义下成立。 +结合步骤 1–3,得到 $d_n \to 0$ $Q$-a.s. $\square$ -由于 $d_n$ 已经 $Q$-几乎必然收敛,其极限必须满足 $d_\infty = 0$ $Q$-a.s. $\square$ +关于有界部分 $U$ 的论证即为亨特引理(Hunt's lemma)。 + +该证明没有用到 $\{d_n\}$ 的单调性;{ref}`后面一节 ` 表明 $\{d_n\}$ 不一定是上鞅。 ```{prf:remark} 单边绝对连续性 vs. 相互绝对连续性 :label: one_sided_vs_mutual @@ -382,12 +425,21 @@ $$ 当 $P$ 和 $Q$ 奇异时,融合可能完全失败。 +假设 $P \perp Q$,且对每个 $n$ 都有 $P_n \sim Q_n$。 + +取 $S \in \mathscr{F}$,满足 $P(S) = 1$ 且 $Q(S) = 0$。 + +那么 $P(S \,|\, \mathscr{F}_n) = 1$ $P$-a.s.,而 $Q(S \,|\, \mathscr{F}_n) = 0$ $Q$-a.s. + +事件 $\{P(S \,|\, \mathscr{F}_n) = 1\}$ 与 $\{Q(S \,|\, \mathscr{F}_n) = 0\}$ 都属于 $\mathscr{F}_n$,因此局部等价性使得它们各自在 $P$-a.s. 和 $Q$-a.s. 意义下都成立。 + +因此对每个 $n$,在两种测度下都有 $d_n \geq |P(S \,|\, \mathscr{F}_n) - Q(S \,|\, \mathscr{F}_n)| = 1$。 + 下面的点质量例子对每个 $n$ 都有 $d_n = 1$。 对于乘积测度,后面的角谷定理给出了一个尖锐的等价性与奇异性二分法。 ``` - ## 贝塔-伯努利模型 在转向 Python 之前,我们介绍贯穿所有 @@ -478,24 +530,49 @@ Z_n = \frac{P_{1,n}(x^n)}{P_{2,n}(x^n)} \frac{B(\alpha_1 + k,\, \beta_1 + n - k)}{B(\alpha_2 + k,\, \beta_2 + n - k)}. $$ -这是 $P_2$(主体 2 的概率)下的一个鞅,它几乎必然 +按照定理中的记号,$Q = P_1$,$P = P_2$。 + +过程 $\{Z_n\}$ 是 $P_2$(主体 2 的概率)下的一个鞅,它几乎必然 收敛到一个有限正极限 $Z_\infty$,反映了对于任何具有正参数的贝塔先验, $P_1 \sim P_2$ 这一事实。 +该极限有一个闭式表达。 + +令 $\bar p = \lim_n k_n/n$,这在 $P_i$ 意义下几乎必然存在,因为在给定 $p$ 的条件下,强大数定律适用。 + +那么 + +$$ +Z_\infty = \frac{dP_1}{dP_2} = \frac{\pi_1(\bar p)}{\pi_2(\bar p)}. +$$ + +{ref}`mo_ex_zinf` 要求给出该式的推导。 + +对于下面使用的先验 $\mathrm{Beta}(1, 8)$ 和 $\mathrm{Beta}(8, 1)$,有 $\pi_1(p) = 8(1-p)^7$ 和 $\pi_2(p) = 8p^7$,因此 + +$$ +\log Z_\infty = 7 \log \frac{1 - \bar p}{\bar p}. +$$ + ### 精确的布莱克韦尔-杜宾斯距离 对于贝塔-伯努利模型,存在一个 $d_n$ 的简洁公式。 -由德菲内蒂定理,给定过去时每个主体对*未来无限序列*的条件分布 +根据构造,给定 $x^n$ 时主体 $i$ 对未来序列 +$(x_{n+1}, x_{n+2}, \ldots)$ 的条件分布 是独立同分布伯努利$(p)$ -过程的混合,其中 $p$ 从后验贝塔分布抽取。 +过程的混合,其中 $p$ 从主体 $i$ 的后验贝塔分布抽取。 + +{doc}`exchangeable` 描述了德菲内蒂定理,该定理为每个可交换过程给出了这样一种混合;在此处,这种混合是由构造直接得到的。 + +不同 $p$ 的伯努利$(p)^{\infty}$ 测度相互 +奇异,且极限频率 $\bar p$ 可恢复出 $p$。 -由于不同 $p$ 的伯努利$(p)^{\infty}$ 测度相互 -奇异(经验频率精确地识别出 $p$),关于未来的两个条件分布之间的全变差距离 -等于关于参数 $p$ 的两个后验分布之间的全变差 -距离。 +映射 $\omega \mapsto \bar p$ 将每个主体对未来的条件分布送到该主体的后验分布,因此条件分布之间的全变差距离至少等于后验分布之间的全变差距离。 -全变差距离为 +每个条件分布都是后验分布在马尔可夫核 $p \mapsto \mathrm{Bernoulli}(p)^{\infty}$ 下的像,因此条件分布之间的全变差距离至多等于后验分布之间的全变差距离。 + +因此 $$ d_n @@ -503,7 +580,32 @@ d_n - \mathrm{Beta}(\alpha_2 + k_n,\,\beta_2 + n - k_n)\bigr\|_{\mathrm{TV}}. $$ -当 $k_n/n \to p^*$ 且 $n \to \infty$ 时,两个后验贝塔都集中于 $p^*$ 附近,方差为 $1/n$ 阶,因此 $d_n \to 0$。 +两个后验都集中于 $k_n/n$ 附近,标准差为 $n^{-1/2}$ 阶。 + +仅凭集中性并不能得出 $d_n \to 0$。 + +两个标准差均为 $s_n$ 的分布,其全变差距离趋于零,仅当它们的均值之差为 $o(s_n)$ 时才成立。 + +当 $\alpha_1 + \beta_1 = \alpha_2 + \beta_2 = 9$(如下文情形)时,后验均值之差为 $\delta_n = (\alpha_2 - \alpha_1)/(n + 9) = 7/(n+9)$,其为 $O(1/n)$ 阶。 + +两个后验标准差都近似为 $s_n = \sqrt{\hat p_n (1 - \hat p_n)/n}$,其中 $\hat p_n = k_n/n$。 + +用具有公共标准差 $s_n$、均值相差 $\delta_n$ 的正态分布来近似两个后验,可得 + +$$ +d_n \approx 2\,\Phi\!\left(\frac{\delta_n}{2 s_n}\right) - 1 +\approx \frac{7}{\sqrt{2 \pi n\, \hat p_n (1 - \hat p_n)}}, +$$ + +其中 $\Phi$ 是标准正态累积分布函数。 + +当 $\hat p_n = 0.65$ 时,右边为 $5.85/\sqrt{n}$。 + +关于融合速率的小节将检验这个近似。 + +当 $\alpha_1 + \beta_1 = \alpha_2 + \beta_2$ 时,两个后验密度之比正比于 $((1-p)/p)^{\beta_1 - \beta_2}$,它关于 $p$ 是单调的。 + +两条密度曲线仅在一点 $x^*$ 处相交,且 $d_n = |F_1(x^*) - F_2(x^*)|$,其中 $F_i$ 是主体 $i$ 的后验累积分布函数。 下面的代码实现了上述贝塔-伯努利更新、预测概率、全变差距离和似然比的计算。 @@ -525,16 +627,20 @@ def predictive_prob(a_post, b_post): return a_post / (a_post + b_post) -def tv_distance_beta(a1, b1, a2, b2, n_grid=2000): +def tv_distance_beta(a1, b1, a2, b2): """ - 通过网格求积计算 Beta(a1,b1) 和 Beta(a2,b2) 之间的全变差距离。 - 在 (0,1) 上使用精细网格。 + 当 a1 + b1 = a2 + b2 且 a1 != a2 时, + Beta(a1, b1) 和 Beta(a2, b2) 之间的精确全变差距离。 + + 两条密度曲线仅在一点 x_star 处相交,其中 + log(x_star / (1 - x_star)) + = (betaln(a2, b2) - betaln(a1, b1)) / (b1 - b2)。 + 可按元素作用于数组。 """ - x = np.linspace(1e-8, 1 - 1e-8, n_grid) - dx = x[1] - x[0] - p1 = beta_dist.pdf(x, a1, b1) - p2 = beta_dist.pdf(x, a2, b2) - return 0.5 * np.sum(np.abs(p1 - p2)) * dx + logit_x = (betaln(a2, b2) - betaln(a1, b1)) / (b1 - b2) + x_star = 1 / (1 + np.exp(-logit_x)) + return np.abs(beta_dist.cdf(x_star, a1, b1) + - beta_dist.cdf(x_star, a2, b2)) def log_likelihood_ratio(data, a1, b1, a2, b2): @@ -568,10 +674,7 @@ def run_simulation(p_true, a1, b1, a2, b2, n_steps, seed=0): tv_1step = np.abs(pred1 - pred2) # 后验贝塔之间的全变差;在此模型中它等于 d_n - tv_beta = np.array([ - tv_distance_beta(a1p[i], b1p[i], a2p[i], b2p[i]) - for i in range(n_steps + 1) - ]) + tv_beta = tv_distance_beta(a1p, b1p, a2p, b2p) log_Z = log_likelihood_ratio(data, a1, b1, a2, b2) @@ -581,7 +684,7 @@ def run_simulation(p_true, a1, b1, a2, b2, n_steps, seed=0): ### 模拟 -我们选择两个对一枚硬币偏差持有非常不同信念的主体,这枚硬币正面朝上的真实概率为 $p^* = 0.65$。 +我们选择两个对一枚硬币偏差持有非常不同信念的主体。 - 主体 1(怀疑者):先验 $\mathrm{Beta}(1, 8)$,因此 $\hat{p}_1^0 = 1/9 \approx 0.11$。 @@ -590,9 +693,21 @@ def run_simulation(p_true, a1, b1, a2, b2, n_steps, seed=0): 两个先验都支撑在整个 $(0,1)$ 上,因此 $P_1 \sim P_2$。 -布莱克韦尔-杜宾斯保证融合。 +布莱克韦尔-杜宾斯保证在 $P_1$ 几乎每条路径上以及 $P_2$ 几乎每条路径上都发生融合。 + +下图跟踪由一枚正面朝上概率固定为 $p^* = 0.65$ 的硬币生成的一条路径。 + +这样一条路径的分布律 $P_{0.65}$ 相对于 $P_1$ 和 $P_2$ 是奇异的:事件 $\{k_n/n \to 0.65\}$ 在 $P_{0.65}$ 下的概率为一,而在 $P_i$ 下的概率为零。 -下图展示了这种融合的样子。 +因此布莱克韦尔-杜宾斯定理对这条路径没有任何说明。 + +在固定 $p^*$ 下的融合源于伯恩斯坦-冯·米塞斯定理。 + +在 $P_{p^*}$ 下,每个主体的后验在全变差意义下接近均值为 $k_n/n$、方差为 $p^*(1-p^*)/n$ 的正态分布,因此两个后验彼此接近。 + +上面的正态近似将此说得更具体。 + +下一小节在每条路径上从主体 1 的先验中抽取 $p$,这样我们就处于定理所设定的情形中。 ```{code-cell} ipython3 --- @@ -633,14 +748,19 @@ ax.set_ylabel( r' - Q(\cdot|\mathscr{F}_n)\|_{\mathrm{TV}}$' ) ax.set_title(r'(b) 全变差距离 $d_n$') -ax.set_ylim(bottom=1e-4) +ax.set_ylim(0.1, 1.1) ax = axes[1, 0] -ax.plot(steps, sim['log_Z'], color='darkorange', lw=2) +log_Z_limit = 7 * np.log((1 - p_true) / p_true) +ax.plot(steps, sim['log_Z'], color='darkorange', lw=2, + label=r'$\log Z_n$') +ax.axhline(log_Z_limit, color='black', lw=1.0, ls='--', + label=r'$7 \log((1 - p^*)/p^*)$') ax.axhline(0, color='black', lw=0.8, ls=':') ax.set_xlabel('观察数 $n$') ax.set_ylabel(r'$\log Z_n$') ax.set_title(r'(c) 对数似然比') +ax.legend(fontsize=8) ax = axes[1, 1] xs = np.linspace(0.01, 0.99, 500) @@ -674,6 +794,14 @@ ax.set_ylim(bottom=0) plt.tight_layout() plt.show() + +p_hat = sim['data'].sum() / n_steps +print(f"n = {n_steps} 时的 k_n/n: {p_hat:.3f}") +print(f"n = {n_steps} 时的 d_n: {sim['tv_beta'][-1]:.3f}") +print(f"n = {n_steps} 时的 log Z_n: {sim['log_Z'][-1]:.2f}") +print(f"7 log((1 - k_n/n) / (k_n/n)): " + f"{7 * np.log((1 - p_hat) / p_hat):.2f}") +print(f"7 log((1 - p*) / p*): {log_Z_limit:.2f}") ``` 四个面板显示: @@ -681,132 +809,203 @@ plt.show() - 面板 (a):从 $\hat{p}_1^0 \approx 0.11$ 和 $\hat{p}_2^0 \approx 0.89$ 出发,两个主体的预测概率都 收敛到 $p^* = 0.65$。 -- 面板 (b):全变差距离 $d_n$ 在 - 对数刻度上衰减到零,与定理一致。 -- 面板 (c):对数似然比 $\log Z_n$ 收敛到一个有限 - 值,这与本例中的相互绝对连续性一致。 +- 面板 (b):全变差距离 $d_n$ 从 $0.99$ 降到 $n = 600$ 时的 $0.23$。 +- 面板 (c):对数似然比 $\log Z_n$ 稳定在 $7 \log((1-p^*)/p^*) = -4.33$ 附近,即 $\bar p = p^*$ 时的闭式极限。 + 在 $n = 600$ 处,该路径的 $k_n/n = 0.643$,$\log Z_n = -4.07$,而 $7 \log((1 - k_n/n)/(k_n/n)) = -4.13$。 - 面板 (d):两个主体的后验贝塔密度起初相距 甚远(一个接近 0,一个接近 1),并逐渐集中到以真值为中心的相同 分布。 - ### 跨多条路径的几乎必然收敛 为了说明该定理的几乎必然特性,我们运行许多独立重复。 -该定理关注参考测度下的几乎每条路径,而不仅仅是跨路径的平均。 +每次重复都从主体 1 的先验 $\pi_1 = \mathrm{Beta}(1, 8)$ 中抽取 $p$,然后抽取独立同分布的伯努利$(p)$ 序列 $x_1, x_2, \ldots$。 + +于是每条路径都是 $P_1$ 的一个抽样。 + +取 $Q = P_1$、$P = P_2$,定理表明 $d_n \to 0$ 在 $Q$ 几乎每条路径上成立。 ```{code-cell} ipython3 --- mystnb: figure: caption: | - 跨多条样本路径的几乎必然融合。 + 从 $P_1$ 抽取的多条样本路径的几乎必然融合。 左面板绘制全变差距离,右面板绘制对数似然比 $\log Z_n$。 + 线条颜色记录了每条路径上抽取的 $p$ 值;散点标出极限值 $7 \log((1-p)/p)$。 name: fig-merging-of-opinions-many-paths --- N_paths = 80 -n_steps = 500 +n_steps = 2000 -fig, axes = plt.subplots(1, 2, figsize=(11, 4)) - -ax_tv = axes[0] -ax_log = axes[1] +rng_p = np.random.default_rng(1234) +p_draws = rng_p.beta(a1, b1, N_paths) # p 从主体 1 的先验中抽取 tv_all = np.empty((N_paths, n_steps + 1)) logZ_all = np.empty((N_paths, n_steps + 1)) steps = np.arange(n_steps + 1) for i in range(N_paths): - s = run_simulation(p_true, a1, b1, a2, b2, n_steps, seed=i) + s = run_simulation(p_draws[i], a1, b1, a2, b2, n_steps, seed=i) tv_all[i] = s['tv_beta'] logZ_all[i] = s['log_Z'] +log_Z_limits = 7 * np.log((1 - p_draws) / p_draws) +norm_p = plt.Normalize(0, p_draws.max()) +cmap = plt.cm.viridis + +fig, axes = plt.subplots(1, 2, figsize=(11, 4)) +ax_tv, ax_log = axes + for i in range(N_paths): - ax_tv.semilogy(steps, tv_all[i] + 1e-10, color='steelblue', - lw=0.8, alpha=0.3) -ax_tv.semilogy(steps, tv_all.mean(axis=0) + 1e-10, + col = cmap(norm_p(p_draws[i])) + ax_tv.semilogy(steps, tv_all[i], color=col, lw=0.8, alpha=0.5) + ax_log.plot(steps, logZ_all[i], color=col, lw=0.8, alpha=0.5) +ax_tv.semilogy(steps, tv_all.mean(axis=0), color='black', lw=2, label='跨路径均值') ax_tv.set_xlabel('观察数 $n$') ax_tv.set_ylabel(r'$d_n$(对数刻度)') ax_tv.legend() -for i in range(N_paths): - ax_log.plot(steps, logZ_all[i], color='firebrick', - lw=0.8, alpha=0.3) -ax_log.plot(steps, logZ_all.mean(axis=0), - color='black', lw=2, label='跨路径均值') +ax_log.scatter(np.full(N_paths, n_steps), log_Z_limits, + c=p_draws, cmap=cmap, norm=norm_p, s=12, zorder=3, + label=r'极限 $7 \log((1-p)/p)$') ax_log.axhline(0, color='gray', lw=0.8, ls=':') ax_log.set_xlabel('观察数 $n$') ax_log.set_ylabel(r'$\log Z_n$') ax_log.legend() -plt.tight_layout() +fig.colorbar(plt.cm.ScalarMappable(norm=norm_p, cmap=cmap), + ax=axes, label='从 $\\pi_1$ 抽取的 $p$') plt.show() -# 有限视界摘要 -frac_below = np.mean(tv_all[:, -1] < 0.30) -mean_final = tv_all[:, -1].mean() -print(f"n = {n_steps} 时 d_n < 0.30 的路径比例: {frac_below:.2f}") -print(f"n = {n_steps} 时的平均距离: {mean_final:.3f}") +for n in (500, n_steps): + print(f"n = {n}: d_n < 0.30 的路径比例 = " + f"{np.mean(tv_all[:, n] < 0.30):.2f}, " + f"平均 d_n = {tv_all[:, n].mean():.3f}") +slow = np.argsort(tv_all[:, -1])[-5:] +print(f"五条最慢路径上的 p: {np.round(p_draws[slow], 4)}") ``` -在这个有限视界处,距离已从初始水平大幅下降,但尚未接近零。 +在每条路径上,$d_{2000}$ 都低于 $d_0$,但在许多路径上 $d_n$ 下降得很慢。 -这仍然与定理一致,因为几乎必然收敛是一个渐近陈述。 +在 $n = 500$ 时,14% 的路径满足 $d_n < 0.30$,$d_n$ 的均值为 $0.489$;在 $n = 2000$ 时,这两个数字分别为 68% 和 $0.299$。 +最慢的路径上 $p$ 低于 $0.004$。 -### $d_n$ 的上鞅性质 +主体 2 的先验密度 $8p^7$ 在 $p = 0$ 附近极小,因此主体 2 需要大量观察才能将后验质量移到那里。 -证明依赖于 $\{d_n\}$ 是一个非负上鞅。 +这些有限视界的数值与定理一致,因为几乎必然收敛是一个渐近陈述。 -我们可以通过观察跨多条路径的平均增量来数值地说明这一点。 +(mo_supermartingale)= +### $d_n$ 是上鞅吗? + +该定理的证明并未用到 $\{d_n\}$ 的任何单调性。 + +一般而言,$\{d_n\}$ 既不是 $P$-上鞅,也不是 $Q$-上鞅。 + +一个五点例子说明了这一点。 + +令 $\Omega = \{1, 2, 3, 4, 5\}$,令 $P$ 为均匀分布,并令 $Z_\infty = dQ/dP = (0, 1, 1, 1, 2)$。 + +第一次观察揭示 $\omega \in \{1, 2\}$ 还是 $\omega \in \{3, 4, 5\}$,第二次观察则揭示出 $\omega$。 + +```{code-cell} ipython3 +P_pts = np.full(5, 0.2) +Q_pts = np.array([0, 1, 1, 1, 2]) * P_pts +blocks = [[0, 1], [2, 3, 4]] # 第一次观察所揭示的单元格 + +d_0 = 0.5 * np.abs(P_pts - Q_pts).sum() +E_Q_d1 = E_P_d1 = 0.0 +for b in blocks: + P_b, Q_b = P_pts[b].sum(), Q_pts[b].sum() + d_1 = 0.5 * np.abs(P_pts[b] / P_b - Q_pts[b] / Q_b).sum() + E_Q_d1 += Q_b * d_1 + E_P_d1 += P_b * d_1 + +print(f"d_0 = {d_0:.3f}, E_Q[d_1] = {E_Q_d1:.3f}, E_P[d_1] = {E_P_d1:.3f}") +``` + +此处 $d_0 = 0.200$,$\mathbb{E}_Q[d_1] = 0.233$,$\mathbb{E}_P[d_1] = 0.300$。 + +第一次观察提高了两种测度下的期望距离。 + +第二次观察揭示出 $\omega$,因此 $d_2 = 0$。 + +恒等式 $2\,\mathbb{E}_Q[d_n] = \mathbb{E}_P[|Z_\infty - Z_n|]$ 指明了问题的根源:$Z_\infty$ 与其关于 $\mathscr{F}_n$ 的条件期望之间的 $L^1$ 距离不必随 $n$ 递减。 + +当 $\mathbb{E}_P[Z_\infty^2] < \infty$ 时,$L^2$ 距离确实递减,这是因为 $\mathbb{E}_P[(Z_\infty - Z_n)^2] = \mathbb{E}_P[Z_\infty^2] - \mathbb{E}_P[Z_n^2]$,而 $\mathbb{E}_P[Z_n^2]$ 关于 $n$ 不减。 + +在使用上述先验的贝塔-伯努利模型中,不等式 $\mathbb{E}[d_{n+1} \,|\, \mathscr{F}_n] \leq d_n$ 在我们检验的每个状态上都成立。 + +下一个单元格对每个状态 $(n, k_n)$($n < 400$)精确计算 $\mathbb{E}_Q[d_{n+1} \,|\, \mathscr{F}_n] - d_n$ 和 $\mathbb{E}_P[d_{n+1} \,|\, \mathscr{F}_n] - d_n$,使用的是每个主体的单步预测概率。 ```{code-cell} ipython3 --- mystnb: figure: caption: | - 上鞅性质的一个说明。 - 图中显示 $d_n$ 的平均增量及其跨多条模拟路径的累积和。 + 贝塔-伯努利模型中 $d_n$ 的精确单步条件增量。 + 左面板针对若干 $n$ 绘制 $\mathbb{E}_Q[d_{n+1} | \mathscr{F}_n] - d_n$ 对 $k_n/n$ 的曲线。 + 右面板绘制每个 $n$ 下所有 $k_n$ 中的最大增量。 name: fig-merging-of-opinions-supermartingale --- -diffs = np.diff(tv_all, axis=1) # 形状 (N_paths, n_steps) -mean_diffs = diffs.mean(axis=0) # 每步的平均增量 -cum_sum = np.cumsum(mean_diffs) # 累积平均变化 +def conditional_increments(n, a1, b1, a2, b2): + """ + E_Q[d_{n+1} | n, k] - d_n 和 E_P[d_{n+1} | n, k] - d_n + 对 k = 0, ..., n,其中 Q = P_1,P = P_2。 + """ + k = np.arange(n + 1) + d_now = tv_distance_beta(a1 + k, b1 + n - k, a2 + k, b2 + n - k) + d_head = tv_distance_beta(a1 + k + 1, b1 + n - k, + a2 + k + 1, b2 + n - k) + d_tail = tv_distance_beta(a1 + k, b1 + n - k + 1, + a2 + k, b2 + n - k + 1) + q1 = (a1 + k) / (a1 + b1 + n) # 主体 1 的预测概率 + q2 = (a2 + k) / (a2 + b2 + n) # 主体 2 的预测概率 + inc_Q = q1 * d_head + (1 - q1) * d_tail - d_now + inc_P = q2 * d_head + (1 - q2) * d_tail - d_now + return inc_Q, inc_P + +n_check = 400 +max_inc_Q = np.empty(n_check) +max_inc_P = np.empty(n_check) +for n in range(n_check): + inc_Q, inc_P = conditional_increments(n, a1, b1, a2, b2) + max_inc_Q[n], max_inc_P[n] = inc_Q.max(), inc_P.max() -fig, axes = plt.subplots(1, 2, figsize=(10, 4)) +fig, axes = plt.subplots(1, 2, figsize=(11, 4)) ax = axes[0] -ax.plot(mean_diffs[:200], color='purple', lw=2) +for n, col in zip([20, 100, 399], ['steelblue', 'darkorange', 'firebrick']): + inc_Q, _ = conditional_increments(n, a1, b1, a2, b2) + ax.plot(np.arange(n + 1) / n, inc_Q, color=col, lw=2, label=f'$n={n}$') ax.axhline(0, color='black', lw=0.8, ls='--') -ax.fill_between(range(200), mean_diffs[:200], 0, - where=(mean_diffs[:200] < 0), alpha=0.25, - color='purple', label='负增量') -ax.fill_between(range(200), mean_diffs[:200], 0, - where=(mean_diffs[:200] > 0), alpha=0.25, - color='red', label='正增量') -ax.set_xlabel('观察数 $n$') -ax.set_ylabel(r'$\mathbb{E}[d_{n+1} - d_n]$') +ax.set_xlabel('$k_n / n$') +ax.set_ylabel(r'$\mathbb{E}_Q[d_{n+1} | \mathscr{F}_n] - d_n$') ax.legend(fontsize=8) ax = axes[1] -ax.plot(cum_sum[:200], color='darkorange', lw=2) -ax.axhline(0, color='black', lw=0.8, ls='--') +ax.plot(max_inc_Q, color='purple', lw=2, label='在 $Q = P_1$ 下') +ax.plot(max_inc_P, color='gray', lw=2, ls='--', label='在 $P = P_2$ 下') +ax.axhline(0, color='black', lw=0.8, ls=':') ax.set_xlabel('观察数 $n$') -ax.set_ylabel(r'$d_n$ 的累积平均变化') +ax.set_ylabel(r'对 $k_n$ 的最大增量') +ax.legend(fontsize=8) plt.tight_layout() plt.show() -frac_decrease = np.mean(mean_diffs < 0) -print(f"平均减量的步骤比例: {frac_decrease:.2%}") +print(f"Q 下所有状态中的最大增量: {max_inc_Q.max():.2e}") +print(f"P 下所有状态中的最大增量: {max_inc_P.max():.2e}") ``` -平均增量在大多数步骤为负,累积漂移向下。 +每个增量都为负,所以在这个模型中,$\{d_n\}$ 在我们检验的状态范围内,在 $P_1$ 和 $P_2$ 下都表现得像一个上鞅。 -这只是一个说明,而不是证明,因为它使用的是无条件平均,而不是定理中完整的条件期望。 +右面板中的两条曲线重合,这是因为 $\pi_2(p) = \pi_1(1-p)$:交换正面与反面即交换了两个主体。 +上鞅性质是该模型所特有的;五点例子表明它在一般情形下并不成立。 ## 融合的失败:相互奇异 @@ -884,13 +1083,12 @@ plt.show() 对比是鲜明的。 -对于相互绝对连续的先验,$d_n$ 衰减到零。 +对于相互绝对连续的先验,在由 $p = 0.75$ 的硬币生成的路径上,$d_n$ 衰减到零。 对于奇异的点质量先验,整个未来路径距离永远保持在一。 更多的数据无法调和这两个主体,因为每个主体都排除了对方赋予正概率的路径。 - ## 角谷定理:融合何时成立? 一个自然的问题是:对于哪些乘积测度,布莱克韦尔-杜宾斯 @@ -901,32 +1099,38 @@ plt.show() ### 海林格亲和度 +在本节中,$P^{(m)}$ 和 $Q^{(m)}$ 表示信号空间 $(S, \mathscr{S})$ 上的概率测度,即乘积测度的因子。 + +符号 $P_n$ 和 $Q_n$ 保持其早先的含义:$P$ 和 $Q$ 限制在 $\mathscr{F}_n$ 上。 + ```{prf:definition} 海林格亲和度 :label: hellinger_affinity 对于 $(S, \mathscr{S})$ 上具有共同 -支配测度 $\lambda$ 的概率测度 $P_n$ 和 $Q_n$,**海林格亲和度**为 +支配测度 $\lambda$ 的概率测度 $P^{(m)}$ 和 $Q^{(m)}$,**海林格亲和度**为 $$ -\rho_n = \int_S \sqrt{\frac{dP_n}{d\lambda} \cdot \frac{dQ_n}{d\lambda}}\,d\lambda +\rho_m = \int_S \sqrt{\frac{dP^{(m)}}{d\lambda} \cdot \frac{dQ^{(m)}}{d\lambda}}\,d\lambda \;\in\; [0, 1]. $$ -$\rho_n = 1$ 当且仅当 $P_n = Q_n$;$\rho_n = 0$ 当且仅当 $P_n \perp Q_n$。 +$\rho_m = 1$ 当且仅当 $P^{(m)} = Q^{(m)}$;$\rho_m = 0$ 当且仅当 $P^{(m)} \perp Q^{(m)}$。 ``` +海林格亲和度就是巴氏系数,即 {doc}`divergence_measures` 中 $\phi = 1/2$ 处的切尔诺夫系数。 + 对于两个特定的一维族: -- 高斯:$P_n = \mathcal{N}(\mu_n, 1)$ vs $Q_n = \mathcal{N}(0,1)$: +- 高斯:$P^{(m)} = \mathcal{N}(0, 1)$ vs $Q^{(m)} = \mathcal{N}(\mu_m,1)$: $$ -\rho_n^{\text{Gauss}} = \exp\!\left(-\frac{\mu_n^2}{8}\right). +\rho_m^{\text{Gauss}} = \exp\!\left(-\frac{\mu_m^2}{8}\right). $$ -- 伯努利:$P_n = \mathrm{Bernoulli}(p)$ vs $Q_n = \mathrm{Bernoulli}(q)$: +- 伯努利:$P^{(m)} = \mathrm{Bernoulli}(p)$ vs $Q^{(m)} = \mathrm{Bernoulli}(q)$: $$ -\rho_n^{\text{Bern}} = \sqrt{pq} + \sqrt{(1-p)(1-q)}. +\rho_m^{\text{Bern}} = \sqrt{pq} + \sqrt{(1-p)(1-q)}. $$ ### 角谷二分法 @@ -934,8 +1138,8 @@ $$ ```{prf:theorem} 角谷(1948) :label: kakutani_dichotomy -设 $P = \bigotimes_{n=1}^\infty P_n$ 和 $Q = \bigotimes_{n=1}^\infty Q_n$ -是无限乘积测度,其因子逐对等价:对于每个 $n$,$P_n \sim Q_n$。 +设 $P = \bigotimes_{m=1}^\infty P^{(m)}$ 和 $Q = \bigotimes_{m=1}^\infty Q^{(m)}$ +是无限乘积测度,其因子逐对等价:对于每个 $m$,$P^{(m)} \sim Q^{(m)}$。 那么要么 $P \sim Q$,要么 $P \perp Q$;不存在 中间情形。 @@ -945,19 +1149,21 @@ $$ $$ P \sim Q \quad \iff \quad -\prod_{n=1}^\infty \rho_n > 0 +\prod_{m=1}^\infty \rho_m > 0 \quad \iff \quad -\sum_{n=1}^\infty (1 - \rho_n) < \infty. +\sum_{m=1}^\infty (1 - \rho_m) < \infty. $$ -如果 $\prod_{n=1}^\infty \rho_n = 0$,那么 $P \perp Q$。 +如果 $\prod_{m=1}^\infty \rho_m = 0$,那么 $P \perp Q$。 *证明思路。* 一个标准证明研究似然比鞅 -$Z_N = \prod_{n=1}^N (dP_n/dQ_n)$ 连同恒等式 -$\mathbb{E}_Q[\sqrt{Z_N}] = \prod_{n=1}^N \rho_n$。 +$Z_N = \prod_{m=1}^N (dQ^{(m)}/dP^{(m)})$ 连同恒等式 +$\mathbb{E}_P[\sqrt{Z_N}] = \prod_{m=1}^N \rho_m$。 -乘积保持正对应于等价性,而乘积坍缩到零对应于奇异性。 +如果乘积为正,则 $\{\sqrt{Z_N}\}$ 在 $L^2(P)$ 中是柯西序列,因此 $Z_N$ 在 $L^1(P)$ 中收敛,且 $Q \ll P$;将 $P$ 和 $Q$ 互换,同样的论证给出 $P \ll Q$。 + +如果乘积为零,由法图引理得 $\mathbb{E}_P[\sqrt{Z_\infty}] = 0$,因此 $Z_\infty = 0$ $P$-a.s. 且 $P \perp Q$。 $\square$ ``` @@ -966,50 +1172,66 @@ $\square$ 对于独立同分布类型的序列,角谷定理给出以下图景: -| 情形 | $\sum_n (1-\rho_n)$ | 结论 | 融合? | +| 情形 | $\sum_m (1-\rho_m)$ | 结论 | 融合? | |---|---|---|---| -| 对所有 $n$,$P_n = Q_n$ | $0$ | $P = Q$ | 平凡地是 | -| $P_n \ne Q_n$ 且 $\sum_n (1-\rho_n) < \infty$ | 有限 | $P \sim Q$ | 是;布莱克韦尔-杜宾斯适用 | -| $P_n = P \ne Q = Q_n$ 固定,$n \ge 1$ | $\infty$ | $P \perp Q$ | 否 | +| 对所有 $m$,$P^{(m)} = Q^{(m)}$ | $0$ | $P = Q$ | 平凡地是 | +| $P^{(m)} \ne Q^{(m)}$ 且 $\sum_m (1-\rho_m) < \infty$ | 有限 | $P \sim Q$ | 是;布莱克韦尔-杜宾斯适用 | +| 对所有 $m$,$P^{(m)} = f \ne g = Q^{(m)}$ | $\infty$ | $P \perp Q$ | 否 | 具有不同固定边缘分布的独立同分布情形是标准的不融合例子。 如果两个主体对每个观察永久地赋予不同的分布,他们最终处于互不相交的概率世界中。 +{doc}`likelihood_ratio_process` 展示了当自然永久地从两个固定密度之一抽取时,似然比过程收敛到零。 + +对于乘积测度,给定 $\mathscr{F}_n$ 条件下未来的条件分布不依赖于过去。 + +因此 $d_n = \bigl\|\bigotimes_{m>n} P^{(m)} - \bigotimes_{m>n} Q^{(m)}\bigr\|_{\mathrm{TV}}$ 是确定性的。 + +每个 $\rho_m$ 都为正,因为各因子是等价的,因此去掉有限多个因子不会改变 $\prod_m \rho_m$ 是否为正。 + +当 $P \perp Q$ 时,$m > n$ 上的乘积是奇异的,且对每个 $n$ 都有 $d_n = 1$。 + +当 $P \sim Q$ 时,由布莱克韦尔-杜宾斯定理知 $d_n \to 0$。 + +{ref}`mo_ex_gauss` 为高斯乘积精确计算了 $d_n$。 + ### 一个高斯乘积测度例子 我们用高斯乘积测度来说明角谷二分法。 -取 $Q = \mathcal{N}(0,1)^{\otimes\mathbb{N}}$ 作为参考测度,取 $P = \bigotimes_n \mathcal{N}(\mu_n,1)$ 作为备择。 +取 $P = \mathcal{N}(0,1)^{\otimes\mathbb{N}}$ 作为参考测度,取 $Q = \bigotimes_m \mathcal{N}(\mu_m,1)$ 作为备择。 + +那么 $\log Z_N = \sum_{m=1}^N (\mu_m x_m - \mu_m^2/2)$,下面的代码从 $\mathcal{N}(0, 1)$,即在 $P$ 下抽取 $x_m$。 -$\mu_n$ 的三种选择: +$\mu_m$ 的三种选择: -1. $\mu_n = \mu > 0$ 常数($\sum (1-\rho_n) = \infty$)$\Rightarrow P \perp Q$。 -2. $\mu_n = c/\!\sqrt{n}$($\sum (1-\rho_n) \approx \sum c^2/(8n) = \infty$)$\Rightarrow P \perp Q$。 -3. $\mu_n = c/n$($\sum (1-\rho_n) \approx \sum c^2/(8n^2) < \infty$)$\Rightarrow P \sim Q$。 +1. $\mu_m = \mu > 0$ 常数($\sum (1-\rho_m) = \infty$)$\Rightarrow P \perp Q$。 +2. $\mu_m = c/\!\sqrt{m}$($\sum (1-\rho_m) \approx \sum c^2/(8m) = \infty$)$\Rightarrow P \perp Q$。 +3. $\mu_m = c/m$($\sum (1-\rho_m) \approx \sum c^2/(8m^2) < \infty$)$\Rightarrow P \sim Q$。 ```{code-cell} ipython3 N_max = 2000 -ns = np.arange(1, N_max + 1) +ms = np.arange(1, N_max + 1) c = 2.0 N_plot = 400 rng = np.random.default_rng(0) cases = [ - (r'$\mu_n = c$(常数)', np.full(N_max, c)), - (r'$\mu_n = c/\sqrt{n}$', c / np.sqrt(ns)), - (r'$\mu_n = c/n$', c / ns), + (r'$\mu_m = c$(常数)', np.full(N_max, c)), + (r'$\mu_m = c/\sqrt{m}$', c / np.sqrt(ms)), + (r'$\mu_m = c/m$', c / ms), ] ``` -在常数漂移下,$\log Z_N$ 在 $Q$ 下漂移到 $-\infty$,因此 $Z_N \to 0$ $Q$-a.s. 且 $P \perp Q$。 +在常数漂移下,$\log Z_N$ 在 $P$ 下漂移到 $-\infty$,因此 $Z_N \to 0$ $P$-a.s. 且 $P \perp Q$。 ```{code-cell} ipython3 --- mystnb: figure: caption: | - 常数漂移 $\mu_n = c$: + 常数漂移 $\mu_m = c$: 似然比坍缩($P \perp Q$)。 name: fig-kakutani-constant --- @@ -1023,20 +1245,20 @@ ax.plot(np.arange(N_plot + 1), log_Z, color='darkorange', lw=2, label=label) ax.axhline(0, color='black', lw=0.8, ls=':') ax.set_xlabel('视界 $N$') -ax.set_ylabel(r'$Q$ 下的 $\log Z_N$') +ax.set_ylabel(r'$P$ 下的 $\log Z_N$') ax.legend(fontsize=8) plt.tight_layout() plt.show() ``` -$\mu_n = c/\sqrt{n}$ 的情形显示出相同的定性图景:尽管漂移消失,但消失得太慢。 +$\mu_m = c/\sqrt{m}$ 的情形显示出相同的定性图景:尽管漂移消失,但消失得太慢。 ```{code-cell} ipython3 --- mystnb: figure: caption: | - 漂移 $\mu_n = c/\sqrt{n}$:仍然 + 漂移 $\mu_m = c/\sqrt{m}$:仍然 奇异($P \perp Q$)。 name: fig-kakutani-sqrt --- @@ -1050,13 +1272,13 @@ ax.plot(np.arange(N_plot + 1), log_Z, color='purple', lw=2, label=label) ax.axhline(0, color='black', lw=0.8, ls=':') ax.set_xlabel('视界 $N$') -ax.set_ylabel(r'$Q$ 下的 $\log Z_N$') +ax.set_ylabel(r'$P$ 下的 $\log Z_N$') ax.legend(fontsize=8) plt.tight_layout() plt.show() ``` -只有在 $\mu_n = c/n$ 时 $\sum (1-\rho_n) < \infty$ 才成立,因此似然比保持非退化且 $P \sim Q$。 +只有在 $\mu_m = c/m$ 时 $\sum (1-\rho_m) < \infty$ 才成立,因此似然比保持非退化且 $P \sim Q$。 布莱克韦尔-杜宾斯仅在此情形下适用。 @@ -1065,7 +1287,7 @@ plt.show() mystnb: figure: caption: | - 漂移 $\mu_n = c/n$:似然 + 漂移 $\mu_m = c/m$:似然 比稳定($P \sim Q$)。 name: fig-kakutani-inv-n --- @@ -1079,42 +1301,41 @@ ax.plot(np.arange(N_plot + 1), log_Z, color='steelblue', lw=2, label=label) ax.axhline(0, color='black', lw=0.8, ls=':') ax.set_xlabel('视界 $N$') -ax.set_ylabel(r'$Q$ 下的 $\log Z_N$') +ax.set_ylabel(r'$P$ 下的 $\log Z_N$') ax.legend(fontsize=8) plt.tight_layout() plt.show() ``` - ## 推广到连续时间 同样的逻辑推广到连续时间。 ### 吉尔萨诺夫定理与似然比过程 -在典范维纳空间上,$Q$ 为维纳测度(标准 -布朗运动 $W$),假设主体 $P$ 相信该过程有一个 +在典范维纳空间上,$P$ 为维纳测度(标准 +布朗运动 $W$),假设主体 $Q$ 相信该过程有一个 额外漂移 $\theta = \{\theta_s\}_{s \geq 0}$: $$ W_t = \widetilde{W}_t + \int_0^t \theta_s\, ds, $$ -其中 $\widetilde{W}$ 是一个 $P$-布朗运动。 +其中 $\widetilde{W}$ 是一个 $Q$-布朗运动。 吉尔萨诺夫-卡梅隆-马丁定理 {cite:p}`girsanov1960` 将 -似然比过程给出为随机指数 +似然比过程 $Z_t = dQ_t/dP_t$ 给出为随机指数 $$ Z_t = \exp\!\left(\int_0^t \theta_s\, dW_s - \frac{1}{2}\int_0^t \theta_s^2\, ds\right). $$ -$Z_t$ 始终是一个非负的 $Q$-局部鞅;它是一个真鞅 -当且仅当对所有 $t$,$\mathbb{E}_Q[Z_t] = 1$。 +$Z_t$ 始终是一个非负的 $P$-局部鞅;它是一个真鞅 +当且仅当对所有 $t$,$\mathbb{E}_P[Z_t] = 1$。 诺维科夫条件 {cite:p}`novikov1972`, -对所有 $T$,$\mathbb{E}_Q\!\left[\exp\!\left(\tfrac{1}{2}\int_0^T \theta_s^2\,ds\right)\right] < \infty$, +对所有 $T$,$\mathbb{E}_P\!\left[\exp\!\left(\tfrac{1}{2}\int_0^T \theta_s^2\,ds\right)\right] < \infty$, 是充分的。 ### 无穷远处的二分法 @@ -1124,43 +1345,63 @@ $[0,+\infty)$ 上的一个关键微妙之处是局部绝对连续性*不*蕴含 ```{prf:remark} 无限视界的微妙之处 :label: dichotomy_at_infinity -假设 $Z_t$ 对每个有限视界都是一个真 $Q$-鞅,并令 $Z_t \to Z_\infty$ $Q$-a.s. +假设 $Z_t$ 对每个有限视界都是一个真 $P$-鞅,并令 $Z_t \to Z_\infty$ $P$-a.s. + +如果 $\{Z_t\}$ 在 $[0,\infty)$ 上一致可积,那么在 $\mathscr{F}_\infty$ 上 $Q \ll P$,且 $dQ/dP = Z_\infty$。 -如果 $\{Z_t\}$ 在 $[0,\infty)$ 上一致可积,那么在 $\mathscr{F}_\infty$ 上 $P \ll Q$,且 $dP/dQ = Z_\infty$。 +这正是布莱克韦尔-杜宾斯的假设条件,因此融合在 $Q$-a.s. 意义下成立。 -对于布莱克韦尔-杜宾斯结论,我们需要在 $\mathscr{F}_\infty$ 上 $Q \ll P$(反方向)。 +如果进一步地 $Z_\infty > 0$ $P$-a.s.,那么 $P \ll Q$ 也成立,融合在 $P$-a.s. 意义下也成立。 -在许多标准设定中,包括满足下面能量条件的确定性漂移,这些测度实际上在 $\mathscr{F}_\infty$ 上是*等价的*($P \sim Q$),因此两个方向都成立。 +$P$-a.s. 意义下的融合仅需要 $P \ll Q$,因为 $d_t$ 在 $P$ 和 $Q$ 之间是对称的,该定理在它们的角色互换后同样适用。 如果一致可积性失败,那么 $\mathscr{F}_\infty$ 上的全局绝对连续性可能失败。 在许多标准例子中,包括一个非零常数漂移,这些测度实际上在 $\mathscr{F}_\infty$ 上是奇异的。 ``` -确定性漂移例子中的一个方便的充分条件是**能量条件** +对于确定性漂移 $\theta$,**能量条件** $$ -\int_0^\infty \theta_s^2\,ds < \infty \quad Q\text{-a.s.} +\int_0^\infty \theta_s^2\,ds < \infty $$ -非形式地说,这表示在无限视界上区分两个测度的信息总量是有限的。 +区分了这两种情形。 + +如果该条件成立,$\mathbb{E}_P[Z_t^2] = \exp\!\left(\int_0^t \theta_s^2\, ds\right)$ 关于 $t$ 有界,$\{Z_t\}$ 一致可积,$Z_\infty > 0$,且 $\mathscr{F}_\infty$ 上 $P \sim Q$。 + +如果该条件不成立,$\log Z_t \to -\infty$ $P$-a.s.,且 $\mathscr{F}_\infty$ 上 $P \perp Q$。 -在能量条件下,$\mathscr{F}_\infty$ 上 $P \sim Q$,因此布莱克韦尔-杜宾斯适用,融合在两个测度下都成立。 +非形式地说,$\int_0^\infty \theta_s^2\,ds$ 度量了在无限视界上区分两个测度的信息总量。 + +在能量条件下,布莱克韦尔-杜宾斯适用,融合在两个测度下都成立。 当 $\theta$ 是非零常数时,该条件失败,这些测度在 $\mathscr{F}_\infty$ 上奇异,融合不会发生。 -一旦在 $\mathscr{F}_\infty$ 上建立了 $Q \ll P$,连续时间布莱克韦尔-杜宾斯结果的证明 -就与离散时间证明完全相同。 +{doc}`survival_recursive_preferences` 研究了信念与真实情况相差这种常数漂移的主体。 + +当 $\theta$ 依赖于 $W$ 的路径时,$\int_0^\infty \theta_s^2\,ds$ 是一个随机变量。 + +此时,$\mathscr{F}_\infty$ 上 $P \sim Q$ 当且仅当 $\int_0^\infty \theta_s^2\,ds < \infty$ 在 $P$-a.s. 和 $Q$-a.s. 意义下都成立。 + +在 $P$ 下,$\log Z_t = \int_0^t \theta_s\,dW_s - \tfrac{1}{2}\int_0^t \theta_s^2\,ds$ 在事件 $\{\int_0^\infty \theta_s^2\,ds = \infty\}$ 上趋于 $-\infty$。 -$\{d_t, \mathscr{F}_t\}$ 是 $[0,1]$ 中的非负 $Q$-上鞅,因此 $d_t \to d_\infty$ $Q$-a.s. +在 $Q$ 下,$\log Z_t = \int_0^t \theta_s\,d\widetilde{W}_s + \tfrac{1}{2}\int_0^t \theta_s^2\,ds$ 在同一事件上趋于 $+\infty$。 -$L^1$ 界 -$\mathbb{E}_Q[d_t] = \tfrac{1}{2}\mathbb{E}_P[|Z_t - Z_\infty|] \to 0$ -迫使 $d_\infty = 0$。 +在互补事件上,$\log Z_t$ 在两个测度下都收敛到一个有限极限。 +由于 $\mathscr{F}_\infty$ 上 $Q \ll P$ 当且仅当 $Z_\infty < \infty$ $Q$-a.s.,而 $P \ll Q$ 当且仅当 $Z_\infty > 0$ $P$-a.s.,该结论由此得出。 + +一旦在 $\mathscr{F}_\infty$ 上建立了 $Q \ll P$,离散时间证明 +即可直接套用。 + +条件距离满足 $d_t = \mathbb{E}_P[|Z_\infty - Z_t| \,|\, \mathscr{F}_t]/(2 Z_t)$,$Z_t \to Z_\infty > 0$ $Q$-a.s.,而第三步中的截断论证使分子趋于零。 + +恒等式 $\mathbb{E}_Q[d_t] = \tfrac{1}{2}\mathbb{E}_P[|Z_t - Z_\infty|]$ 也同样适用。 ## 应用 + ### 贝叶斯学习 最直接的应用是贝叶斯推断。 @@ -1182,11 +1423,27 @@ $$ 例如,在具有非原子先验 $\pi$ 的贝塔-伯努利模型中,混合 $P = \int \mathrm{Bernoulli}(p)^{\infty}\,\pi(dp)$ 对每个 $n$ 满足 $Q^*_n \ll P_n$,但全局上 $Q^* \not\ll P$,因为集合 $\{\lim k_n/n = p^*\}$ 的 $Q^*$-测度为一,但 $P$-测度为零(不同的伯努利乘积测度相互奇异)。 -在额外结构下,全局绝对连续性确实成立,例如当参数空间有限或模型足够正则以允许杜布一致性论证时。 +在一个可识别的独立同分布族中,不同 $\theta$ 对应的测度 $Q_\theta$ 相互奇异,因此 $Q_{\theta^*} \ll P$ 当且仅当 $\pi(\{\theta^*\}) > 0$。 + +因此,当 $\pi$ 在 $\theta^*$ 处有原子时,全局绝对连续性成立,例如当 $\Theta$ 为有限集时。 + +{doc}`likelihood_bayes` 研究了一个主体,其先验对两个模型中的每一个都赋予正概率,其中一个模型为真;在那里 $Q^* \ll P$。 + +在非原子先验下,主体对整个未来的预测永远不会与真值融合。 + +在贝塔-伯努利模型中,给出 $d_n$ 闭合形式的论证也给出 $\|P_i(\,\cdot\,|\,\mathscr{F}_n) - P_{p^*}(\,\cdot\,|\,\mathscr{F}_n)\|_{\mathrm{TV}} = 1$ 对每个 $n$ 成立,因为主体 $i$ 的后验在 $p^*$ 处没有原子。 + +每个主体的一步超前预测仍然收敛到 $p^*$,并且两个主体的预测彼此融合。 -{cite:t}`DiaconisFreedman1986` 研究贝叶斯估计的一致性,并在其他结果中表明,局部与全局绝对连续性之间的相互作用在确保后验收敛中起着核心作用。 +杜布一致性定理 {cite:p}`doob1949` 指出,对于 $\pi$-几乎每个 $\theta$,后验都集中于真实的 $\theta$。 -当 $P \perp Q^*$ 时,存在在 $Q^*$ 下概率为一但在 $P$ 下概率为零的事件,因此主体的信念仍然从根本上被错误设定。 +{cite:t}`DiaconisFreedman1986` 研究在固定参数值处的一致性,这是杜布定理未涉及的情形。 + +他们表明,在无限维模型中,例外的 $\pi$-零测集可能很重要:在一个误差分布具有狄利克雷过程先验的位置问题中,后验在先验支撑中的某些参数值处可能不一致。 + +在 {doc}`mix_model` 中,自然从密度 $f$ 和 $g$ 的混合 $h$ 中独立同分布地抽取,而主体却相信自然是一劳永逸地从 $f$ 或 $g$ 中抽取的。 + +在那里 $P \perp Q^*$,主体的预测始终是错误的,并且主体的后验集中于在库尔贝克-莱布勒散度意义下更接近 $h$ 的模型。 ### 理性预期与异质先验 @@ -1196,10 +1453,17 @@ $$ 如果两个主体从等价先验出发并观察相同的历史,他们的条件预测最终在每个事件上达成一致。 -{cite:t}`aumann1976` 的一致性定理强化了这一点:具有 -共同先验的主体不能对后验概率"同意不一致"。 +{cite:t}`aumann1976` 的一致性定理是对这一结果的补充。 + +奥曼的主体共享共同先验,但看到不同的私有信息;如果他们对某个事件的后验概率是共同知识,那么这些后验概率必须相等。 -布莱克韦尔-杜宾斯补充了奥曼,表明等价先验足以实现最终一致。 +布莱克韦尔和杜宾斯的主体持有不同的先验,但看到相同的信息。 + +当融合失败时,分歧会持续存在并产生经济后果。 + +{doc}`likelihood_ratio_process_2` 研究财富如何在持有不同信念的主体之间转移,其中包括一个先验排除了真实模型的主体。 + +{doc}`survival_recursive_preferences` 研究当信念永久存在分歧时,哪些主体能够生存下来。 ### 遍历马尔可夫链 @@ -1216,10 +1480,15 @@ $$ \to 0. $$ -这是融合的一种特殊形式,它*不*要求绝对连续性,因为遍历性已经迫使两个分布趋于相同的极限。 +这种收敛*不*要求绝对连续性:$\mu$ 和 $\nu$ 可以是不同状态处的点质量。 + +它涉及的对象与布莱克韦尔-杜宾斯不同。 -布莱克韦尔-杜宾斯是非遍历或非马尔可夫环境的正确类比,在这些环境中不必存在单一的不变分布。 +测度 $\mu\Pi^n$ 和 $\nu\Pi^n$ 是日期 $n$ 处状态的无条件分布,它们的收敛表明遍历链会遗忘其初始条件。 +布莱克韦尔-杜宾斯涉及的是在共同观测历史给定条件下,对整个未来的条件分布。 + +对 $\Pi$ 持相同看法并观察当前状态的两个主体,会对未来做出完全相同的条件预测,无论 $\Pi$ 是否遍历。 ## 融合的速率 @@ -1227,68 +1496,91 @@ $$ 它告诉我们 $d_n \to 0$,但没有告诉我们速度有多快。 -界 +恒等式 $$ \mathbb{E}_Q[d_n] = \tfrac{1}{2}\,\mathbb{E}_P[|Z_n - Z_\infty|] $$ -表明融合的速率由似然比鞅的 $L^1(P)$ 收敛速率控制。 +表明 $Q$ 均值意义下的融合速率由似然比鞅的 $L^1(P)$ 收敛速率所支配。 在正则参数例子中,人们常常看到 $n^{-1/2}$ 型的行为。 -下图在贝塔-伯努利模型中检验了这个启发式。 +在贝塔-伯努利模型中,前面推导出的正态近似给出 $d_n \approx 7/\sqrt{2 \pi n\, \hat p_n (1 - \hat p_n)}$。 + +在固定硬币 $P_{p^*}$ 下,$\hat p_n \to p^*$,因此 $\mathbb{E}_{P_{p^*}}[d_n] \approx C(p^*)/\sqrt{n}$,其中 $C(p^*) = 7/\sqrt{2\pi p^*(1-p^*)}$,$C(0.65) = 5.85$。 + +在 $Q = P_1$ 下,硬币 $p$ 是从 $\pi_1$ 中抽取的,对 $p$ 取平均给出 $\mathbb{E}_Q[d_n] \approx C_Q/\sqrt{n}$,其中 + +$$ +C_Q = \frac{7}{\sqrt{2\pi}}\, \mathbb{E}_{\pi_1}\!\left[(p(1-p))^{-1/2}\right] += \frac{7}{\sqrt{2\pi}}\, \frac{B(1/2,\, 15/2)}{B(1,\, 8)} = 14.7 。 +$$ + +下面的单元格通过对成功次数 $k_n$ 求和来精确计算这两个期望:$k_n$ 在 $P_{p^*}$ 下服从二项分布,在 $Q = P_1$ 下服从贝塔-二项分布。 ```{code-cell} ipython3 --- mystnb: figure: caption: | - 贝塔-伯努利模型中平均融合距离的对数-对数图。 - 拟合斜率接近 $-1/2$,这与本实验中的平方根衰减一致。 + 贝塔-伯努利模型中,在固定硬币 $P_{0.65}$ 下和在 $Q = P_1$ 下 $d_n$ 的精确均值。 + 虚线为正态近似 $C/\sqrt{n}$。 name: fig-merging-of-opinions-rate --- -N_paths_rate = 200 -n_steps_rate = 800 - -tv_rate = np.empty((N_paths_rate, n_steps_rate + 1)) -for i in range(N_paths_rate): - s = run_simulation(p_true, a1, b1, a2, b2, n_steps_rate, seed=100 + i) - tv_rate[i] = s['tv_beta'] - -ns_rate = np.arange(1, n_steps_rate + 1) -mean_tv = tv_rate[:, 1:].mean(axis=0) # 平均 d_n, n = 1, ..., n_steps_rate +def expected_d(n): + """精确的 E_{P_{p*}}[d_n] 和 E_Q[d_n],其中 Q = P_1。""" + k = np.arange(n + 1) + d = tv_distance_beta(a1 + k, b1 + n - k, a2 + k, b2 + n - k) + return binom.pmf(k, n, p_true) @ d, betabinom.pmf(k, n, a1, b1) @ d -# 使用样本的后半部分拟合参考线 d_n ~ C / sqrt(n) -fit_start = 200 -log_ns = np.log(ns_rate[fit_start:]) -log_tv = np.log(mean_tv[fit_start:] + 1e-12) -coeffs = np.polyfit(log_ns, log_tv, 1) -slope = coeffs[0] +n_grid = np.unique(np.logspace(0, 4, 60).astype(int)) +mean_fixed, mean_Q = np.array([expected_d(n) for n in n_grid]).T -# 参考曲线 C/sqrt(n) -C_ref = np.exp(coeffs[1]) -ref_curve = C_ref / np.sqrt(ns_rate) +C_fixed = 7 / np.sqrt(2 * np.pi * p_true * (1 - p_true)) +C_Q = 7 / np.sqrt(2 * np.pi) * beta_fn(0.5, 7.5) / beta_fn(a1, b1) fig, ax = plt.subplots(figsize=(8, 4)) -ax.loglog(ns_rate, mean_tv, color='steelblue', lw=2, - label=r'$\mathbb{E}_Q[d_n]$(蒙特卡洛)') -ax.loglog(ns_rate, ref_curve, color='firebrick', lw=2, ls='--', - label=(rf'参考 $C/\sqrt{{n}}$' - rf'(拟合斜率 $\approx {slope:.2f}$)')) +ax.loglog(n_grid, mean_fixed, color='steelblue', lw=2, + label=r'$\mathbb{E}_{P_{0.65}}[d_n]$') +ax.loglog(n_grid, C_fixed / np.sqrt(n_grid), color='steelblue', + lw=1.5, ls='--', label=rf'${C_fixed:.2f}/\sqrt{{n}}$') +ax.loglog(n_grid, mean_Q, color='firebrick', lw=2, + label=r'$\mathbb{E}_Q[d_n]$, $Q = P_1$') +ax.loglog(n_grid, C_Q / np.sqrt(n_grid), color='firebrick', + lw=1.5, ls='--', label=rf'${C_Q:.1f}/\sqrt{{n}}$') +ax.set_ylim(1e-2, 1.5) ax.set_xlabel('样本大小 $n$') -ax.set_ylabel(r'$\mathbb{E}_Q[d_n]$') +ax.set_ylabel('$d_n$ 的均值') ax.legend() plt.tight_layout() plt.show() -print(f"拟合的对数-对数斜率: {slope:.3f} (预测: -0.50)") +for n in (100, 500, 1000, 10_000): + e_fixed, e_Q = expected_d(n) + δ, s = 7 / (n + 9), np.sqrt(p_true * (1 - p_true) / n) + print(f"n = {n:>6}: E_P0.65[d_n] = {e_fixed:.3f}, " + f"normal approx = {2 * norm.cdf(δ / (2 * s)) - 1:.3f}, " + f"C/sqrt(n) = {C_fixed / np.sqrt(n):.3f} | " + f"E_Q[d_n] / (C_Q/sqrt(n)) = {e_Q / (C_Q / np.sqrt(n)):.2f}") + +late = n_grid >= 1000 +for name, m in (("P_0.65", mean_fixed), ("Q", mean_Q)): + slope = np.polyfit(np.log(n_grid[late]), np.log(m[late]), 1)[0] + print(f"log-log slope under {name}, 1000 <= n <= 10^4: {slope:.2f}") ``` -拟合样本的后半部分给出接近 $-0.5$ 的斜率。 +在 $P_{0.65}$ 下,精确均值从下方逼近 $5.85/\sqrt{n}$。 -这与本模拟中的 $n^{-1/2}$ 标度一致。 +在 $n = 500$ 时,精确均值为 $0.255$,在 $\hat p_n = 0.65$ 处的正态近似 $2\Phi(\delta_n/(2 s_n)) - 1$ 为 $0.253$,而 $5.85/\sqrt{n}$ 为 $0.262$。 +在 $1000 \leq n \leq 10^4$ 范围内拟合的对数-对数斜率为 $-0.50$。 + +在 $Q$ 下,向 $14.7/\sqrt{n}$ 的逼近较慢。 + +在 $n = 500$ 时,$\mathbb{E}_Q[d_n]$ 与 $14.7/\sqrt{n}$ 之比为 $0.70$,在 $n = 10^4$ 时为 $0.92$,而在 $1000 \leq n \leq 10^4$ 范围内拟合的斜率为 $-0.43$。 + +先验 $\pi_1$ 将大部分质量集中在 $p = 0$ 附近,而正态近似要求 $n p$ 较大。 ## 总结与推广 @@ -1299,24 +1591,25 @@ Q \ll P \;\Longrightarrow\; Z = \frac{dQ}{dP} \in L^1(P) \;\Longrightarrow\; -Z_n = \mathbb{E}_P[Z \,|\, \mathscr{F}_n] -\xrightarrow{L^1(P)} -Z_\infty +Z_n = \mathbb{E}_P[Z \,|\, \mathscr{F}_n] \to Z +\text{ 且 } +\mathbb{E}_P[|Z - Z_n| \,|\, \mathscr{F}_n] \to 0 +\;\; P\text{-几乎必然} \;\Longrightarrow\; -d_n \xrightarrow{Q\text{-a.s.}} 0. +d_n = \frac{\mathbb{E}_P[|Z - Z_n| \,|\, \mathscr{F}_n]}{2 Z_n} \xrightarrow{Q\text{-a.s.}} 0. $$ 要点: 1. 单边绝对连续性 $Q \ll P$ 给出 $Q$-几乎必然的融合。对于在*两个*测度下的融合,需要相互绝对连续性 $P \sim Q$。 -2. 似然比鞅 $Z_n = \mathbb{E}_P[Z|\mathscr{F}_n]$ 及其 $L^1(P)$ 收敛驱动了这个结果。 +2. 似然比鞅 $Z_n = \mathbb{E}_P[Z|\mathscr{F}_n]$ 驱动了这个结果:在 $d_n = \mathbb{E}_P[|Z - Z_n| \,|\, \mathscr{F}_n]/(2 Z_n)$ 中,分子收敛到零,而 $Z_n$ 以 $Q$-几乎必然的方式收敛到 $Z > 0$。 -3. 更多的数据只能(在期望上)降低区分两个假设的难度。 +3. 更多的数据只能增加区分两个假设的能力:在 $\mathscr{F}_n$ 上的 $\|P_n - Q_n\|_{\mathrm{TV}}$ 是关于 $n$ 非递减的。条件距离 $d_n$ 未必递减,即使在期望意义上也是如此。当 $Q \ll P$ 时,它收敛到零。 -4. 对于无限乘积测度,角谷定理给出一个尖锐的等价性与奇异性二分法:要么 $P \sim Q$(当 $\sum_n (1 - \rho_n) < \infty$ 时),要么 $P \perp Q$(当该和发散时),不存在中间情形。 +4. 对于无限乘积测度,角谷定理给出一个尖锐的等价性与奇异性二分法:要么 $P \sim Q$(当 $\sum_m (1 - \rho_m) < \infty$ 时),要么 $P \perp Q$(当该和发散时),不存在中间情形。 -5. 当 $P \sim Q$ 时,布莱克韦尔-杜宾斯适用,融合在两个测度下都发生;当 $P \perp Q$ 时,分歧永远持续。 +5. 当 $P \sim Q$ 时,布莱克韦尔-杜宾斯适用,融合在两个测度下都发生;当 $P \perp Q$ 且对于每个 $n$ 都有 $P_n \sim Q_n$ 时,对于每个 $n$ 都有 $d_n = 1$,分歧永远持续。 ### 经济学中的应用 @@ -1336,8 +1629,281 @@ $$ - {cite}`PomattoAlNajjarSandroni2014`:将定理推广到有限可加概率,并将融合与检验可操纵性联系起来。 - {cite}`AcemogluChernozhukovYildiz2016`:表明当主体对信号结构本身不确定时分歧如何持续。 -### 一个来自概率论的配套结果 +## 练习 + +```{exercise} +:label: mo_ex_one_sided + +设智能体 1 的先验为 $\pi_1 = \mathrm{Unif}(0, \tfrac12)$,智能体 2 的先验为 $\pi_2 = \mathrm{Unif}(0, 1)$,并令 $P_i = \int_0^1 P_p\, \pi_i(p)\, dp$,如贝塔-伯努利小节所示。 + +1. 证明 $P_1 \ll P_2$,但 $P_2 \ll P_1$ 不成立。 +2. 证明 $d_n = \Pr_2(p > \tfrac12 \,|\, x^n)$,即智能体 2 关于 $p > \tfrac12$ 的后验概率。 +3. 从 $P_2$ 中抽取路径:从 $\pi_2$ 中抽取 $p$,然后抽取独立同分布的伯努利 $(p)$ 变量 $x_1, x_2, \ldots$。 + 沿每条路径计算并绘制 $d_n$,验证在 $p < \tfrac12$ 的路径上 $d_n \to 0$,在 $p > \tfrac12$ 的路径上 $d_n \to 1$。 +4. 将第 3 部分的结果与布莱克韦尔-杜宾斯定理进行协调。 + +*提示:* 对于第 2 部分,智能体 1 的后验是智能体 2 的后验在 $p < \tfrac12$ 条件下的结果。 +``` + +```{solution-start} mo_ex_one_sided +:class: dropdown +``` + +第 1 部分。 + +$\pi_1$ 的密度为 $2\cdot\mathbf{1}\{p < \tfrac12\} \leq 2\pi_2(p)$,因此对每个事件 $A$ 都有 $P_1(A) \leq 2 P_2(A)$,即 $P_1 \ll P_2$。 + +设 $\bar p = \limsup_n k_n/n$。 + +事件 $\{\bar p > \tfrac12\}$ 在 $P_2$ 下的概率为 $\tfrac12$,在 $P_1$ 下的概率为零,因此 $P_2 \ll P_1$ 不成立。 + +{ref}`mo_ex_zinf` 给出 $dP_1/dP_2 = \pi_1(\bar p)/\pi_2(\bar p) = 2\cdot\mathbf{1}\{\bar p < \tfrac12\}$。 + +第 2 部分。 + +智能体 2 在观察到 $x^n$ 后的后验为 $\mu_n = \mathrm{Beta}(k_n + 1, n - k_n + 1)$。 + +智能体 1 的后验密度正比于 $p^{k_n}(1-p)^{n-k_n}\mathbf{1}\{p < \tfrac12\}$,因此它等于 $\mu_n(\,\cdot\,|\,A)$,其中 $A = (0, \tfrac12)$。 + +对于概率测度 $\mu$、满足 $\mu(A) > 0$ 的事件 $A$,以及任意事件 $B$, + +$$ +\mu(B \,|\, A) - \mu(B) = \mu(B \cap A)\left(\frac{1}{\mu(A)} - 1\right) - \mu(B \cap A^c), +$$ + +该式位于 $-\mu(A^c)$ 和 $\mu(A^c)$ 之间,上界在 $B = A$ 时取得。 + +因此 $\|\mu(\,\cdot\,|\,A) - \mu\|_{\mathrm{TV}} = \mu(A^c)$。 + +贝塔-伯努利小节中的论证将 $d_n$ 等同于两个智能体后验之间的全变差距离,因此 + +$$ +d_n = \mu_n\bigl((\tfrac12, 1)\bigr) = 1 - F_{\mathrm{Beta}(k_n+1,\, n-k_n+1)}(\tfrac12)。 +$$ + +由于 $\bar p = p$ 在 $P_2$ 下几乎必然成立,故 $d_n = P_2(\bar p > \tfrac12 \,|\, \mathscr{F}_n)$。 + +因此 $\{d_n\}$ 是一个 $P_2$-鞅,由列维上升定理可得 $d_n \to \mathbf{1}\{\bar p > \tfrac12\}$($P_2$ 几乎必然成立)。 + +第 3 部分。 + +```{code-cell} ipython3 +n_steps_ex = 3000 +N_paths_ex = 40 +rng_ex = np.random.default_rng(0) +p_paths = rng_ex.uniform(0, 1, N_paths_ex) # p drawn from π_2 +steps_ex = np.arange(n_steps_ex + 1) + +fig, ax = plt.subplots(figsize=(8, 4)) +d_final = np.empty(N_paths_ex) +for i, p in enumerate(p_paths): + x = rng_ex.binomial(1, p, n_steps_ex) + k = np.concatenate([[0], np.cumsum(x)]) + d = beta_dist.sf(0.5, k + 1, steps_ex - k + 1) # Pr_2(p > 1/2 | x^n) + d_final[i] = d[-1] + ax.semilogx(steps_ex[1:], d[1:], lw=0.8, alpha=0.6, + color='firebrick' if p > 0.5 else 'steelblue') +ax.set_xlabel('observations $n$') +ax.set_ylabel('$d_n$') +ax.legend(handles=[ + Line2D([0], [0], color='steelblue', lw=2, label=r'$p < 1/2$'), + Line2D([0], [0], color='firebrick', lw=2, label=r'$p > 1/2$'), +]) +plt.tight_layout() +plt.show() + +err = np.abs(d_final - (p_paths > 0.5)) +print(f"largest |d_n - 1{{p > 1/2}}| at n = {n_steps_ex}: {err.max():.4f}, " + f"on the path with p = {p_paths[err.argmax()]:.3f}") +``` + +每条路径最终都接近 $\mathbf{1}\{p > \tfrac12\}$;收敛较慢的路径对应的 $p$ 接近 $\tfrac12$。 + +第 4 部分。 + +令 $Q = P_1$,$P = P_2$,假设 $Q \ll P$ 成立,则该定理给出 $d_n \to 0$($P_1$ 几乎必然成立)。 + +由于 $dP_1/dP_2 = 2\cdot\mathbf{1}\{\bar p < \tfrac12\}$,$P_1$ 是 $P_2$ 在 $\{\bar p < \tfrac12\}$ 条件下的结果。 + +因此该定理的结论为:在 $\{\bar p < \tfrac12\}$ 上 $d_n \to 0$($P_2$ 几乎必然成立)。 + +该定理对 $\{\bar p > \tfrac12\}$ 不作说明,该事件在 $P_2$ 下的概率为 $\tfrac12$,在 $P_1$ 下的概率为零。 + +在该事件上 $d_n \to 1$:智能体 1 的先验排除了 $p > \tfrac12$ 的可能性,因此无论观察到何种数据都不会使智能体 1 的后验质量超过 $\tfrac12$。 + +```{solution-end} +``` + +```{exercise} +:label: mo_ex_gauss + +设 $P = \mathcal{N}(0,1)^{\otimes \mathbb{N}}$,$Q = \bigotimes_m \mathcal{N}(\mu_m, 1)$,如高斯乘积测度示例所示,并令 $\sigma_n^2 = \sum_{m > n} \mu_m^2$。 + +1. 证明 $d_n = 2\Phi(\sigma_n/2) - 1$,当 $\sigma_n = \infty$ 时 $d_n = 1$。 +2. 对于 $\mu_m = c/m$,证明在 $n$ 较大时 $d_n \approx c/\sqrt{2\pi n}$。 + 在 $n = 100$、$c = 2$ 时比较精确值与近似值。 +3. 对于 $\mu_m = c/\sqrt{m}$,证明对每个 $n$ 都有 $d_n = 1$,而两个智能体一步预测之间的距离 $\|\mathcal{N}(0,1) - \mathcal{N}(\mu_{n+1}, 1)\|_{\mathrm{TV}}$ 收敛于零。 + +{cite:t}`KalaiLehrer1994Merging` 将每个固定有限视界上预测的收敛称为**弱融合**,而将 $d_n$ 的收敛称为**强融合**。 + +第 3 部分给出了弱融合而非强融合的例子。 +``` + +```{solution-start} mo_ex_gauss +:class: dropdown +``` + +第 1 部分。 + +对于乘积测度,未来独立于过去,因此 $d_n$ 是 $\bigotimes_{m>n} \mathcal{N}(0,1)$ 与 $\bigotimes_{m>n} \mathcal{N}(\mu_m,1)$ 之间的全变差距离。 + +假设 $\sigma_n < \infty$。 + +则 $\sum_{m>n} (1 - \rho_m) \leq \sum_{m>n} \mu_m^2/8 < \infty$,因此这两个尾部乘积是等价的,它们的似然比为 + +$$ +L = \exp\!\left(S - \tfrac12 \sigma_n^2\right), +\qquad S = \sum_{m>n} \mu_m x_m 。 +$$ + +在 $P$ 下,$S \sim \mathcal{N}(0, \sigma_n^2)$;在 $Q$ 下,$S \sim \mathcal{N}(\sigma_n^2, \sigma_n^2)$。 + +由于 $L$ 是 $S$ 的函数,尾部乘积之间的全变差距离等于 $S$ 的两个分布之间的全变差距离。 + +这两个正态密度在 $\sigma_n^2/2$ 处相交,因此 + +$$ +d_n = \Phi\!\left(\frac{\sigma_n}{2}\right) - \Phi\!\left(-\frac{\sigma_n}{2}\right) = 2\Phi\!\left(\frac{\sigma_n}{2}\right) - 1。 +$$ + +假设 $\sigma_n = \infty$。 + +若 $\mu_m \not\to 0$,则项 $1 - \rho_m = 1 - e^{-\mu_m^2/8}$ 不趋于零;若 $\mu_m \to 0$,则对较大的 $m$ 有 $1 - \rho_m \geq \mu_m^2/16$。 + +无论哪种情况,$\sum_{m>n}(1-\rho_m) = \infty$,由角谷定理可知尾部乘积是奇异的,且 $d_n = 1$。 + +第 2 部分。 + +对于 $\mu_m = c/m$,$\sigma_n^2 = c^2 \sum_{m>n} m^{-2}$,且 $1/(n+1) \leq \sum_{m>n} m^{-2} \leq 1/n$。 + +因此 $\sigma_n \approx c/\sqrt{n}$,由 $2\Phi(x) - 1 \approx x\sqrt{2/\pi}$(当 $x$ 较小时)可得 $d_n \approx c/\sqrt{2\pi n}$。 + +尾部和 $\sum_{m>n} m^{-2}$ 是三伽玛函数 $\psi'(n+1)$,可由 `polygamma(1, n + 1)` 计算。 + +第 3 部分。 + +对于 $\mu_m = c/\sqrt{m}$,对每个 $n$ 都有 $\sum_{m>n} c^2/m = \infty$,因此 $d_n = 1$。 + +一步预测距离为 $2\Phi(c/(2\sqrt{n+1})) - 1 \to 0$。 + +对任意固定的 $k$,两个智能体对 $(x_{n+1}, \ldots, x_{n+k})$ 预测之间的距离为 $2\Phi\bigl(\tfrac12 (\sum_{m=n+1}^{n+k} c^2/m)^{1/2}\bigr) - 1 \leq 2\Phi\bigl(c\sqrt{k}/(2\sqrt{n+1})\bigr) - 1 \to 0$。 + +智能体对任意固定数量的未来观测值的预测会融合,但它们对整个未来的预测永远不会融合。 + +```{code-cell} ipython3 +c = 2.0 +n_vals = np.arange(1, 1001) + +σ_inv_m = c * np.sqrt(polygamma(1, n_vals + 1)) # μ_m = c/m +d_inv_m = 2 * norm.cdf(σ_inv_m / 2) - 1 +d_inv_m_approx = c / np.sqrt(2 * np.pi * n_vals) +one_step_sqrt = 2 * norm.cdf(c / (2 * np.sqrt(n_vals + 1))) - 1 # μ_m = c/√m + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.loglog(n_vals, d_inv_m, color='steelblue', lw=2, + label=r'$d_n$, $\mu_m = c/m$') +ax.loglog(n_vals, d_inv_m_approx, color='steelblue', lw=1.5, ls='--', + label=r'$c/\sqrt{2\pi n}$') +ax.loglog(n_vals, np.ones_like(n_vals, dtype=float), color='purple', + lw=2, label=r'$d_n$, $\mu_m = c/\sqrt{m}$') +ax.loglog(n_vals, one_step_sqrt, color='purple', lw=1.5, ls=':', + label=r'one-step distance, $\mu_m = c/\sqrt{m}$') +ax.set_xlabel('$n$') +ax.set_ylabel('total-variation distance') +ax.legend(fontsize=8) +plt.tight_layout() +plt.show() + +n = 100 +print(f"n = {n}: exact d_n = {d_inv_m[n - 1]:.4f}, " + f"approximation = {d_inv_m_approx[n - 1]:.4f}") +``` -{cite}`DiaconisFreedman1986` 研究贝叶斯估计的一致性,证明了涉及后验收敛的等价性,并提供了突出先验作用的反例。 +在 $n = 100$、$c = 2$ 时,精确距离为 $0.0795$,近似值为 $0.0798$。 -他们的工作与布莱克韦尔-杜宾斯处于相同的思想传统中,在经济学学习文献中通常与融合定理一起被引用。 \ No newline at end of file +对于 $\mu_m = c/\sqrt{m}$ 的一步预测距离几乎与 $\mu_m = c/m$ 的 $d_n$ 重合,因为 $\mu_{n+1}^2 = c^2/(n+1)$ 与 $c^2 \sum_{m>n} m^{-2}$ 都接近于 $c^2/n$。 + +```{solution-end} +``` + +```{exercise} +:label: mo_ex_zinf + +设 $\pi_1$ 和 $\pi_2$ 是 $(0,1)$ 上的先验密度,满足只要 $\pi_1 > 0$ 则 $\pi_2 > 0$,设 $P_i = \int_0^1 P_p\,\pi_i(p)\,dp$,并令 $\bar p = \limsup_n k_n/n$。 + +1. 证明在 $\mathscr{F}$ 上 $dP_1/dP_2 = \pi_1(\bar p)/\pi_2(\bar p)$,因此 $Z_\infty = \pi_1(\bar p)/\pi_2(\bar p)$。 +2. 对于先验 $\mathrm{Beta}(1,8)$ 和 $\mathrm{Beta}(8,1)$,从 $P_2$ 中模拟若干条路径。 + 将大 $n$ 时的 $\log Z_n$ 与 $7\log((1-\hat p_n)/\hat p_n)$ 进行比较,其中 $\hat p_n = k_n/n$;并与 $7\log((1-p)/p)$ 进行比较,其中 $p$ 是该路径上抽取的硬币参数。 +``` + +```{solution-start} mo_ex_zinf +:class: dropdown +``` + +第 1 部分。 + +在 $P_p$ 下,强大数定律给出 $\bar p = p$ 几乎必然成立。 + +设在 $\pi_2 = 0$ 处 $\pi_1/\pi_2 = 0$。 + +对每个 $A \in \mathscr{F}$, + +$$ +\begin{aligned} +P_1(A) +&= \int_0^1 P_p(A)\, \pi_1(p)\, dp += \int_0^1 \mathbb{E}_{P_p}[\mathbf{1}_A]\, \frac{\pi_1(p)}{\pi_2(p)}\, \pi_2(p)\, dp \\ +&= \int_0^1 \mathbb{E}_{P_p}\!\left[\mathbf{1}_A\, \frac{\pi_1(\bar p)}{\pi_2(\bar p)}\right] \pi_2(p)\, dp += \mathbb{E}_{P_2}\!\left[\mathbf{1}_A\, \frac{\pi_1(\bar p)}{\pi_2(\bar p)}\right]。 +\end{aligned} +$$ + +第二个等式使用了只要 $\pi_1 > 0$ 则 $\pi_2 > 0$ 的条件。 + +第三个等式将 $p$ 替换为 $\bar p$,两者在 $P_p$ 下几乎必然相等。 + +因此 $\pi_1(\bar p)/\pi_2(\bar p)$ 是 $P_1$ 关于 $P_2$ 在 $\mathscr{F}$ 上的一个密度,由 {prf:ref}`martingale_convergence` 可得 $Z_\infty = \pi_1(\bar p)/\pi_2(\bar p)$。 + +拉普拉斯近似解释了 $Z_n$ 的收敛性。 + +比值 $Z_n = \int_0^1 p^{k_n}(1-p)^{n-k_n}\pi_1(p)\,dp \,/\, \int_0^1 p^{k_n}(1-p)^{n-k_n}\pi_2(p)\,dp$ 对两个先验都用一个集中于 $\hat p_n$ 附近的似然进行加权,因此 $Z_n \approx \pi_1(\hat p_n)/\pi_2(\hat p_n)$。 + +第 2 部分。 + +```{code-cell} ipython3 +n_ex = 20_000 +rng_z = np.random.default_rng(5) + +print(f"{'p':>6} {'p_hat':>7} {'log Z_n':>9} " + f"{'gap to p_hat formula':>21} {'gap to p formula':>17}") +for j in range(6): + p = rng_z.beta(a2, b2) # p drawn from π_2 + data = rng_z.binomial(1, p, n_ex) + log_Z_n = log_likelihood_ratio(data, a1, b1, a2, b2)[-1] + p_hat = data.mean() + gap_hat = log_Z_n - 7 * np.log((1 - p_hat) / p_hat) + gap_true = log_Z_n - 7 * np.log((1 - p) / p) + print(f"{p:6.3f} {p_hat:7.4f} {log_Z_n:9.3f} " + f"{gap_hat:21.3f} {gap_true:17.3f}") +``` + +在 $n = 20{,}000$ 时,这些路径上 $\log Z_n$ 与 $7\log((1-\hat p_n)/\hat p_n)$ 之间的差值至多为 $0.10$。 + +该差值是拉普拉斯近似的 $O(1/n)$ 误差,在 $p$ 最接近 1 的路径上该差值最大,因为此时 $\log(\pi_1/\pi_2)$ 的导数较大。 + +$\log Z_n$ 与 $7\log((1-p)/p)$ 之间的差值可达 $0.25$,这是因为 $\hat p_n$ 与 $p$ 之间相差 $O(n^{-1/2})$;随着 $\hat p_n \to p$,该差值趋于消失。 + +在该讲座第一张图所示的路径上,$\log Z_{600} = -4.07$,而 $7\log((1-\hat p_{600})/\hat p_{600}) = -4.13$。 + +```{solution-end} +``` diff --git a/lectures/navy_captain.md b/lectures/navy_captain.md index c9873418..4cc69924 100644 --- a/lectures/navy_captain.md +++ b/lectures/navy_captain.md @@ -19,6 +19,7 @@ translation: Distribution of Bayesian Decision Rule’s Time to Decide: 贝叶斯决策规则的决策时间分布 Probability of Making Correct Decision: 做出正确决策的概率 Distribution of Likelihood Ratios at Neyman-Pearson's $t$: Neyman-Pearson的$t$处的似然比分布 + Exercises: 练习 --- (bayesian_vs_frequentist__v1)= @@ -37,7 +38,7 @@ translation: ``` -```{code-cell} ipython +```{code-cell} ipython3 import matplotlib.pyplot as plt import matplotlib as mpl FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" @@ -48,7 +49,7 @@ import numpy as np from numba import jit, prange, float64, int64 from numba.experimental import jitclass from math import gamma -from scipy.optimize import minimize +from scipy.integrate import quad ``` ## 概述 @@ -59,10 +60,11 @@ from scipy.optimize import minimize * {doc}`弗里德曼与瓦尔德问题的贝叶斯表述 ` * {doc}`可交换性和贝叶斯更新 ` * {doc}`似然比过程 ` +* {doc}`似然比过程与贝叶斯学习 ` -{doc}`令米尔顿·弗里德曼困惑的问题 `描述了二战期间一位海军上尉向米尔顿·弗里德曼提出的问题。 +{doc}`令米尔顿·弗里德曼困惑的问题 ` 描述了二战期间一位海军上尉向米尔顿·弗里德曼提出的问题。 -海军告诉这位上尉要使用一个质量控制决策规则。 +海军告诉这位上尉,要使用一个决策规则,通过试射测试弹药来比较两种军械装置的设计。 具体来说,海军命令上尉使用一个**频率主义决策规则**的实例。 @@ -72,11 +74,23 @@ from scipy.optimize import minimize 该小组的成员之一,伟大的数学家和经济学家亚伯拉罕·瓦尔德很快就解决了这个问题。 -阐述这个问题的一个好方法是使用一些贝叶斯统计中的思想,这些思想我们在讲座{doc}`可交换性和贝叶斯更新 `和讲座{doc}`似然比过程 `中有所描述,后者阐述了贝叶斯更新和似然比过程之间的联系。 +阐述这个问题的一个好方法是使用一些贝叶斯统计中的思想,这些思想我们在 {doc}`exchangeable` 以及 {doc}`likelihood_bayes` 中关于 {ref}`似然比过程与贝叶斯法则 ` 的章节中有所描述,后者阐述了贝叶斯更新和似然比过程之间的联系。 + +本讲座使用 Python 生成模拟,评估在海军上尉所质疑的 Neyman-Pearson**频率主义**程序,以及 {doc}`弗里德曼与瓦尔德问题的贝叶斯表述 ` 中描述的**贝叶斯**决策规则下的预期损失。 + +我们选择频率主义规则的样本量和截断值,以在贝叶斯主义者所使用的先验概率和损失下,使预期损失最小化。 + +这样一来,频率主义规则就成为一个样本量预先固定的贝叶斯规则。 + +而贝叶斯规则则是按顺序选择其样本量的。 + +固定样本量的规则是一种特殊的序贯规则,因此最优序贯规则的预期损失不会大于最优固定样本规则的预期损失。 + +{cite:t}`WaldWolfowitz1948` 证明了,在给定第一类和第二类错误概率的所有检验中,瓦尔德的序贯概率比检验能够使两种假设下所需抽取样本数量的期望值最小化。 -本讲座使用Python生成模拟,评估在海军上尉所质疑的Neyman-Pearson**频率主义**程序,以及{doc}`弗里德曼与瓦尔德问题的贝叶斯表述 `中描述的**贝叶斯**决策规则下的预期损失。 +{cite:t}`ArrowBlackwellGirshick1949` 展示了如何通过逆向归纳法计算序贯决策问题的贝叶斯解。 -这些模拟证实了海军上尉的直觉,即存在一个比海军命令他使用的Neyman-Pearson似然比检验更好的规则。 +我们的模拟说明了这些定理,并衡量了海军上尉的直觉究竟有多大价值。 ## 设置 @@ -84,7 +98,7 @@ from scipy.optimize import minimize - 每个时期决策者都会抽取一个非负随机变量 $Z$。他知道可能存在两种概率分布,$f_{0}$和$f_{1}$,并且无论是哪种分布都会随时间保持不变。决策者认为在时间开始之前,自然界一次性地选择了$f_{0}$或$f_1$,且选择$f_0$的概率为$\pi^{*}$。 -- 决策者从自然界选择的分布中观察到样本$\left\{ z_{i}\right\} _{i=0}^{t}$。 +- 决策者从自然界选择的分布中观察到样本$\left\{ z_{i}\right\} _{i=1}^{t}$。 决策者想要确定究竟是哪个分布在支配$Z$。 @@ -95,6 +109,18 @@ from scipy.optimize import minimize 决策者需要支付成本$c$来获取另一个$z$。 +```{note} +本讲座用$\pi$表示$f_0$的概率,并将似然比定义为$L = f_0/f_1$。 + +按照这一约定,较高的$\pi$和$L$值支持$f_0$,贝叶斯决策者在$\pi \geq A$时接受$f_0$。 + +{doc}`wald_friedman_2` 用$\pi$表示$f_1$的概率;其决策者在$\pi \geq A$时接受$f_1$。 + +{doc}`wald_friedman` 将似然比定义为$f_1/f_0$。 + +我们按照本讲座的约定重写了从 {doc}`wald_friedman_2` 借鉴来的代码:在贝叶斯更新$\kappa$、停止决策的预期损失以及贝尔曼算子`Q`中,$\pi$与$1-\pi$互换了位置。 +``` + 我们主要借鉴了quantecon讲座{doc}`弗里德曼与瓦尔德问题的贝叶斯表述 `中的参数,不过我们将$\bar L_{0}$和$\bar L_{1}$都从$25$增加到了$100$,以鼓励贝叶斯决策规则在做决定前进行更多次抽样。 我们将每次额外抽样的成本$c$设为$1.25$。 @@ -117,7 +143,7 @@ def p(x, a, b): ```{code-cell} ipython3 wf_data = [ - ('c', float64), # 失业补偿 + ('c', float64), # 抽取另一个z的成本 ('a0', float64), # beta分布的参数 ('b0', float64), ('a1', float64), @@ -177,7 +203,19 @@ class WaldFriedman: return π_new ``` +`WaldFriedman`的构造函数使用numba的随机数生成器从每个密度中抽取`mc_size`个$z$的蒙特卡洛值。 + +从Python调用`np.random.seed`并不会为numba的生成器设定种子。 + +我们在一个经过jit编译的函数内部为其设定种子。 + ```{code-cell} ipython3 +@jit +def seed_numba(seed): + "为numba编译代码所使用的随机数生成器设定种子。" + np.random.seed(seed) + +seed_numba(1234) wf = WaldFriedman() grid = np.linspace(0, 1, 50) @@ -208,15 +246,15 @@ plt.show() * 似然比的临界值 $d$ 令 -$L\left(z^{t}\right)=\prod_{i=0}^{t}\frac{f_{0}\left(z_{i}\right)}{f_{1}\left(z_{i}\right)}$ -为观察序列 $\left\{ z_{i}\right\} _{i=0}^{t}$ 的似然比。 +$L\left(z^{t}\right)=\prod_{i=1}^{t}\frac{f_{0}\left(z_{i}\right)}{f_{1}\left(z_{i}\right)}$ +为观察序列 $\left\{ z_{i}\right\} _{i=1}^{t}$ 的似然比。 与样本量 $t$ 相关的决策规则是: - 如果似然比大于 $d$,则判定 $f_0$ 是分布 - 如果似然比小于 $d$,则判定 $f_1$ 是分布 -为此,我们想要计算使用这一规则所产生的预期损失,其中我们借用了{doc}`弗里德曼与瓦尔德问题的贝叶斯表述 `中的损失参数$\bar L_1$和$\bar L_2$。 +为此,我们想要计算使用这一规则所产生的预期损失,其中我们借用了 {doc}`弗里德曼与瓦尔德问题的贝叶斯表述 ` 中的损失参数 $\bar L_0$ 和 $\bar L_1$。 令零假设和备择假设为 @@ -245,8 +283,8 @@ $$ - $PFA$ 表示**虚警**的概率,即 当 $H_0$ 为真时却拒绝它 -- $PD$ 表示**检测错误**的概率,即 - 当 $H_1$ 为真时却没有拒绝 $H_0$ +- $PD$ 表示**检测**的概率,即 + 当 $H_1$ 为真时拒绝 $H_0$(即检验的功效);$1 - PD$ 为第二类错误的概率 对于给定的样本量 $t$,$\left(PFA,PD\right)$ 对 位于**接收者操作特征曲线**上。 @@ -266,8 +304,10 @@ T = 100 ``` ```{code-cell} ipython3 -z0_arr = np.random.beta(wf.a0, wf.b0, (N, T)) -z1_arr = np.random.beta(wf.a1, wf.b1, (N, T)) +rng = np.random.default_rng(1234) + +z0_arr = rng.beta(wf.a0, wf.b0, (N, T)) +z1_arr = rng.beta(wf.a1, wf.b1, (N, T)) ``` ```{code-cell} ipython3 @@ -291,14 +331,16 @@ L0_arr = np.cumprod(l0_arr, 1) L1_arr = np.cumprod(l1_arr, 1) ``` +`L0_arr` 和 `L1_arr` 的第 `t-1` 列保存的是经过 $t$ 次抽取后的似然比 $L(z^t)$。 + 有了似然比的经验分布后,我们可以通过列举每个样本量 $t$ 下的 $\left(PFA,PD\right)$ 对来绘制**接收者操作特征曲线**。 ```{code-cell} ipython3 PFA = np.arange(0, 100, 1) for t in range(1, 15, 4): - percentile = np.percentile(L0_arr[:, t], PFA) - PD = [np.sum(L1_arr[:, t] < p) / N for p in percentile] + percentile = np.percentile(L0_arr[:, t-1], PFA) + PD = [np.sum(L1_arr[:, t-1] < p) / N for p in percentile] plt.plot(PFA / 100, PD, label=f"t={t}") @@ -314,7 +356,7 @@ plt.title("接收者操作特征曲线") plt.show() ``` -我们可以通过选择 $\left(t,d\right)$ 来最小化方程{eq}`val1`中给出的预期总损失。 +我们可以通过选择 $\left(t,d\right)$ 来最小化方程 {eq}`val1` 中给出的预期总损失。 这样做会得到预期损失 @@ -322,6 +364,8 @@ $$ \bar{V}_{fre}=\min_{t,d}\bar{V}_{fre}\left(t,d\right). $$ +我们让 $t$ 取遍 $1, 2, \ldots, T$。[^t0] + 我们首先考虑 $\pi^{*}=\Pr\left\{ \text{自然选择}f_{0}\right\} =0.5$ 的情况。 @@ -331,6 +375,24 @@ $\pi^{*}=\Pr\left\{ \text{自然选择}f_{0}\right\} =0.5$ 首先,我们固定$t$并找到最优截断值$d$, 从而得到最小值$\bar{V}_{fre}\left(t\right)$。 +对于每个 $t$,临界值 + +```{math} +:label: eq_dstar + +d^{*}=\frac{\left(1-\pi^{*}\right)\bar L_{0}}{\pi^{*}\bar L_{1}} +``` + +可以最小化 $\bar{V}_{fre}\left(t,d\right)$。 + +"若 $L(z^t) < d^*$ 则判定为 $f_1$"这条规则,在经过 $t$ 次抽取后,选择的是后验期望损失较小的那个决策。 + +因此,当 $d = d^*$ 时,频率派的规则实际上就是一条样本量事先固定的贝叶斯规则。 + +{ref}`nc_ex1` 要求你推导 {eq}`eq_dstar` 并通过数值方法进行验证。 + +其次,我们对 $t$ 最小化 $\bar{V}_{fre}\left(t\right) = \bar{V}_{fre}\left(t, d^*\right)$。 + 以下是执行该操作并绘制有用图表的Python代码。 ```{code-cell} ipython3 @@ -348,14 +410,19 @@ def V_fre_d_t(d, t, L0_arr, L1_arr, π_star, wf): ``` ```{code-cell} ipython3 +def d_star(π_star, wf): + "对于任意t,使期望损失最小化的L = f0/f1的临界值。" + + return (1 - π_star) * wf.L0 / (π_star * wf.L1) + + def V_fre_t(t, L0_arr, L1_arr, π_star, wf): - res = minimize(V_fre_d_t, 1, args=(t, L0_arr, L1_arr, π_star, wf), method='Nelder-Mead') - V = res.fun - d = res.x + d = d_star(π_star, wf) + V = V_fre_d_t(d, t, L0_arr, L1_arr, π_star, wf) - PFA = np.sum(L0_arr[:, t-1] < d) / N - PD = np.sum(L1_arr[:, t-1] < d) / N + PFA = np.mean(L0_arr[:, t-1] < d) + PD = np.mean(L1_arr[:, t-1] < d) return V, PFA, PD ``` @@ -382,8 +449,8 @@ def compute_V_fre(L0_arr, L1_arr, π_star, wf): π_star = 0.5 V_fre_arr, PFA_arr, PD_arr = compute_V_fre(L0_arr, L1_arr, π_star, wf) -plt.plot(range(T), V_fre_arr, label=r'$\min_{d} \overline{V}_{fre}(t,d)$') -plt.xlabel('时间t') +plt.plot(range(1, T+1), V_fre_arr, label=r'$\min_{d} \overline{V}_{fre}(t,d)$') +plt.xlabel('t') plt.title(r'$\pi^*=0.5$') plt.legend() plt.show() @@ -422,6 +489,10 @@ plt.xlabel(r'$\pi^*$') plt.title(r'$\overline{V}_{fre}$') plt.show() + +V_no_data = np.minimum(π_star_arr * wf.L1, (1 - π_star_arr) * wf.L0) +print("在以下π*值下,不经抽样直接做决定优于任何t ≥ 1的情形:", + np.round(π_star_arr[V_no_data < V_fre_bar_arr], 2)) ``` 下图展示了当 $\pi^{*}$ 变化时,最优样本量 $t$ 和目标 $\left(PFA,PD\right)$ 如何变化。 @@ -444,11 +515,13 @@ plt.show() ## 贝叶斯决策规则 -在{doc}`令米尔顿·弗里德曼困惑的问题 `中,我们了解到亚伯拉罕·瓦尔德如何证实了海军上尉的直觉,即存在一个更好的决策规则。 +在 {doc}`令米尔顿·弗里德曼困惑的问题 ` 中,我们了解到亚伯拉罕·瓦尔德如何证实了海军上尉的直觉,即存在一个更好的决策规则。 -在{doc}`弗里德曼与瓦尔德问题的贝叶斯表述 `中,我们提出了一个贝叶斯程序,该程序通过比较贝叶斯后验概率$\pi$与称为$A$和$B$的临界概率来做出决策。 +在 {doc}`弗里德曼与瓦尔德问题的贝叶斯表述 ` 中,我们提出了一个贝叶斯程序,该程序通过比较贝叶斯后验概率$\pi$与称为$A$和$B$的临界概率来做出决策。 -为了继续,我们从quantecon讲座{doc}`弗里德曼与瓦尔德问题的贝叶斯表述 `中借用一些Python代码,用于计算$A$和$B$的最优值。 +为了继续,我们从 quantecon 讲座 {doc}`弗里德曼与瓦尔德问题的贝叶斯表述 ` 中借用一些Python代码,用于计算$A$和$B$的最优值。 + +我们按照本讲座的约定重写该代码,即$\pi$是$f_0$的概率。 ```{code-cell} ipython3 @jit(parallel=True) @@ -514,35 +587,29 @@ h_star = solve_model(wf) ``` ```{code-cell} ipython3 -@jit def find_cutoff_rule(wf, h): - """ - 此函数接收一个延续值函数并返回相应的临界点, - 这些临界点表示在继续和选择特定模型之间的转换位置 + 此函数接收一个延续值函数并返回临界点 (B, A): + 当 π ≤ B 时决策者接受 f1,当 π ≥ A 时接受 f0, + 当 B < π < A 时抽取另一个 z """ π_grid = wf.π_grid - L0, L1 = wf.L0, wf.L1 - # 在网格上所有点评估选择模型的成本 - payoff_f0 = (1 - π_grid) * L0 - payoff_f1 = π_grid * L1 - - # 通过将这些成本与贝尔曼方程的差值可以找到临界点 - # (J始终小于或等于p_c_i) - B = π_grid[np.searchsorted( - payoff_f1 - np.minimum(h, payoff_f0), - 1e-10) - - 1] - A = π_grid[np.searchsorted( - np.minimum(h, payoff_f1) - payoff_f0, - 1e-10) - - 1] + # 接受每个模型的期望损失 + payoff_f0 = (1 - π_grid) * wf.L0 + payoff_f1 = π_grid * wf.L1 + + # B 是接受 f1 为最优选择的最大 π; + # A 是接受 f0 为最优选择的最小 π + B = π_grid[payoff_f1 <= np.minimum(payoff_f0, h)].max() + A = π_grid[payoff_f0 <= np.minimum(payoff_f1, h)].min() return (B, A) B, A = find_cutoff_rule(wf, h_star) +print(f"B = {B:.3f}, A = {A:.3f}") + cost_L0 = (1 - wf.π_grid) * wf.L0 cost_L1 = wf.π_grid * wf.L1 @@ -558,8 +625,8 @@ ax.plot(wf.π_grid, ax.annotate(r"$B$", xy=(B + 0.01, 0.5), fontsize=14) ax.annotate(r"$A$", xy=(A + 0.01, 0.5), fontsize=14) -plt.vlines(B, 0, B * wf.L0, linestyle="--") -plt.vlines(A, 0, (1 - A) * wf.L1, linestyle="--") +plt.vlines(B, 0, B * wf.L1, linestyle="--") +plt.vlines(A, 0, (1 - A) * wf.L0, linestyle="--") ax.set(xlim=(0, 1), ylim=(0, 0.5 * max(wf.L0, wf.L1)), ylabel="成本", xlabel=r"$\pi$", title="值函数") @@ -576,17 +643,17 @@ plt.show() - 当 $\pi \geq A$ 时接受 $H_0$ - 当 $\pi \leq B$ 时接受 $H_1$ -- 当 $B \leq \pi \leq A$ 时延迟决定并抽取另一个 $z$ +- 当 $B < \pi < A$ 时延迟决定并抽取另一个 $z$ -在这种情况下,我们可以计算两个"客观"损失函数,分别基于确知自然选择了 $f_{0}$ 或 $f_{1}$ 的条件。 +在这种情况下,我们可以计算两个“客观”损失函数,分别基于确知自然选择了 $f_{0}$ 或 $f_{1}$ 的条件。 1. 在 $f_{0}$ 下, $$ V^{0}\left(\pi\right)=\begin{cases} - 0 & \text{if} A \leq\pi,\\ - c+EV^{0}\left(\pi^{\prime}\right) & \text{if }B\leq\pi< A,\\ - \bar L_{1} & \text{if }\pi= A] = wf.L0 - - V_old = np.empty_like(V) - - while True: - V_old[:] = V[:] - V[(B <= wf.π_grid) & (wf.π_grid < A)] = 0 - - for i in prange(len(wf.π_grid)): - π = wf.π_grid[i] - - if π >= A or π < B: - continue - - for j in prange(len(z_arr)): - π_next = wf.κ(z_arr[j], π) - V[i] += wf.c + np.interp(π_next, wf.π_grid, V_old) - - V[i] /= wf.mc_size - - if np.abs(V - V_old).max() < 1e-5: + loss_f0, loss_f1 = wf.L0, 0.0 + + m = len(z_arr) + + # 延续区域之外的终端损失 + V = np.where(π_grid >= A, loss_f0, np.where(π_grid <= B, loss_f1, 0.0)) + + cont = (π_grid > B) & (π_grid < A) + π_cont = π_grid[cont] + n_cont = len(π_cont) + if n_cont == 0: + return V + + V_cont = np.zeros(n_cont) + for it in range(max_iter): + V_old = V_cont.copy() + + for i in prange(n_cont): + total = 0.0 + for j in range(m): + π_next = wf.κ(z_arr[j], π_cont[i]) + if π_next >= A: + total += loss_f0 + elif π_next <= B: + total += loss_f1 + else: + total += np.interp(π_next, π_cont, V_old) + V_cont[i] = wf.c + total / m + + if np.max(np.abs(V_cont - V_old)) < tol: break + V[cont] = V_cont + return V ``` ```{code-cell} ipython3 -V0 = V_q(wf, 0) -V1 = V_q(wf, 1) +V0 = V_q(wf, A, B, 0) +V1 = V_q(wf, A, B, 1) plt.plot(wf.π_grid, V0, label='$V^0$') plt.plot(wf.π_grid, V1, label='$V^1$') @@ -669,10 +760,20 @@ $\pi^{*}=\Pr\left\{ \text{自然选择 }f_{0}\right\}$,我们就可以 然后我们可以确定一个初始贝叶斯先验概率 $\pi_{0}^{*}$,使其 最小化这个期望损失的客观概念。 +一个定理告诉我们 $\pi_{0}^{*}=\pi^{*}$。 + +从先验 $\pi^{*}$ 出发的贝叶斯规则,在所有序贯决策规则中最小化以 $\pi^{*}$ 加权的期望损失。 + +从另一个先验 $\pi_0$ 出发的贝叶斯决策者会使用其中某一条规则。 + +因此对于任意 $\pi_0$,都有 $\bar{V}_{Bayes}\left(\pi_{0}\right)\geq\bar{V}_{Bayes}\left(\pi^{*}\right)$。 + 下面的图展示了四种情况,分别对应 $\pi^{*}=0.25,0.3,0.5,0.7$。 -我们观察到在每种情况下 $\pi_{0}^{*}$ 都等于 $\pi^{*}$。 +数值求出的最小值点接近 $\pi^{*}$,但并不完全相等。 + +函数 $\bar{V}_{Bayes}\left(\pi_{0}\right)$ 在其最小值附近较为平坦,因此网格和蒙特卡洛误差会使计算得到的 $\pi_{0}^{*}$ 有所偏移。 ```{code-cell} ipython3 def compute_V_baye_bar(π_star, V0, V1, wf): @@ -709,9 +810,7 @@ fig.suptitle(r'$\overline{V}_{baye}(\pi)=\pi^*V^0(\pi) + (1-\pi^*)V^1(\pi)$', fo plt.show() ``` -这种结果模式具有普遍性。 - -因此,以下Python代码生成相关图表,验证了对于所有的$\pi^{*}$值,$\pi_{0}^{*}$等于$\pi^{*}$这一等式都成立。 +以下Python代码对一系列 $\pi^{*}$ 的网格值计算 $\pi_{0}^{*}$ 和 $\bar{V}_{Bayes} = \bar{V}_{Bayes}\left(\pi_{0}^{*}\right)$。 ```{code-cell} ipython3 π_star_arr = np.linspace(0.1, 0.9, n_π) @@ -740,13 +839,29 @@ axs[1].set_title(r'给定$\pi^*$的最优先验') axs[1].legend() plt.show() + +print(f"largest |π_0^* - π^*| = {np.max(np.abs(π_optimal_arr - π_star_arr)):.3f}") ``` +计算得到的 $\pi_{0}^{*}$ 与45度线之间的偏差保持在 $0.04$ 以内。 + ## 海军上尉的直觉是否正确? -现在我们比较通过频率派Neyman-Pearson规则和贝叶斯决策规则得到的平均损失。 +现在我们比较通过频率派 Neyman-Pearson 规则和贝叶斯决策规则得到的平均损失。 + +这里比较的是固定样本量规则和序贯规则。 -让我们先从比较$\pi^{*}=0.5$时的平均损失函数开始。 +两种规则都使用先验 $\pi^{*}$ 以及损失 $\bar L_0$、$\bar L_1$ 和 $c$。 + +固定样本规则 $(t, d)$ 是一种序贯规则,它忽略数据直到日期 $t$,然后停止。 + +贝叶斯规则在所有序贯规则中最小化期望损失。 + +因此,对于每一个 $\pi^{*}$,都有 $\bar{V}_{Bayes}\leq\bar{V}_{fre}$。 + +下面的模拟说明了这一不等式,并测量了两者之间的差距。 + +让我们先从比较 $\pi^{*}=0.5$ 时的平均损失函数开始。 ```{code-cell} ipython3 π_star = 0.5 @@ -759,20 +874,27 @@ V_fre_arr, PFA_arr, PD_arr = compute_V_fre(L0_arr, L1_arr, π_star, wf) # 贝叶斯派 V_baye = π_star * V0 + (1 - π_star) * V1 V_baye_bar = V_baye.min() + +print(f"V_fre = {V_fre_arr.min():.2f} at t = {np.argmin(V_fre_arr) + 1}") +print(f"V_Bayes = {V_baye_bar:.2f}") ``` ```{code-cell} ipython3 -plt.plot(range(T), V_fre_arr, label=r'$\min_{d} \overline{V}_{fre}(t,d)$') -plt.plot([0, T], [V_baye_bar, V_baye_bar], label=r'$\overline{V}_{baye}$') +plt.plot(range(1, T+1), V_fre_arr, label=r'$\min_{d} \overline{V}_{fre}(t,d)$') +plt.plot([1, T], [V_baye_bar, V_baye_bar], label=r'$\overline{V}_{baye}$') plt.xlabel('t') plt.title(r'$\pi^*=0.5$') plt.legend() plt.show() ``` -显然,在任何样本量 $t$ 下,Neyman-Pearson决策规则都无法获得比贝叶斯规则更低的损失函数。 +显然,在任何样本量 $t$ 下,Neyman-Pearson 决策规则都无法获得比贝叶斯规则更低的损失函数。 + +在 $\pi^{*}=0.5$ 时,最优固定样本规则抽取 $8$ 个观测值,期望损失为 $18.33$;贝叶斯规则的期望损失为 $11.36$。 + +贝叶斯值是使用存储在 `wf.z0` 和 `wf.z1` 中的 $1{,}000$ 次蒙特卡洛抽样计算得到的,因此其末位数字并不可靠;后面一节中的模拟显示贝叶斯损失接近 $12.3$,仍远低于 $18.33$。 -此外,下图表明贝叶斯决策规则在所有 $\pi^{*}$ 值上平均表现都更好。 +下图比较了所有 $\pi^{*}$ 值下的两种规则。 ```{code-cell} ipython3 fig, axs = plt.subplots(1, 2, figsize=(14, 5)) @@ -787,11 +909,17 @@ axs[1].legend() axs[1].set_xlabel(r'$\pi^*$') plt.show() + +diff = V_fre_bar_arr - V_baye_bar_arr +print(f"min diff = {diff.min():.2f} at π* = {π_star_arr[np.argmin(diff)]:.2f}") +print(f"max diff = {diff.max():.2f} at π* = {π_star_arr[np.argmax(diff)]:.2f}") ``` -上图右侧面板绘制了差值$\bar{V}_{fre}-\bar{V}_{Bayes}$。 +上图右侧面板绘制了差值 $\bar{V}_{fre}-\bar{V}_{Bayes}$。 + +正如该定理所要求的那样,这个差值始终为正值。 -这个差值始终为正值。 +差距在 $\pi^{*}=0.1$ 处最小,为 $2.63$;在 $\pi^{*}\approx 0.82$ 处最大,为 $8.62$。 ## 更多细节 @@ -801,7 +929,7 @@ plt.show() π_star = 0.5 ``` -回顾当$\pi^*=0.5$时,频率派Neyman-Pearson决策规则会**事先**设定一个样本量`t_optimal`。 +回顾当$\pi^*=0.5$时,频率派 Neyman-Pearson 决策规则会**事先**设定一个样本量`t_optimal`。 对于我们的参数设置,我们可以计算它的值: @@ -821,26 +949,28 @@ t_idx = t_optimal - 1 以下Python代码创建了一个图表,显示了贝叶斯决策者的贝叶斯决策时间的频率分布,条件是数据由分布$q=f_{0}$或$q=f_{1}$生成。 -蓝色和红色虚线显示了贝叶斯决策规则的平均值,而黑色虚线显示了频率派的最优样本量$t$。 +蓝色和橙色虚线显示了贝叶斯决策规则在$f_0$和$f_1$下的平均值,而黑色虚线显示了频率派的最优样本量$t$。 当$q=f_0$时,贝叶斯规则平均比频率派规则**更早**做出决定,而当$q=f_1$时则**更晚**做出决定。 +函数 `check_results` 会为那些在$T$之前未能做出决定的路径记录时间$T+1$。 + ```{code-cell} ipython3 @jit(parallel=True) def check_results(L_arr, A, B, flag, π0): N, T = L_arr.shape - time_arr = np.empty(N) - correctness = np.empty(N) + time_arr = np.full(N, T + 1) # T + 1 表示直到T仍未做出决定 + correctness = np.zeros(N, dtype=np.bool_) π_arr = π0 * L_arr / (π0 * L_arr + 1 - π0) for i in prange(N): for t in range(T): - if (π_arr[i, t] < B) or (π_arr[i, t] > A): + if (π_arr[i, t] <= B) or (π_arr[i, t] >= A): time_arr[i] = t + 1 - correctness[i] = (flag == 0 and π_arr[i, t] > A) or (flag == 1 and π_arr[i, t] < B) + correctness[i] = (flag == 0 and π_arr[i, t] >= A) or (flag == 1 and π_arr[i, t] <= B) break return time_arr, correctness @@ -853,16 +983,21 @@ time_arr1, correctness1 = check_results(L1_arr, A, B, 1, π_star) # 无条件分布 time_arr_u = np.concatenate((time_arr0, time_arr1)) correctness_u = np.concatenate((correctness0, correctness1)) + +print("直到T仍未做出决定的路径数:", np.sum(time_arr_u > T)) +print(f"平均决策时间:f0下为{time_arr0.mean():.2f}," + f"f1下为{time_arr1.mean():.2f},合并后为{time_arr_u.mean():.2f}") ``` ```{code-cell} ipython3 n1 = plt.hist(time_arr0, bins=range(1, 30), alpha=0.4, label='f0生成')[0] n2 = plt.hist(time_arr1, bins=range(1, 30), alpha=0.4, label='f1生成')[0] -plt.vlines(t_optimal, 0, max(n1.max(), n2.max()), linestyle='--', label='频率派') +plt.vlines(t_optimal, 0, max(n1.max(), n2.max()), linestyle='--', + color='k', label='频率派') plt.vlines(np.mean(time_arr0), 0, max(n1.max(), n2.max()), - linestyle='--', color='b', label='f0下的E(t)') + linestyle='--', color='C0', label='f0下的E(t)') plt.vlines(np.mean(time_arr1), 0, max(n1.max(), n2.max()), - linestyle='--', color='r', label='f1下的E(t)') + linestyle='--', color='C1', label='f1下的E(t)') plt.legend(); plt.xlabel('t') @@ -876,7 +1011,7 @@ plt.show() 首先,让我们看看贝叶斯信念随时间的模拟。 -利用本讲{doc}`似然比过程 `中描述的从$L_{t}$到$\pi_{t}$的一一映射(给定$\pi_0$),我们可以计算任意时间$t$的更新信念。 +利用 {doc}`likelihood_bayes` 中关于 {ref}`似然比过程与贝叶斯法则 ` 一节所描述的从$L_{t}$到$\pi_{t}$的一一映射(给定$\pi_0$),我们可以计算任意时间$t$的更新信念。 ```{code-cell} ipython3 π0_arr = π_star * L0_arr / (π_star * L0_arr + 1 - π_star) @@ -905,21 +1040,91 @@ plt.show() 上图比较了经过$t$次抽样后贝叶斯后验分布的均值和方差。 -左图比较了$f_{0}$下的$E\left(\pi_{t}\right)$和$f_{1}$下的$1-E\left(\pi_{t}\right)$:它们完全重合。 +左图比较了$E_{f_0}\left(\pi_{t}\right)$和$1-E_{f_1}\left(\pi_{t}\right)$:它们完全重合。 + +$\pi_t$的鞅性质说明了这一结果。 + +在贝叶斯主观分布下(该分布以权重$\pi_0$和$1-\pi_0$混合了$f_0$和$f_1$),$\pi_t$是一个均值为$\pi_0$的鞅。 + +因此对任意$t$都有$\pi_0 E_{f_0}\left(\pi_{t}\right)+\left(1-\pi_0\right)E_{f_1}\left(\pi_{t}\right)=\pi_0$。 + +当$\pi_0=1/2$时,这一恒等式变为$E_{f_0}\left(\pi_{t}\right)=1-E_{f_1}\left(\pi_{t}\right)$。 -然而,如右图所示,当$t$较小时方差存在显著差异:在$f_{1}$下方差更小。 +两条模拟曲线之间的差异仅来自蒙特卡洛误差。 -方差的差异是贝叶斯决策者在$f_{1}$生成数据时等待更长时间才做出决定的原因。 +右图显示,当$t$较小时,$\pi_t$的方差在$f_{1}$下更低。 + +库尔贝克-莱布勒散度的不对称性解释了贝叶斯决策者在$f_{1}$生成数据时等待更长时间才做出决定的原因。 + +{doc}`divergence_measures` 描述了库尔贝克-莱布勒散度。 + +在$f_0$下,每次抽样$\log L_t$平均上升$KL(f_0\|f_1) = E_{f_0}\left[\log\left(f_0(z)/f_1(z)\right)\right]$。 + +在$f_1$下,每次抽样$\log L_t$平均下降$KL(f_1\|f_0) = E_{f_1}\left[\log\left(f_1(z)/f_0(z)\right)\right]$。 + +当$\pi_0 = 1/2$时,贝叶斯决策者在$\log L_t$离开区间$(\log L_B, \log L_A)$时停止,其中$L_A = A/(1-A)$,$L_B = B/(1-B)$。 + +沃尔德对期望抽样次数的近似忽略了$\log L_t$超出阈值的幅度: + +$$ +E_{f_1}[N] \approx \frac{\Pr_{f_1}\{\text{接受} f_1\}\log L_B + \Pr_{f_1}\{\text{接受} f_0\}\log L_A}{-KL(f_1\|f_0)} +$$ + +在$f_0$下情况类似。 + +```{code-cell} ipython3 +def KL(f, g): + "KL(f || g),即f log(f/g)在[0, 1]上的积分。" + integrand = lambda z: f(z) * np.log(f(z) / g(z)) + return quad(integrand, 0, 1)[0] + +KL_01 = KL(wf.f0, wf.f1) +KL_10 = KL(wf.f1, wf.f0) + +LA = (1 - π_star) * A / (π_star * (1 - A)) +LB = (1 - π_star) * B / (π_star * (1 - B)) + +p0 = correctness0.mean() # f0下接受f0的概率 +p1 = correctness1.mean() # f1下接受f1的概率 + +EN0_wald = (p0 * np.log(LA) + (1 - p0) * np.log(LB)) / KL_01 +EN1_wald = (p1 * np.log(LB) + (1 - p1) * np.log(LA)) / (-KL_10) + +print(f"KL(f0||f1) = {KL_01:.3f},KL(f1||f0) = {KL_10:.3f}") +print(f"log L_A = {np.log(LA):.2f},log L_B = {np.log(LB):.2f}") +print(f"E_f0[N]:沃尔德近似值为{EN0_wald:.1f},模拟值为{time_arr0.mean():.1f}") +print(f"E_f1[N]:沃尔德近似值为{EN1_wald:.1f},模拟值为{time_arr1.mean():.1f}") + +# f0下log L_A的平均超出量,以及f1下log L_B的平均超出量 +logL0_stop = np.log(L0_arr[np.arange(N), time_arr0 - 1]) +logL1_stop = np.log(L1_arr[np.arange(N), time_arr1 - 1]) +print(f"平均超出量:f0下为{np.mean(logL0_stop[correctness0] - np.log(LA)):.2f}," + f"f1下为{np.mean(np.log(LB) - logL1_stop[correctness1]):.2f}") +``` + +散度$KL(f_0\|f_1)\approx 0.759$是$KL(f_1\|f_0)\approx 0.344$的两倍多。 + +阈值$\log L_A \approx 2.84$和$\log L_B \approx -2.94$到零的距离大致相等。 + +在$f_1$下,$\log L_t$向$\log L_B$漂移的速度不到它在$f_0$下向$\log L_A$漂移速度的一半。 + +沃尔德近似给出$E_{f_1}[N]\approx 8.3$,接近模拟值$9.1$。 + +它给出的$E_{f_0}[N]\approx 3.4$则远低于模拟值$6.0$。 + +在$f_0$下,接近零的$z$取值会使$\log\left(f_0(z)/f_1(z)\right)$变得非常大,因此$\log L_t$平均会超出$\log L_A$约$2$;而在$f_1$下,$\log L_t$超出$\log L_B$的幅度平均约为$0.3$。 下面的代码通过简单地将两个可能分布$f_0$和$f_1$的模拟数据合并,绘制了无条件分布的结果。 这个合并分布从某种意义上描述了贝叶斯决策者平均会更早做出决定,这似乎在一定程度上证实了海军上尉的直觉判断。 +合并后的平均决策时间为$7.54$次抽样,而$t_{\rm optimal}=8$。 + ```{code-cell} ipython3 n = plt.hist(time_arr_u, bins=range(1, 30), alpha=0.4, label='bayesian')[0] plt.vlines(np.mean(time_arr_u), 0, n.max(), linestyle='--', color='b', label='bayesian E(t)') -plt.vlines(t_optimal, 0, n.max(), linestyle='--', label='frequentist') +plt.vlines(t_optimal, 0, n.max(), linestyle='--', color='k', label='frequentist') plt.legend() plt.xlabel('t') @@ -947,11 +1152,10 @@ plt.plot([1, 20], [PD, PD], linestyle='--', label='PD: 正确选择f1的频率') plt.plot([1, 20], [1-PFA, 1-PFA], linestyle='--', label='1-PFA: 正确选择f0的频率') plt.vlines(t_optimal, 0, 1, linestyle='--', label='频率论最优样本量') -N = time_arr0.size T_arr = np.arange(1, 21) -plt.plot(T_arr, [np.sum(correctness0[time_arr0 <= t] == 1) / N for t in T_arr], +plt.plot(T_arr, [np.mean(correctness0 & (time_arr0 <= t)) for t in T_arr], label='q=f0且贝叶斯选择f0') -plt.plot(T_arr, [np.sum(correctness1[time_arr1 <= t] == 1) / N for t in T_arr], +plt.plot(T_arr, [np.mean(correctness1 & (time_arr1 <= t)) for t in T_arr], label='q=f1且贝叶斯选择f1') plt.legend(loc=4) @@ -969,8 +1173,7 @@ plt.plot([1, 20], [(PD + 1 - PFA) / 2, (PD + 1 - PFA) / 2], linestyle='--', label='频率派正确决策') plt.vlines(t_optimal, 0, 1, linestyle='--', label='频率派最优样本量') -N = time_arr_u.size -plt.plot(T_arr, [np.sum(correctness_u[time_arr_u <= t] == 1) / N for t in T_arr], +plt.plot(T_arr, [np.mean(correctness_u & (time_arr_u <= t)) for t in T_arr], label="贝叶斯派正确决策") plt.legend() @@ -981,21 +1184,37 @@ plt.title('t时刻前做出正确决策的无条件概率') plt.show() ``` +模拟得到的决策时间和正确决策的概率给出了贝叶斯期望损失的第二个估计值。 + +这个估计值使用了与频率派规则相同的模拟路径。 + +```{code-cell} ipython3 +V0_sim = wf.c * time_arr0.mean() + wf.L1 * (1 - correctness0.mean()) +V1_sim = wf.c * time_arr1.mean() + wf.L0 * (1 - correctness1.mean()) +V_baye_sim = π_star * V0_sim + (1 - π_star) * V1_sim + +V_fre_sim = wf.c * t_optimal + V + +print(f"贝叶斯规则: {V_baye_sim:.2f}") +print(f"固定样本规则: {V_fre_sim:.2f}") +``` + +贝叶斯规则的模拟期望损失为 $12.27$,超过了 `V_q` 给出的 $11.36$。 + +这一差距来自于 `V_q` 用来近似期望值的 $1{,}000$ 次抽取 `wf.z0` 和 `wf.z1` 中的蒙特卡洛误差。 + +这两个值都远低于固定样本规则的损失 $18.33$。 + ## Neyman-Pearson的$t$处的似然比分布 接下来我们使用模拟来构建在 $t$ 次抽样后的似然比分布。 -作为有用的参考点,我们还展示了对应于贝叶斯截断值 $A$ 和 $B$ 的似然比。 +作为有用的参考点,我们还展示了对应于贝叶斯截断值 $A$ 和 $B$ 的似然比 $L_A$ 和 $L_B$。 为了更清晰地展示分布,我们报告似然比的对数值。 下面的图表报告了两个分布,一个是在 $f_0$ 生成数据的条件下的分布,另一个是在 $f_1$ 生成数据的条件下的分布。 -```{code-cell} ipython3 -LA = (1 - π_star) * A / (π_star - π_star * A) -LB = (1 - π_star) * B / (π_star - π_star * B) -``` - ```{code-cell} ipython3 L_min = min(L0_arr[:, t_idx].min(), L1_arr[:, t_idx].min()) L_max = max(L0_arr[:, t_idx].max(), L1_arr[:, t_idx].max()) @@ -1014,13 +1233,15 @@ plt.title('频率学派t时对数似然比的条件分布') plt.show() ``` -下一个图表绘制了贝叶斯决策时间的无条件分布,这是通过将两个条件分布合并而构建的。 +下一个图表绘制了在频率学派 $t$ 处 $\log L$ 的无条件分布,这是通过将两个条件分布合并而构建的。 + +当 $\pi^* = 0.5$ 时,合并来自 $f_0$ 和 $f_1$ 的相同数量的路径,相当于用 $\pi^*$ 和 $1-\pi^*$ 对它们进行加权。 ```{code-cell} ipython3 -plt.hist(np.log(np.concatenate([L0_arr[:, t_idx], L1_arr[:, t_idx]])), - bins=50, alpha=0.4, label='log(L)的无条件分布') -plt.vlines(np.log(LB), 0, max(n0.max(), n1.max()), linestyle='--', color='r', label='log($L_B$)') -plt.vlines(np.log(LA), 0, max(n0.max(), n1.max()), linestyle='--', color='b', label='log($L_A$)') +n = plt.hist(np.log(np.concatenate([L0_arr[:, t_idx], L1_arr[:, t_idx]])), + bins=50, alpha=0.4, label='log(L)的无条件分布')[0] +plt.vlines(np.log(LB), 0, n.max(), linestyle='--', color='r', label='log($L_B$)') +plt.vlines(np.log(LA), 0, n.max(), linestyle='--', color='b', label='log($L_A$)') plt.legend() plt.xlabel('log(L)') @@ -1029,3 +1250,285 @@ plt.title('频率论者t时刻的对数似然比的无条件分布') plt.show() ``` + +## 练习 + +```{exercise} +:label: nc_ex1 + +固定样本量 $t$,并将期望损失 {eq}`val1` 视为临界值 $d$ 的函数。 + +1. 证明对于每个 $t$,$d^{*}=\left(1-\pi^{*}\right)\bar L_{0}/\left(\pi^{*}\bar L_{1}\right)$ 最小化 {eq}`val1`。提示:将 $PFA$ 和 $1-PD$ 写成对样本 $z^t$ 的积分,并在每个 $z^t$ 处最小化被积函数。 +2. 设 $\pi_t$ 为从先验 $\pi^{*}$ 出发经过 $t$ 次抽样后 $f_0$ 的后验概率。证明规则"若 $L(z^t) 0.5: {np.sum(gap_nm > 0.5)} of {gap_nm.size}") +``` + +在全部 $400$ 种情形下,闭式解与网格最小值之差均在 $0.25$ 以内。 + +网格最小值低于 $d^{*}$ 处的损失,因为前者是针对模拟样本拟合出的 $d$;而 $d^{*}$ 最小化的是总体损失。 + +Nelder-Mead 将阶梯函数 `V_fre_d_t` 当作光滑函数处理,可能在平坦的台阶上停止。 + +在此例中,它在 $400$ 种情形中的 $2$ 种情形下停止时高出网格最小值超过 $0.5$,在最差情形下高出 $0.69$。 + +```{solution-end} +``` + +```{exercise} +:label: nc_ex2 + +频率派统计学家可以在不使用先验的情况下检验海军上校的直觉。 + +设 $\pi^{*}=0.5$,并取最优固定样本规则在 $t_{\rm optimal}$ 处的误差概率:$\alpha = PFA$ 和 $\beta = 1 - PD$。 + +具有目标 $(\alpha, \beta)$ 的瓦尔德序贯概率比检验使用 {doc}`wald_friedman` 中的临界值 $a(\alpha,\beta) = (1-\beta)/\alpha$ 和 $b(\alpha,\beta) = \beta/(1-\alpha)$。 + +该讲座将它们应用于似然比 $f_1/f_0 = 1/L$。 + +用我们的 $L_t = L(z^t)$ 表示,该检验为 + +- 若 $L_t \geq A_L \equiv 1/b(\alpha,\beta) = (1-\alpha)/\beta$,则接受 $f_0$ +- 若 $L_t \leq B_L \equiv 1/a(\alpha,\beta) = \alpha/(1-\beta)$,则接受 $f_1$ +- 若 $B_L < L_t < A_L$,则继续抽取另一个 $z$ + +在路径 `L0_arr` 和 `L1_arr` 上模拟该检验。 + +报告其实际的误差概率、$E_{f_0}[N]$ 和 $E_{f_1}[N]$,并与 $t_{\rm optimal}$ 进行比较。 +``` + +```{solution-start} nc_ex2 +:class: dropdown +``` + +当 $\pi_0 = 1/2$ 时,$\pi_t = L_t/(1+L_t)$。 + +因此瓦尔德检验就是 `check_results` 中的规则,取 $\pi_0 = 1/2$,概率临界值为 $A_L/(1+A_L)$ 和 $B_L/(1+B_L)$。 + +```{code-cell} ipython3 +V_t, PFA_t, PD_t = V_fre_t(t_optimal, L0_arr, L1_arr, 0.5, wf) +α, β = PFA_t, 1 - PD_t + +A_L = (1 - α) / β +B_L = α / (1 - β) + +n0, accept0 = check_results(L0_arr, A_L / (1 + A_L), B_L / (1 + B_L), 0, 0.5) +n1, accept1 = check_results(L1_arr, A_L / (1 + A_L), B_L / (1 + B_L), 1, 0.5) + +print(f"targets: α = {α:.3f}, β = {β:.3f}") +print(f"realized: α = {1 - accept0.mean():.3f}, β = {1 - accept1.mean():.3f}") +print(f"E_f0[N] = {n0.mean():.2f}, E_f1[N] = {n1.mean():.2f}, " + f"t_optimal = {t_optimal}") +print("paths with no decision by T:", np.sum(n0 > T) + np.sum(n1 > T)) +``` + +瓦尔德检验满足两个目标。 + +其实际误差概率 $0.087$ 和 $0.019$ 均低于 $\alpha = 0.108$ 和 $\beta = 0.059$。 + +在 $f_0$ 下平均抽取 $5.42$ 次观测值,在 $f_1$ 下平均抽取 $6.84$ 次,而固定样本规则的 $t_{\rm optimal} = 8$。 + +序贯检验在两个假设下都具有更小的误差概率和更少的期望抽样次数,因此它在不依赖任何先验的情况下优于海军的规则。 + +{cite:t}`WaldWolfowitz1948` 证明了,任何误差概率不大于序贯概率比检验的检验,在任一假设下的期望抽样次数都不会更小。 + +```{solution-end} +``` + +```{exercise} +:label: nc_ex3 + +本练习衡量序贯抽样的价值。 + +在模拟路径 `L0_arr` 和 `L1_arr` 上评估两种规则,使两者使用相同的随机数。 + +1. 设 $\pi^{*}=0.5$。对于 $0.25$ 到 $14$ 之间的一组抽样成本 $c$,计算 $\bar V_{fre}$ 和 $\bar V_{Bayes}$,并绘制 $\bar V_{fre}-\bar V_{Bayes}$ 相对于 $c$ 的曲线。对每个 $c$,重新求解贝叶斯问题以得到新的临界值 $A$ 和 $B$。让固定样本规则选择 $t=0$,即在期望损失为 $\min\{\pi^{*}\bar L_1, (1-\pi^{*})\bar L_0\}$ 的情况下不使用数据做决策。 +2. 设 $c=1.25$ 和 $\pi^{*}=0.5$,并让贝叶斯主义者从一个 $\pi_0 \neq \pi^{*}$ 的先验出发。绘制 $\bar V_{fre}-\bar V_{Bayes}(\pi_0)$ 相对于 $\pi_0$ 的曲线。当固定样本规则用 $\pi_0$ 代替 $\pi^{*}$ 来选择 $(t, d)$ 时也做同样的处理。 +``` + +```{solution-start} nc_ex3 +:class: dropdown +``` + +下面的函数在自然界以概率 $\pi^{*}$ 选择 $f_0$ 的情况下,计算具有临界值 $(B, A)$ 和先验 $\pi_0$ 的贝叶斯规则的期望损失。 + +先验位于 $(B, A)$ 之外的贝叶斯主义者将不使用数据做决策。 + +```{code-cell} ipython3 +def V_baye_sim(A, B, π0, π_star, wf): + + if π0 >= A: + return (1 - π_star) * wf.L0 + if π0 <= B: + return π_star * wf.L1 + + t0, c0 = check_results(L0_arr, A, B, 0, π0) + t1, c1 = check_results(L1_arr, A, B, 1, π0) + assert max(t0.max(), t1.max()) <= T # every path decides by T + + V0 = wf.c * t0.mean() + wf.L1 * (1 - c0.mean()) + V1 = wf.c * t1.mean() + wf.L0 * (1 - c1.mean()) + + return π_star * V0 + (1 - π_star) * V1 +``` + +固定样本规则的误判损失不依赖于 $c$,因此我们只需计算一次。 + +```{code-cell} ipython3 +π_star = 0.5 +t_grid = np.arange(1, T+1) +loss_t = np.array([V_fre_t(t, L0_arr, L1_arr, π_star, wf)[0] for t in t_grid]) +loss_0 = min(π_star * wf.L1, (1 - π_star) * wf.L0) # decide with t = 0 + +c_grid = np.array([0.25, 0.5, 1, 1.5, 2, 2.5, 3, 4, 6, 8, 10, 14]) +V_fre_c = np.empty_like(c_grid) +V_baye_c = np.empty_like(c_grid) + +for i, c in enumerate(c_grid): + seed_numba(1234) + wf_c = WaldFriedman(c=c) + B_c, A_c = find_cutoff_rule(wf_c, solve_model(wf_c)) + + V_fre_c[i] = min(loss_0, (c * t_grid + loss_t).min()) + V_baye_c[i] = V_baye_sim(A_c, B_c, π_star, π_star, wf_c) + +fig, axs = plt.subplots(1, 2, figsize=(14, 5)) + +axs[0].plot(c_grid, V_fre_c, label=r'$\overline{V}_{fre}$') +axs[0].plot(c_grid, V_baye_c, label=r'$\overline{V}_{baye}$') +axs[0].set_xlabel('$c$') +axs[0].legend() + +axs[1].plot(c_grid, V_fre_c - V_baye_c) +axs[1].set_xlabel('$c$') +axs[1].set_title(r'$\overline{V}_{fre} - \overline{V}_{baye}$, $\pi^*=0.5$') + +plt.show() + +print(np.round(V_fre_c - V_baye_c, 2)) +``` + +该差距从 $c=0.25$ 时的 $2.82$ 上升到 $c=2.5$ 时的 $6.77$,再下降到 $c=14$ 时的 $0.12$。 + +当抽样成本低廉时,两种规则都会抽取大量样本,且很少出错。 + +当抽样成本高昂时,两种规则都只抽取约一次样本。 + +在成本适中时,序贯规则在抽取到有信息量的样本后会提前停止,而固定样本规则则要为其并不需要的抽样付出代价。 + +对于第二部分,用 $\pi_0$ 代替 $\pi^{*}$ 的 `compute_V_fre` 给出了先验为 $\pi_0$ 的决策者会选择的固定样本规则。 + +我们用权重 $\pi^{*}$ 和 $1-\pi^{*}$ 来评估该规则的误差概率。 + +```{code-cell} ipython3 +V_fre_arr, _, _ = compute_V_fre(L0_arr, L1_arr, π_star, wf) +V_fre_bar = V_fre_arr.min() + +π0_grid = np.linspace(0.1, 0.9, 17) +V_baye_π0 = np.empty_like(π0_grid) +V_fre_π0 = np.empty_like(π0_grid) + +for i, π0 in enumerate(π0_grid): + V_baye_π0[i] = V_baye_sim(A, B, π0, π_star, wf) + + V_arr, PFA_arr, PD_arr = compute_V_fre(L0_arr, L1_arr, π0, wf) + k = np.argmin(V_arr) + V_fre_π0[i] = (wf.c * (k + 1) + π_star * PFA_arr[k] * wf.L1 + + (1 - π_star) * (1 - PD_arr[k]) * wf.L0) + +plt.plot(π0_grid, V_fre_bar - V_baye_π0, + label=r'fixed-sample rule designed with $\pi^*$') +plt.plot(π0_grid, V_fre_π0 - V_baye_π0, + label=r'fixed-sample rule designed with $\pi_0$') +plt.axhline(0, color='k', lw=0.5) +plt.axvline(π_star, color='k', ls=':', lw=1) +plt.xlabel(r'$\pi_0$') +plt.title(r'$\overline{V}_{fre} - \overline{V}_{baye}(\pi_0)$, $\pi^*=0.5$') +plt.legend() +plt.show() + +print(np.round(V_fre_bar - V_baye_π0, 2)) +print(np.round(V_fre_π0 - V_baye_π0, 2)) +``` + +即使先验有误,贝叶斯主义者在 $0.15 \leq \pi_0 \leq 0.85$ 的范围内仍优于正确设计的固定样本规则。 + +在 $\pi_0 = 0.1$ 和 $\pi_0 = 0.9$ 时,贝叶斯主义者的起点接近临界值,常常会接受错误的分布。 + +当固定样本规则使用同样错误的先验时,序贯规则在网格上的每个 $\pi_0$ 处都占优。 + +```{solution-end} +``` + +[^t0]: 决策者也可以在不抽取任何 $z$ 的情况下做决策,期望损失为 $\min\{\pi^{*}\bar L_1, (1-\pi^{*})\bar L_0\}$。在我们所取的一组 $\pi^{*}$ 值中,在 $\pi^{*} = 0.1$、$0.86$ 和 $0.9$ 处,该选项优于任何 $t \geq 1$ 的情形。{ref}`nc_ex3` 让固定样本规则选择 $t = 0$。 diff --git a/lectures/pricing_information.md b/lectures/pricing_information.md index ccaac284..2fbf8907 100644 --- a/lectures/pricing_information.md +++ b/lectures/pricing_information.md @@ -132,11 +132,13 @@ $$ (eq:pi_thetastar) 高于 $\theta^*$ 的类型自己会选择 $a_1$,低于此值的类型会选择 $a_2$。 ```{note} -买方的信念 $\theta$ 可以由一个共同先验和一个私下观察到的信号共同生成,正如 {doc}`likelihood_bayes` 中那样。 +买方的信念 $\theta$ 可以由一个共同先验和一个私下观察到的信号共同生成,正如 {doc}`likelihood_bayes` 和 {doc}`exchangeable` 中那样。 -拥有非常精确私人信号的买方的 $\theta$ 接近 $0$ 或 $1$;一个什么都没学到的买方的 $\theta$ 接近 $\theta^*$。 +拥有非常精确私人信号的买方的 $\theta$ 接近 $0$ 或 $1$;一个什么都没学到的买方处于共同先验的位置,而共同先验仅在巧合情况下才等于 $\theta^*$。 -因此本讲座中的"高类型"意味着*信息不佳*,而信息不佳的买方恰恰是最愿意支付的人。 +本讲座中的"高类型"是指信念接近 $\theta^*$ 的买方,他正是最愿意支付的人。 + +当共同先验恰好等于 $\theta^*$ 时,高类型就是信息不佳的买方。 ``` ## 实验及其价值 @@ -211,7 +213,11 @@ print(f'largest gap where pi1 + pi2 >= 1: {worst_ok:.2e}') print(f'largest gap where pi1 + pi2 < 1: {worst_bad:.4f}') ``` -从此我们使用一般形式 {eq}`eq:pi_value`,因为一个*谎报*自己类型的买方通常不会想要服从内置于别人实验中的推荐。 +在该归一化下,反转推荐——在信号 $s_1$ 后采取 $a_2$,在信号 $s_2$ 后采取 $a_1$——的效果劣于直接忽略信号,因此每种类型要么服从,要么忽略。 + +这就是为什么这两个公式对每一个 $\theta$ 都完全一致,包括那些谎报类型、购买为他人设计的实验的买方。 + +从此我们使用一般形式 {eq}`eq:pi_value`,因为它不依赖于该归一化。 以下是信息价值作为买方类型的函数。 @@ -249,13 +255,17 @@ plt.show() ## 布莱克韦尔的序只是偏序 -{doc}`blackwell_kihlstrom` 确立了实验 $E$ 在布莱克韦尔意义上至少与 $E'$ 一样具有信息量,当且仅当 $E'$ 是 $E$ 的**信息降级**(garbling),意味着存在一个随机矩阵 $M$ 满足 +{doc}`blackwell_kihlstrom` 确立了实验 $E$ 在布莱克韦尔意义上至少与 $E'$ 一样具有信息量,当且仅当 $E'$ 是 $E$ 的**信息降级**(garbling)。 + +按照 {prf:ref}`def-sufficiency` 中的记号,令 $\mu = E$ 且 $\nu = E'$,则存在一个马尔可夫矩阵 $Q$ 满足 $$ -E' = E M . +E' = E Q . $$ (eq:pi_garbling) -当 $E$ 可逆时,这很容易检验:求解 $M = E^{-1}E'$ 并检查 $M$ 是否为随机矩阵。 +当 $E$ 可逆时,这很容易检验:求解 $Q = E^{-1}E'$ 并检查 $Q$ 的每个元素是否都非负。 + +$Q$ 的各行之和自动为一:$E Q \mathbf{1} = E' \mathbf{1} = \mathbf{1} = E \mathbf{1}$,而 $E$ 是可逆的,所以 $Q \mathbf{1} = \mathbf{1}$。 ```{code-cell} ipython3 def experiment(pi1, pi2): @@ -263,12 +273,12 @@ def experiment(pi1, pi2): def garbling(E, Ep, tol=1e-9): - """Return M with Ep = E @ M if Ep is a garbling of E, else None.""" + """Return Q with Ep = E @ Q if Ep is a garbling of E, else None.""" if abs(np.linalg.det(E)) < tol: return None - M = np.linalg.solve(E, Ep) - if (M > -tol).all() and np.allclose(M.sum(axis=1), 1, atol=tol): - return M + Q = np.linalg.solve(E, Ep) # rows of Q sum to one automatically + if (Q > -tol).all(): + return Q return None @@ -315,9 +325,13 @@ for t in [0.2, 0.35, 0.65, 0.8]: f' V(E_b) = {value(1, 0.8, t):.4f} prefers {pref}') ``` -$E_a$ 更擅长排除状态 $\omega_2$,而 $E_b$ 更擅长排除状态 $\omega_1$。 +$E_a$ 的信号 $s_1$ 只在状态 $\omega_1$ 下出现,因此它能排除 $\omega_2$;$E_b$ 的信号 $s_2$ 只在状态 $\omega_2$ 下出现,因此它能排除 $\omega_1$。 + +一个倾向于认为 $\omega_1$ 更可能的买方会自行选择 $a_1$,只有在出现有力证据支持 $\omega_2$ 时才转而选择 $a_2$。 -一个已经认为 $\omega_1$ 更可能的买方想要帮助自己区分尚未排除的各种可能性,因此他重视 $E_b$;而倾向于另一方向的买方则重视 $E_a$。 +$E_b$ 恰好能为 $\omega_2$ 提供确凿的证据,因此他重视 $E_b$。 + +出于同样的原因,倾向于 $\omega_2$ 的买方则重视 $E_a$。 这就是信息的**横向**维度。 @@ -345,21 +359,21 @@ V(\theta) \geq V(E(\theta'), \theta) - t(\theta') \ \ \forall \theta, \theta', V(\theta) \geq 0 \ \ \forall \theta . $$ (eq:pi_icir) -{cite:t}`BergemannBonattiSmolin2018` 建立了两个结构性结果,我们将在计算的每一份菜单中看到它们得到证实。 +{cite:t}`BergemannBonattiSmolin2018` 建立了一些结构性结果,我们计算的每一份菜单都证实了这些结果。 ```{prf:proposition} :label: pi_prop_structure -在任何最优菜单中: - -1. 提供完全信息实验 $\overline{E}$; -2. 每个实验都是**非分散的**,意味着对某个 $i \neq j$ 有 $\pi_{ij} = 0$; -3. 在匹配情形下,每个实验都是**集中的**,意味着对某个 $i$ 有 $\pi_{ii} = 1$。 +1. 完全信息实验 $\overline{E}$ 是最优菜单的一部分。 +2. 任何最优菜单中的每个实验都是**非分散的**,意味着对某个 $i \neq j$ 有 $\pi_{ij} = 0$。 +3. 在匹配情形下,任何最优菜单中的每个实验都是**集中的**,意味着对某个 $i$ 有 $\pi_{ii} = 1$。 ``` 第3点是说,在我们的二元设置中,菜单中的每个实验都有 $\pi_1 = 1$ 或 $\pi_2 = 1$。 -最优的降级从不是在各处添加无偏噪声;它使一个状态完全可检测,而使另一个状态模糊化。 +在两个状态和两个信号的情形下,某个非对角元素为零会迫使同一行的对角元素为一,因此“非分散的”与“集中的”这两个概念是一致的。 + +最优实验保留一个能完全揭示某一状态的信号;另一个信号则带有噪声。 ## 两种类型 @@ -379,15 +393,20 @@ $$ 一旦选定低类型的实验,这三个事实就确定了两个价格。 +要在*所有*低类型实验上进行搜索,我们还需要为那些高类型比低类型更不看重的实验确定价格。 + +对于这些实验,使高类型激励约束绑定的价格会超过他对 $\overline{E}$ 的价值,因此这时绑定的是他的参与约束。 + +下面的函数会向高类型收取这两个价格中较小的一个。 + ```{code-cell} ipython3 def two_type_revenue(pi1, pi2, tL, tH, gamma, u1=1.0, u2=1.0): """Revenue when the high type buys E_bar and the low type buys (pi1, pi2).""" VbarH, VbarL = value(1, 1, tH, u1, u2), value(1, 1, tL, u1, u2) VL_L, VL_H = value(pi1, pi2, tL, u1, u2), value(pi1, pi2, tH, u1, u2) t_low = VL_L # low type's IR binds - t_high = VbarH - VL_H + t_low # high type's IC binds - if t_high > VbarH + 1e-12: # high type must participate - return -np.inf + t_high = min(VbarH - VL_H + t_low, # high type's IC + VbarH) # high type's IR if VbarL - t_high > 1e-12: # low type must not deviate return -np.inf return gamma * t_high + (1 - gamma) * t_low @@ -405,7 +424,7 @@ $$ \pi_1' = \frac{u_1 \theta^H - u_2 (1 - \theta^H)}{u_1 \theta^H} $$ (eq:pi_zerovalue) -使高类型在信号 $s_1$ 后对他的两个行动恰好无差异,因此该实验对他毫无价值,而低类型则严格地重视它。 +使高类型在信号 $s_2$ 后对他的两个行动恰好无差异,因此该实验对他毫无价值,而低类型则严格地重视它。 这是可行的但不是最优的。 @@ -427,7 +446,13 @@ print(f' V(E_opt, theta_L) = {value(pi1_opt, 1, tL):.4f}' f' V(E_opt, theta_H) = {value(pi1_opt, 1, tH):.4f}') ``` -第二个实验给*两种*类型带来相同的总价值,因此卖方可以向每种类型收取恰好等于信息价值的费用,不留下任何租金。 +第二个实验给*两种*类型带来相同的信息净价值,即 $0.16$。 + +卖方向低类型收取 $0.16$ 作为这个实验的价格,而向高类型收取他对 $\overline{E}$ 的全部价值。 + +高类型的激励约束绑定,两种类型的参与约束也都绑定。 + +卖方从两种类型那里榨取了全部剩余;筛选的唯一代价是对低类型实验的扭曲。 ```{code-cell} ipython3 --- @@ -477,7 +502,7 @@ def brute_force(tL, tH, gamma, n=301, u1=1.0, u2=1.0): print(f'{"gamma":>7s}{"brute force":>13s}{"argmax":>18s}' - f'{"eq (20) menu":>14s}{"E_bar to both":>15s}') + f'{"closed form":>14s}{"E_bar to both":>15s}') for gamma in [0.10, 0.25, 0.30, 0.50, 0.90]: best, arg = brute_force(tL, tH, gamma) closed = two_type_revenue(pi1_opt, 1.0, tL, tH, gamma) @@ -499,7 +524,7 @@ print(f'\nthe paper: discriminate iff gamma > theta_L / theta_H = {tL / tH:.4f}' 现在设 $\theta$ 分布在 $[0,1]$ 上,密度为 $f$,分布函数为 $F$。 -关键的简化在于:一个实验的价值仅通过标量 +关键的简化在于:一个*集中*实验的价值仅通过标量 $$ q = \pi_1 u_1 - \pi_2 u_2 \in [-u_2,\ u_1] , @@ -507,6 +532,10 @@ $$ (eq:pi_q) 来依赖于 $(\pi_1, \pi_2)$,{cite:t}`BergemannBonattiSmolin2018` 称之为该实验的**差异性信息量**。 +根据 {prf:ref}`pi_prop_structure` 的第3部分,将卖方限制为只提供集中实验不会造成任何损失。 + +对于其他实验,$q$ 并不能决定其价值:当 $u_1 = u_2 = 1$ 时,实验 $(0.8, 0.8)$、$(0.9, 0.9)$ 和 $(1, 1)$ 都有 $q = 0$,但在 $\theta = 1/2$ 处,它们的价值分别为 $0.3$、$0.4$ 和 $0.5$。 + 用 $q$ 表示,该价值变为 $$ @@ -581,8 +610,8 @@ def solve_menu(theta, f, u1=1.0, u2=1.0): """Solve the seller's problem on a grid of types by linear programming.""" N = len(theta) dth = theta[1] - theta[0] + f = f / (np.sum(f) * dth) # density on the grid F = np.cumsum(f) * dth - F = F / F[-1] w = np.full(N, dth) d = u1 - u2 @@ -615,8 +644,20 @@ $$ (eq:pi_virtual) 用它们积分的凸包的导数来替换它们,然后找到 {eq}`eq:pi_integral` 上乘数的值(参见 {cite:t}`Myerson1981` 和 {cite:t}`Toikka2011`)。 +把熨平后的虚拟值记为 $\bar\phi^-$ 和 $\bar\phi^+$。 + +{cite:t}`BergemannBonattiSmolin2018` 证明,菜单 $q^*$ 是最优的,当且仅当它满足 {eq}`eq:pi_integral`,在相关熨平虚拟值为常数的每个区间上它也为常数,并且存在某个乘数 $\lambda^* > 0$,使得对每个 $\theta$,$q^*(\theta)$ 在 $q \in [-u_2, u_1]$ 范围内使以下表达式最大化 + +$$ +\bar\phi^-(\theta) \min\{q, d\} + \bar\phi^+(\theta) \max\{0, q - d\} - \lambda^* q +$$ (eq:pi_pointwise) + +当 $\bar\phi^+(\theta) \leq \bar\phi^-(\theta)$ 时,若 $\bar\phi^-(\theta) < \lambda^*$,最大化者为 $q^* = -u_2$;若 $\bar\phi^+(\theta) < \lambda^* < \bar\phi^-(\theta)$,最大化者为 $q^* = d$;若 $\bar\phi^+(\theta) > \lambda^*$,最大化者为 $q^* = u_1$。 + 这个线性规划隐式地完成了所有这些工作。 +{eq}`eq:pi_integral` 上的乘数 $\lambda^*$ 就是该等式约束的对偶值,即 `-res.eqlin.marginals[0]`;取负号是因为 `linprog` 最小化的是负收入。 + 我们还需要价格,这来自于要求处于两个项目边界处的买方对两者无差异。 ```{code-cell} ipython3 @@ -699,17 +740,59 @@ plt.show() {cite:t}`BergemannBonattiSmolin2018` 中的推论1说,只有当虚拟值需要熨平时才会提供第二个实验。 -由于类型是*信念*,打破正则性的一种自然方式是使大多数买方已经信息充分,从而使密度在两端都堆积。 +对 {eq}`eq:pi_virtual` 求导,得到 + +$$ +\phi^{-\prime}(\theta) = 2 f(\theta) + \theta f'(\theta), +\qquad +\phi^{+\prime}(\theta) = 2 f(\theta) - (1 - \theta) f'(\theta) . +$$ (eq:pi_virtual_slopes) + +因此 $\phi^-$ 递增当且仅当 $\theta^2 f(\theta)$ 递增,$\phi^+$ 递增当且仅当 $(1-\theta)^2 f(\theta)$ 递减。 + +正则性失效的地方正是密度下降速度快于 $\theta^{-2}$ 或上升速度快于 $(1-\theta)^{-2}$ 的地方,也就是密度陡峭的地方。 + +{cite:t}`BergemannBonattiSmolin2018` 非正式地指出,当大多数买方事先已信息充分,且大多数类型接近 $0$ 或 $1$ 时,就需要熨平。 + +这一说法需要加以限定。 + +对于 $\text{Beta}(a, b)$ 密度,两个虚拟值都递增当且仅当 $a \leq 1$ 且 $b \leq 1$(见 {ref}`pi_ex4`),因此呈U形分布的信息充分买方群体是正则的,只会被提供一个项目。 + +无论位于 $[0, 1]$ 的两端附近还是内部,信念的陡峭聚集都是不正则的,而 {ref}`pi_ex4` 给出了一个这样的信息充分群体的例子,它被提供了两个项目。 + +不正则性是第二个项目存在的必要条件,但不是充分条件。 + +$\text{Beta}(30, 30)$ 是不正则的,但它关于 $1/2$ 对称,而在 $u_1 = u_2$ 的情况下,{cite:t}`BergemannBonattiSmolin2018` 的推论1随即给出单一项目的结果。 我们遵循论文的做法,取 $\text{Beta}(8, 30)$ 和 $\text{Beta}(60, 30)$ 的等权混合。 +每个成分都将信念集中在一个狭窄的范围内,因此该混合分布有两个陡峭的聚集点,分别在 $\theta \approx 0.2$ 和 $\theta \approx 0.67$ 附近。 + ```{code-cell} ipython3 f_bimodal = (0.5 * stats.beta(8, 30).pdf(theta_g) + 0.5 * stats.beta(60, 30).pdf(theta_g)) + +def falling_intervals(theta, phi, min_width=0.01): + """Intervals of types on which phi decreases.""" + down = np.concatenate([[0], (np.diff(phi) < 0).astype(int), [0]]) + edges = np.flatnonzero(np.diff(down)) + return [(theta[a], theta[b]) for a, b in zip(edges[::2], edges[1::2]) + if theta[b] - theta[a] >= min_width] + + +dth = theta_g[1] - theta_g[0] +F_bi = np.cumsum(f_bimodal) * dth +for name, phi in [('phi-', theta_g * f_bimodal + F_bi), + ('phi+', (theta_g - 1) * f_bimodal + F_bi)]: + print(f'{name} decreases on', + ', '.join(f'[{a:.3f}, {b:.3f}]' + for a, b in falling_intervals(theta_g, phi))) + q_bi, res_bi = solve_menu(theta_g, f_bimodal) -print('LP status:', res_bi.message) +print('\nLP status:', res_bi.message) print('distinct values of q:', np.unique(np.round(q_bi, 3))) +print(f'multiplier lambda* = {-res_bi.eqlin.marginals[0]:.4f}') print() for v, lo, hi, p in menu_items(theta_g, q_bi): p1, p2 = q_to_experiment(v) @@ -719,11 +802,23 @@ for v, lo, hi, p in menu_items(theta_g, q_bi): f' types [{lo:.3f}, {hi:.3f}] price {p:.4f} {label}') ``` -现在菜单包含**两个**信息项目,这与 {prf:ref}`pi_prop_structure` 以及最优菜单不超过两个项目的结果相符。 +$\phi^-$ 在每个聚集点的上侧翼递减,那里密度陡峭下降;$\phi^+$ 在每个聚集点的下侧翼递减,那里密度陡峭上升。 + +两个虚拟值都需要熨平。 + +现在菜单包含**两个**信息项目,这与 {prf:ref}`pi_prop_structure` 以及 {cite:t}`BergemannBonattiSmolin2018` 中某个最优菜单最多包含两个项目的结果相符。 部分项目具有 $\pi_2 = 1$,因此信号 $s_1$ 只在状态 $\omega_1$ 中出现,能够完美揭示该状态,而信号 $s_2$ 则使买方保持不确定。 -它被一系列相对信息充分的类型购买,这些类型不愿意支付卖方想要向 $\theta \approx 0.7$ 附近大量买方收取的价格。 +类型 $\theta \in [0.175, 0.550]$ 购买它。 + +该区间包含 $\theta^* = 1/2$,这是最不确定该怎么做、最看重信息的类型。 + +在两个信息项目之间无差异的类型大约是 $\theta \approx 0.55$。 + +如果向 $\theta^*$ 出售 $\overline{E}$,就需要对部分项目进一步扭曲并降低其价格,这将损失来自 $\theta \approx 0.2$ 附近众多类型的收入。 + +部分项目使卖方能够对 $\theta \approx 0.7$ 附近的大量买方以高价出售 $\overline{E}$。 ```{code-cell} ipython3 --- @@ -738,7 +833,7 @@ fig, axes = plt.subplots(1, 2, figsize=(12, 4)) axes[0].plot(theta_g, f_bimodal, lw=2, color='C2') axes[0].fill_between(theta_g, f_bimodal, alpha=0.2, color='C2') axes[0].set(xlabel=r'$\theta$', ylabel='density', - title='most buyers are already well informed') + title='beliefs packed into two steep clusters') axes[1].step(theta_g, q_bi, lw=2, where='mid') axes[1].set(xlabel=r'$\theta$', ylabel=r'$q^*(\theta)$', ylim=(-1.15, 1.15), @@ -753,6 +848,10 @@ plt.show() 我们可以直接看出为什么卖方要费这个功夫。 +每个类型对 $\overline{E}$ 的评价都不低于任何其他实验,因此最佳的单一项目菜单是以一个挂牌价格 $p$ 出售 $\overline{E}$。 + +当 $u_1 = u_2 = 1$ 时,$V(\overline{E}, \theta) = \min\{\theta, 1 - \theta\}$,因此类型 $\theta \in [p, 1 - p]$ 会购买,收入为 $p\,[F(1 - p) - F(p)]$。 + ```{code-cell} ipython3 def revenue(theta, q, f, u1=1.0, u2=1.0): """Expected revenue from the menu q under density f.""" @@ -763,13 +862,23 @@ def revenue(theta, q, f, u1=1.0, u2=1.0): return np.sum(price * f) * dth / (np.sum(f) * dth) -q_single = np.where(q_bi < -0.5, -1.0, np.where(q_bi > 0.5, 1.0, 0.0)) -print(f'revenue, optimal two-item menu {revenue(theta_g, q_bi, f_bimodal):.5f}') -print(f'revenue, best single-item menu ' - f'{revenue(theta_g, q_single, f_bimodal):.5f}') +def F_mix(x): + """Distribution function of the bimodal mixture.""" + return 0.5 * stats.beta(8, 30).cdf(x) + 0.5 * stats.beta(60, 30).cdf(x) + + +p_post = np.linspace(0, 0.5, 5001) +rev_post = p_post * (F_mix(1 - p_post) - F_mix(p_post)) +k = rev_post.argmax() +rev_two = revenue(theta_g, q_bi, f_bimodal) + +print(f'revenue, optimal two-item menu {rev_two:.4f}') +print(f'revenue, best posted price for E_bar {rev_post[k]:.4f}' + f' at p = {p_post[k]:.3f}') +print(f'gain from versioning {100 * (rev_two / rev_post[k] - 1):.1f}%') ``` -去掉部分项目而只出售完全信息,会使卖方损失收入。 +增加部分项目使收入比全信息的最佳挂牌价格提高了约8%。 部分实验不是同一产品的加噪版本,它是一个*位置不同*的产品,价格足够低以吸引信息充分的类型,同时又足够无用以至于不会对信息不充分的类型冲击高价格。 @@ -783,17 +892,23 @@ print(f'revenue, best single-item menu ' 有两个教训超越了这个模型。 -第一,信息的最优降级是结构化的而非随机的:菜单上的每个实验都保持一个状态完全可检测,同时使另一个状态模糊化,因此数据产品不应通过向数据库添加无偏噪声来构建。 +第一,信息的最优降级是结构化的而非随机的:菜单上的每个实验都有一个能完全揭示某一状态的信号。 -第二,版本化恰恰在买方已经信息充分时才变得值得,因为那正是支付意愿的分布足够不规则,需要熨平的时候。 +{cite:t}`BergemannBonattiSmolin2018` 得出结论,最优菜单上的产品都不应向卖方的数据添加无偏噪声,除非买方在下游相互竞争,或数据必须匿名化。 + +第二,版本化需要熨平的虚拟价值,而陡峭的信念密度恰恰会产生这种虚拟价值。 + +买方信息充分与否并不能决定一切:一个呈 U 形贝塔分布的信息充分买方群体会得到单一产品的供应,而信念在 $[0, 1]$ 两端附近或其内部呈陡峭聚集的群体,则可以得到两种产品的供应。 向信息不完全的买方出售信息有着悠久的历史。 {cite:t}`AdmatiPfleiderer1986` 研究了一个卖方面对一个*事前相同*的连续交易者群体,这些交易者随后交易一个共同价值资产,他们发现卖方想要提供带噪声且*个性化*的信息,从而使每个交易者对自己所知的信息保持局部垄断。 +他们模型中的交易者在下游相互竞争,因此第一个教训并不适用于他们。 + 那里的异质性是由卖方创造的;而在这里,异质性是买方自己的先验信息,正是这一点使问题变成了筛选问题。 -{cite:t}`BergemannBonatti2015` 研究了同一市场的另一面,即当数据价格由竞争决定时,买方决定购买哪些查询。 +{cite:t}`BergemannBonatti2015` 研究了一个数据提供商,该提供商为每个“cookie”(关于单个消费者的记录)设定价格,并面对一个没有私人信息的广告商,由其选择购买哪些 cookie。 一个有用的对比是 {cite:t}`KamenicaGentzkow2011`,其中发送方也承诺一个信息结构,但没有货币转移,而是直接关心接收方的行动;这里的卖方只关心收入,且不能以状态、信号或买方的行动为条件设定支付。 @@ -891,6 +1006,13 @@ $\pi_2 \in \{0, 1\}$,且切换点确切地发生在 $\gamma = 1/3$,正如预 3. 确认所提供的项目始终是完全信息实验,正如 {prf:ref}`pi_prop_structure` 所要求的那样。 +4. 利用 {eq}`eq:pi_pointwise` 和 {eq}`eq:pi_integral` 从解析上证明乘子为 + $\lambda^* = \theta^*$,被服务的类型为 + $\theta \in [\theta^*/2,\ (1 + \theta^*)/2]$,且价格为 + $u_1 u_2 / \bigl(2 (u_1 + u_2)\bigr)$。 + + 将这些值与线性规划得到的结果并列打印出来。 + ```{exercise-end} ``` @@ -901,16 +1023,22 @@ $\pi_2 \in \{0, 1\}$,且切换点确切地发生在 $\gamma = 1/3$,正如预 这里给出一种解法: ```{code-cell} ipython3 -print(f'{"u1":>4s}{"u2":>4s}{"theta*":>9s}{"q offered":>12s}' - f'{"types served":>22s}{"price":>9s}') +print(f'{"u1":>3s}{"u2":>3s}{"theta*":>8s}{"q":>6s}{"":3s}' + f'{"served (LP)":<16s}{"served (theory)":<17s}' + f'{"price":>7s}{"theory":>8s}{"lambda*":>9s}{"theory":>8s}') for u1_, u2_ in [(1, 1), (2, 1), (1, 3), (5, 1)]: - q_a, _ = solve_menu(theta_g, np.ones(N), u1_, u2_) + q_a, res_a = solve_menu(theta_g, np.ones(N), u1_, u2_) star = u2_ / (u1_ + u2_) served = [it for it in menu_items(theta_g, q_a, u1_, u2_) if it[3] > 1e-9] + assert len(served) == 1 # a single informative item v, lo, hi, p = served[0] - print(f'{u1_:4d}{u2_:4d}{star:9.4f}{v:12.4f}' - f'{f"[{lo:.3f}, {hi:.3f}]":>22s}{p:9.4f}') assert abs(v - (u1_ - u2_)) < 1e-3 # the item is fully informative + lam = -res_a.eqlin.marginals[0] + print(f'{u1_:3d}{u2_:3d}{star:8.4f}{v:6.1f}{"":3s}' + f'{f"[{lo:.3f}, {hi:.3f}]":<16s}' + f'{f"[{star / 2:.3f}, {(1 + star) / 2:.3f}]":<17s}' + f'{p:7.4f}{u1_ * u2_ / (2 * (u1_ + u2_)):8.4f}' + f'{lam:9.4f}{star:8.4f}') print('\nevery menu contains exactly one informative item, ' 'and it is the fully informative one') ``` @@ -921,6 +1049,29 @@ print('\nevery menu contains exactly one informative item, ' 支付函数确实会移动 $\theta^*$,从而影响哪些类型被服务以及以什么价格服务,但它们从不会使均匀密度下的版本化变得值得。 +对于解析基准,由于不需要熨平,{eq}`eq:pi_pointwise` 给出:当 $\theta < \lambda^*/2$ 时 $q^* = -u_2$,当 +$\lambda^*/2 < \theta < (1 + \lambda^*)/2$ 时 $q^* = u_1 - u_2$,当 +$\theta > (1 + \lambda^*)/2$ 时 $q^* = u_1$。 + +代入 {eq}`eq:pi_integral` 得到 + +$$ +-u_2 \frac{\lambda^*}{2} + (u_1 - u_2) \frac{1}{2} + u_1 \frac{1 - \lambda^*}{2} += u_1 - u_2 , +$$ + +因此 $\lambda^* (u_1 + u_2) = u_2$,即 $\lambda^* = \theta^*$。 + +被服务的最低类型 $\theta^*/2$ 在 $\overline{E}$ 和不购买之间是无差异的。 + +对于 $\theta \leq \theta^*$,我们有 $V(\overline{E}, \theta) = \theta u_1$,因此价格为 +$u_1 \theta^* / 2 = u_1 u_2 / \bigl(2(u_1 + u_2)\bigr)$。 + +被服务的最高类型 $(1 + \theta^*)/2$ 对 $\overline{E}$ 的估值为 +$(1 - \theta) u_2 = u_1 u_2 / \bigl(2(u_1 + u_2)\bigr)$,与价格相同。 + +线性规划的结果在类型网格的离散化精度范围内与这三个量完全一致。 + ```{solution-end} ``` @@ -934,12 +1085,18 @@ print('\nevery menu contains exactly one informative item, ' 1. 抽取许多满足 $\pi_1 + \pi_2 \geq 1$ 的随机二元实验对。 -2. 对于每一对,使用 `garbling` 来判断一个是否是另一个的信息降级,并单独计算在精细网格上的每个类型中,一个是否在价值上支配另一个。 +2. 对于每一对,使用 `garbling` 来判断一个是否是另一个的信息降级,并单独计算在每个类型中,一个是否在价值上支配另一个。 + + 因为 $V(E, \theta)$ 在 $\theta$ 上是分段线性的,所以只需要在 $\theta \in \{0, 1\}$ 以及任一价值函数存在拐点的类型处比较这两个值即可。 3. 确认信息降级蕴含一致的偏好,并报告布莱克韦尔的序无法排序的随机对所占的比例。 4. 在无法排序的对中,验证确实有些类型偏好一个实验,而有些类型偏好另一个。 +5. 解释为什么对于二状态实验,布莱克韦尔的序无法排序的那些对,恰好应该是类型存在分歧的那些对。 + + 如果仅在有限的类型网格上检验支配关系,会出现什么问题? + ```{exercise-end} ``` @@ -950,21 +1107,33 @@ print('\nevery menu contains exactly one informative item, ' 这里给出一种解法: ```{code-cell} ipython3 +def kinks(pi1, pi2, u1=1.0, u2=1.0): + """Endpoints and types at which V(E, theta) can change slope.""" + k = [0.0, 1.0, u2 / (u1 + u2)] + for a, b in [(pi1 * u1, (1 - pi2) * u2), ((1 - pi1) * u1, pi2 * u2)]: + if a + b > 0: + k.append(b / (a + b)) # indifference after one of the signals + return np.array(k) + + rng = np.random.default_rng(0) grid_t = np.linspace(0.001, 0.999, 999) -n_pairs, n_garble, n_unranked, n_disagree, violations = 4000, 0, 0, 0, 0 +n_pairs, n_garble, n_unranked, violations = 4000, 0, 0, 0 +n_disagree, n_disagree_grid, n_unanimous_unranked = 0, 0, 0 for _ in range(n_pairs): (a1, a2), (b1, b2) = rng.uniform(0, 1, 2), rng.uniform(0, 1, 2) if a1 + a2 < 1 or b1 + b2 < 1: continue Ea, Eb = experiment(a1, a2), experiment(b1, b2) - va, vb = value(a1, a2, grid_t), value(b1, b2, grid_t) + t = np.concatenate([kinks(a1, a2), kinks(b1, b2)]) + va, vb = value(a1, a2, t), value(b1, b2, t) + va_g, vb_g = value(a1, a2, grid_t), value(b1, b2, grid_t) a_garbles_b = garbling(Ea, Eb) is not None # Eb is a garbling of Ea b_garbles_a = garbling(Eb, Ea) is not None - a_dominates = np.all(va >= vb - 1e-9) - b_dominates = np.all(vb >= va - 1e-9) + a_dominates = np.all(va >= vb - 1e-12) + b_dominates = np.all(vb >= va - 1e-12) if a_garbles_b: n_garble += 1 @@ -978,21 +1147,279 @@ for _ in range(n_pairs): n_unranked += 1 if not (a_dominates or b_dominates): n_disagree += 1 - -print(f'garbling relations found {n_garble}') -print(f'violations of Blackwell {violations}') -print(f'pairs unranked by Blackwell {n_unranked}') -print(f' of which types disagree {n_disagree} ' - f'({100 * n_disagree / n_unranked:.1f}%)') + if not (np.all(va_g >= vb_g - 1e-9) or np.all(vb_g >= va_g - 1e-9)): + n_disagree_grid += 1 + if (a_dominates and not a_garbles_b) or (b_dominates and not b_garbles_a): + n_unanimous_unranked += 1 + +print(f'garbling relations found {n_garble}') +print(f'violations of Blackwell {violations}') +print(f'unanimous rankings without garbling {n_unanimous_unranked}') +print(f'pairs unranked by Blackwell {n_unranked}') +print(f' of which types disagree (kinks) {n_disagree}') +print(f' of which types disagree (grid) {n_disagree_grid}') ``` 布莱克韦尔定理从未被违反:只要一个实验降级为另一个,每种类型都偏好作为降级源的那个实验。 -大部分随机对都未被排序,而对于其中几乎所有的对,类型确实存在分歧,有些偏好一个实验,有些偏好另一个。 +其逆命题在每次抽取中也都成立:只要所有类型对两个实验的排序一致,其中一个就是另一个的信息降级。 + +大部分随机对都未被排序,而对于每一个这样的对,确实都存在某些类型偏好一个实验,而某些类型偏好另一个实验。 这个未被排序的区域正是数据卖方所需要的空间。 如果布莱克韦尔的序是完全的,那么每个买方都会对所有信息产品的排序达成一致,卖方的问题将退化为对单一质量指标的标准非线性定价,而本讲座所描述的横向筛选也就不可能存在。 +对于二状态实验,信息降级与一致偏好之间的对应关系是精确的。 + +固定一个参照先验 $c \in (0, 1)$,令 $x$ 表示在 $c$ 下某个信号所诱导出的 $\omega_1$ 的后验概率。 + +在 $u_1 = u_2 = 1$ 的情况下,$E$ 对类型 $\theta$ 的毛价值等于在 $c$ 下,凸函数 +$k_\theta(x) = \max\{\theta x / c,\ (1 - \theta)(1 - x)/(1 - c)\}$ 的期望值,该函数只有一个拐点。 + +当 $\theta$ 在 $(0, 1)$ 上变化时,拐点也在 $(0, 1)$ 上变化。 + +$[0, 1]$ 上的每个凸函数都可以表示为一个仿射函数加上这类单拐点函数的非负混合,而仿射部分在所有实验下的期望值相同。 + +根据 {prf:ref}`thm-kihlstrom`,当且仅当对每个 $\theta$ 都有 +$V(E, \theta) \geq V(E', \theta)$ 时,$E'$ 才是 $E$ 的信息降级。 + +在有限的类型网格上进行检验,可能会遗漏局限在两个网格点之间的一段短区间内的分歧。 + +在上述抽取中,由999个类型组成的网格恰好遗漏了一次这样的分歧。 + +在拐点处进行评估则是精确的,因为两个分段线性函数之差在拐点或端点处取得最大值和最小值。 + ```{solution-end} -``` \ No newline at end of file +``` + +```{exercise-start} +:label: pi_ex4 +``` + +本练习刻画了使虚拟值 {eq}`eq:pi_virtual` 不需要熨平的类型密度。 + +1. 利用 {eq}`eq:pi_virtual_slopes` 证明,在 $(0, 1)$ 上,$\phi^-$ 严格递增当且仅当 + $\theta^2 f(\theta)$ 严格递增,而 $\phi^+$ 严格递增当且仅当 + $(1 - \theta)^2 f(\theta)$ 严格递减。 + +2. 由此推出,对于 $\text{Beta}(a, b)$ 密度,两个虚拟值都严格递增当且仅当 + $a \leq 1$ 且 $b \leq 1$。 + +3. 在 $(a, b)$ 对的网格上数值验证该条件。 + +4. 用 `solve_menu` 证明,呈U形的密度 $\text{Beta}(0.5, 0.5)$、 + $\text{Beta}(0.3, 0.3)$ 和 $\text{Beta}(0.5, 0.8)$ 都只被提供单一项目,不规则的 + $\text{Beta}(30, 30)$ 同样只被提供单一项目,而不规则的 $\text{Beta}(60, 30)$ 则被提供两个信息性项目。 + +5. 证明 $\text{Beta}(2, 60)$ 和 $\text{Beta}(40, 4)$ 的等权混合——即大多数买方都信息充分的总体——是不规则的,并被提供两个信息性项目。 + +```{exercise-end} +``` + +```{solution-start} pi_ex4 +:class: dropdown +``` + +这里给出一种解法。 + +对于 $\theta \in (0, 1)$, + +$$ +\frac{d}{d\theta}\bigl[\theta^2 f(\theta)\bigr] += \theta \bigl[2 f(\theta) + \theta f'(\theta)\bigr] = \theta\, \phi^{-\prime}(\theta), +\qquad +\frac{d}{d\theta}\bigl[(1 - \theta)^2 f(\theta)\bigr] += -(1 - \theta)\, \phi^{+\prime}(\theta) . +$$ + +所以 $\phi^{-\prime}$ 的符号与 $\theta^2 f$ 的导数符号相同,而 $\phi^{+\prime}$ +的符号与 $(1-\theta)^2 f$ 的导数符号相反。 + +对于 $f(\theta) \propto \theta^{a-1}(1 - \theta)^{b-1}$, + +$$ +\frac{d}{d\theta} \log\bigl[\theta^2 f(\theta)\bigr] += \frac{a + 1}{\theta} - \frac{b - 1}{1 - \theta}, +\qquad +\frac{d}{d\theta} \log\bigl[(1 - \theta)^2 f(\theta)\bigr] += \frac{a - 1}{\theta} - \frac{b + 1}{1 - \theta} . +$$ + +第一个表达式在整个 $(0, 1)$ 上都为正当且仅当 $b \leq 1$,因为当 $b > 1$ 时, +当 $\theta \to 1$ 时它会发散到 $-\infty$。 + +第二个表达式在整个 $(0, 1)$ 上都为负当且仅当 $a \leq 1$,因为当 +$a > 1$ 时,当 $\theta \to 0$ 时它会发散到 $+\infty$。 + +```{code-cell} ipython3 +th_in = theta_g[1:-1] # Beta densities can be infinite at 0 and 1 + + +def mixture(components): + """Density and distribution function of an equal mixture of Beta laws.""" + f_c = np.mean([stats.beta(a, b).pdf(th_in) for a, b in components], axis=0) + F_c = np.mean([stats.beta(a, b).cdf(th_in) for a, b in components], axis=0) + return f_c, F_c + + +def regular(f_c, F_c): + """True if both virtual values increase on the grid.""" + return (np.all(np.diff(th_in * f_c + F_c) > 0) + and np.all(np.diff((th_in - 1) * f_c + F_c) > 0)) + + +ab_grid = [0.3, 0.5, 0.8, 1.0, 1.2, 2.0, 5.0] +mismatch = [(a, b) for a in ab_grid for b in ab_grid + if regular(*mixture([(a, b)])) != (a <= 1 and b <= 1)] +print(f'(a, b) pairs checked: {len(ab_grid)**2}, mismatches: {mismatch}') + +for comps in [[(0.5, 0.5)], [(0.3, 0.3)], [(0.5, 0.8)], [(30, 30)], [(60, 30)], + [(2, 60), (40, 4)]]: + f_c, F_c = mixture(comps) + near_ends = np.mean([stats.beta(a, b).cdf(0.15) + stats.beta(a, b).sf(0.85) + for a, b in comps]) + q_c, _ = solve_menu(th_in, f_c) + informative = [it for it in menu_items(th_in, q_c) if it[3] > 1e-9] + print('\n' + ' + '.join(f'Beta{ab}' for ab in comps) + + f': regular = {regular(f_c, F_c)},' + f' mass within 0.15 of 0 or 1 = {near_ends:.2f},' + f' informative items = {len(informative)}') + for v, lo, hi, p in informative: + print(f' q = {v:+.3f} types [{lo:.3f}, {hi:.3f}] price {p:.4f}') +``` + +数值检验在每一个 $(a, b)$ 组合处都与 $a \leq 1$、$b \leq 1$ 的条件一致。 + +这三个U形密度都是规则的,都只被提供 $\overline{E}$。 + +$\text{Beta}(30, 30)$ 是不规则的,但它关于 $\theta^* = 1/2$ 对称,因此它也只被提供 $\overline{E}$。 + +陡峭且非对称的 $\text{Beta}(60, 30)$ 除了 $\overline{E}$ 之外,还被提供了一个 $q < 0$ 的部分项目。 + +$\text{Beta}(2, 60)$ 和 $\text{Beta}(40, 4)$ 的混合,其质量落在距 $0$ 或 $1$ 的 $0.15$ 范围内的比例比任何一个U形密度都高。 + +它的两个簇都很陡峭,是不规则的,被提供了两个信息性项目。 + +这两类总体中买方大多都信息充分;密度的陡峭程度将它们区分开来。 + +```{solution-end} +``` + +```{exercise-start} +:label: pi_ex5 +``` + +本练习手工熨平双峰例子中的虚拟值,并检验线性规划找到的菜单。 + +设 $u_1 = u_2 = 1$,使得 $d = 0$,并使用密度 `f_bimodal`。 + +1. 在网格上计算 $\Phi^\pm(\theta) = \int_0^\theta \phi^\pm(x)\, dx$、它们的最大凸下界,以及作为凸下界斜率的熨平虚拟值 $\bar\phi^\pm$。 + +2. 由 {eq}`eq:pi_pointwise`,$\bar\phi^- < \lambda^*$ 的类型得到 $q = -1$, + $\bar\phi^+ < \lambda^* < \bar\phi^-$ 的类型得到 $q = 0$, + $\bar\phi^+ > \lambda^*$ 的类型得到 $q = 1$,而在 $\bar\phi^- = \lambda^*$ + 的区间上,类型共享一个共同的 $q_m \in [-1, 0]$。 + + 由积分约束 {eq}`eq:pi_integral` 求出 $\lambda^*$ 和 $q_m$。 + +3. 将 $\lambda^*$、$q_m$、购买部分项目的类型区间,以及不购买任何项目的类型下界,与线性规划的解进行比较。 + +4. 绘制 $\phi^\pm$、$\bar\phi^\pm$ 以及 $\lambda^*$ 的图形。 + +```{exercise-end} +``` + +```{solution-start} pi_ex5 +:class: dropdown +``` + +这里给出一种解法。 + +```{code-cell} ipython3 +def ironed(theta, phi): + """Slopes of the greatest convex minorant of the integral of phi.""" + dth = theta[1] - theta[0] + Phi = np.concatenate([[0.0], np.cumsum((phi[1:] + phi[:-1]) / 2) * dth]) + hull = [0] # lower convex hull + for i in range(1, len(theta)): + while len(hull) >= 2: + j, k = hull[-2], hull[-1] + if ((Phi[k] - Phi[j]) * (theta[i] - theta[j]) + >= (Phi[i] - Phi[j]) * (theta[k] - theta[j])): + hull.pop() + else: + break + hull.append(i) + phi_bar = np.empty_like(phi) + for j, k in zip(hull[:-1], hull[1:]): + phi_bar[j:k + 1] = (Phi[k] - Phi[j]) / (theta[k] - theta[j]) + return phi_bar + + +dth = theta_g[1] - theta_g[0] +f_n = f_bimodal / (np.sum(f_bimodal) * dth) +F_n = np.cumsum(f_n) * dth +phi_m, phi_p = theta_g * f_n + F_n, (theta_g - 1) * f_n + F_n +bar_m, bar_p = ironed(theta_g, phi_m), ironed(theta_g, phi_p) +print('phi_bar+ <= phi_bar- everywhere:', np.all(bar_p <= bar_m + 1e-12)) + + +def integral_q(lam): + """Integral of q when types with bar_m = lam are assigned q = 0.""" + return (-(bar_m < lam).sum() + (bar_p > lam).sum()) * dth + + +lo, hi = bar_m.min(), bar_m.max() # integral_q decreases in lam +for _ in range(200): + mid = (lo + hi) / 2 + lo, hi = (mid, hi) if integral_q(mid) > 0 else (lo, mid) +lam_star = hi + +pooled = np.abs(bar_m - lam_star) < 1e-9 +th_a, th_b = theta_g[pooled].min(), theta_g[pooled].max() +th_c = theta_g[bar_p > lam_star].min() +q_m = (th_a - (1 - th_c)) / (th_b - th_a) + +lp_items = [it for it in menu_items(theta_g, q_bi) if it[3] > 1e-9] +(q_lp, a_lp, b_lp, _), (_, _, c_lp, _) = lp_items +print(f'\n{"":24s}{"by hand":>10s}{"LP":>10s}') +print(f'{"multiplier lambda*":24s}{lam_star:10.4f}{-res_bi.eqlin.marginals[0]:10.4f}') +print(f'{"partial item q_m":24s}{q_m:10.4f}{q_lp:10.4f}') +print(f'{"lowest buyer":24s}{th_a:10.4f}{a_lp:10.4f}') +print(f'{"partial / full cutoff":24s}{th_b:10.4f}{b_lp:10.4f}') +print(f'{"highest buyer":24s}{th_c:10.4f}{c_lp:10.4f}') +``` + +```{code-cell} ipython3 +fig, ax = plt.subplots() +ax.plot(theta_g, phi_m, lw=1, color='C0', alpha=0.5, label=r'$\phi^-$') +ax.plot(theta_g, bar_m, lw=2, color='C0', label=r'$\bar\phi^-$') +ax.plot(theta_g, phi_p, lw=1, color='C1', alpha=0.5, label=r'$\phi^+$') +ax.plot(theta_g, bar_p, lw=2, color='C1', label=r'$\bar\phi^+$') +ax.axhline(lam_star, color='0.3', ls='--', lw=1, label=r'$\lambda^*$') +ax.axvspan(th_a, th_b, color='C2', alpha=0.15, label='partial item') +ax.set(xlabel=r'$\theta$', ylim=(-4, 4), + title='ironed virtual values for the bimodal density') +ax.legend(fontsize=9, ncol=2) +fig.tight_layout() +plt.show() +``` + +乘子就是使 $q$ 的积分跨越零点而发生跳跃的那个水平。 + +刚好在 $\lambda^*$ 之下,被合并的类型得到 $q = 0$,积分为正;刚好在 $\lambda^*$ +之上,它们得到 $q = -1$,积分为负。 + +在合并区间 $[\theta_a, \theta_b]$ 上,积分约束写作 +$-\theta_a + q_m (\theta_b - \theta_a) + (1 - \theta_c) = 0$,由此得到 +$q_m = \bigl(\theta_a - (1 - \theta_c)\bigr) / (\theta_b - \theta_a)$。 + +合并区间就是熨平操作将 $\phi^-$ 拉平至水平 $\lambda^*$ 的那个区间。 + +其上端,约 $\theta \approx 0.55$,是在部分项目和 $\overline{E}$ 之间感到无差异的类型。 + +手工计算与线性规划的结果在网格间距范围内一致。 + +```{solution-end} +``` diff --git a/lectures/survival_recursive_preferences.md b/lectures/survival_recursive_preferences.md index 75f8b76a..1399adcb 100644 --- a/lectures/survival_recursive_preferences.md +++ b/lectures/survival_recursive_preferences.md @@ -28,6 +28,7 @@ translation: Wealth dynamics decomposition::Portfolio returns: 组合收益 Wealth dynamics decomposition::Consumption-wealth ratios: 消费-财富比 Wealth dynamics decomposition::Two comparative statics: 两个比较静态分析 + Wealth dynamics decomposition::Risk aversion versus the IES: 风险厌恶与 IES 之比较 Survival regions: 生存区域 Three survival channels: 三个生存渠道 Varying the IES: 改变 IES @@ -63,23 +64,31 @@ translation: 经典的**市场选择假说**认为,信念较不准确的主体最终会被市场淘汰。 -这一结果由 {cite:t}`Sandroni2000Markets` 和 {cite:t}`Blume_Easley2006` 针对具有可分 CRRA 偏好的经济体进行了严格证明。 +{cite:t}`Sandroni2000Markets` 和 {cite:t}`Blume_Easley2006` 针对具有可分期望效用偏好、且总禀赋有上界并远离零的经济体证明了这一结果。 -Borovicka 表明,在 Epstein-Zin 递归偏好下,这一结论可能不成立。 +Borovička 表明,在 Epstein-Zin 递归偏好下,这一结论可能不成立。 在递归偏好下,具有扭曲信念的主体可以生存,甚至可以占据主导地位。 关键机制在于递归偏好将风险厌恶与跨期替代弹性(IES)分离开来。 -这种分离产生了三个对生存至关重要的渠道: +有三个渠道对生存至关重要: 1. *风险溢价渠道*奖励更乐观的主体持有更多的风险资产。 1. *投机波动率渠道*通过对数收益率波动率惩罚激进的头寸。 1. *储蓄渠道*在 IES 不等于 1 时改变消费和储蓄决策。 -在可分偏好下,只有前两个渠道存在。 +在可分偏好下,风险厌恶等于 IES 的倒数,这一约束将三个渠道联系在一起。 -在递归偏好下,储蓄渠道可以推翻市场选择。 +三者之和此时仅取决于两个主体信念的相对熵,信念更准确的主体将占据主导地位。 + +在递归偏好下,风险厌恶 $\gamma$ 与 IES 倒数 $\rho$ 之间的比较决定了可能出现的长期结果。 + +只有当 $\gamma > \rho$ 时,两个主体才可能都生存下来,这意味着主体偏好不确定性的早期解决。 + +只有当 $\gamma < \rho$ 时,每个主体才可能以正概率占据主导地位。 + +IES 大于 1 会增强乐观主体的储蓄渠道,但共存并不要求这一条件成立。 ```{note} 本文建立在 {cite:t}`Duffie_Epstein1992a` 的连续时间递归效用表述之上, @@ -94,6 +103,8 @@ Borovicka 表明,在 Epstein-Zin 递归偏好下,这一结论可能不成立 ```{code-cell} ipython3 import numpy as np import matplotlib.pyplot as plt +from math import erf, sqrt +from scipy.optimize import brentq import matplotlib as mpl # i18n FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" # i18n mpl.font_manager.fontManager.addfont(FONTPATH) # i18n @@ -130,6 +141,8 @@ $$ M_t^n = \frac{dQ^n}{dP}\bigg|_t = \exp\left(-\frac{1}{2} |\omega^n|^2 t + \omega^n W_t\right) $$ (eq:radon_nikodym) +$M^n$ 是一个似然比过程,是 {doc}`likelihood_ratio_process` 中研究的过程在连续时间中的对应物。 + 在 $Q^n$ 下,过程 $W_t^n = W_t - \omega^n t$ 是一个布朗运动,主体 $n$ 感知到 $$ @@ -138,6 +151,18 @@ $$ $\omega^n > 0$ 的主体对禀赋增长持乐观态度,而 $\omega^n < 0$ 的主体则持悲观态度。 +信念是教条式的:主体 $n$ 在观测到 $Y$ 之后,永远不会修正 $\omega^n$。 + +对于每个有限的 $t$,$Q^n$ 和 $P$ 在 $\mathcal{F}_t$ 上是等价的。 + +在 $P$ 下,$\log M_t^n$ 的漂移是常数 $-\frac{1}{2}(\omega^n)^2$,因此当 $\omega^n \neq 0$ 时,$M_t^n \to 0$ 在 $P$ 几乎必然成立,从而 $Q^n$ 和 $P$ 在 $\mathcal{F}_\infty$ 上是互为奇异的。 + +{doc}`merging_of_opinions` 中的 Blackwell–Dubins 定理要求在 $\mathcal{F}_\infty$ 上绝对连续,因此该定理在此不适用。 + +$\omega^n \neq 0$ 的主体永远不会与 $P$ 达成一致,而 $\omega^1 \neq \omega^2$ 的主体之间也永远不会彼此达成一致。 + +市场选择取代了意见趋同:悬而未决的问题是,市场是否会淘汰信念错误的主体。 + ### 递归偏好 两个主体都具有 Epstein-Zin 递归偏好。 @@ -278,7 +303,9 @@ $$ 齐次性将规划者问题简化为关于单一状态变量 $\upsilon$ 的非线性 ODE。 -因为每个主体的效用关于消费是 $1-\gamma$ 次齐次的,规划者的值函数可以分解为 $J(\upsilon, Y) = \tilde{J}(\upsilon) \cdot Y^{1-\gamma}/(1-\gamma)$,从而消除了 $Y$ 作为状态变量。 +因为每个主体的效用关于消费是 $1-\gamma$ 次齐次的,规划者的值函数关于权重 $(\tilde{\lambda}^1, \tilde{\lambda}^2)$ 是一次齐次的,关于 $Y$ 是 $1-\gamma$ 次齐次的。 + +它可以分解为 $J(\tilde{\lambda}, Y) = (\tilde{\lambda}^1 + \tilde{\lambda}^2) Y^{1-\gamma} \tilde{J}(\upsilon)$,从而消除了 $Y$ 作为状态变量。 #### 从离散时间到连续时间 @@ -287,9 +314,11 @@ $$ 贝尔曼方程为 $$ -\tilde{J}(\upsilon) = \max_{z^1, z^2} \left\{ \upsilon \, u(z^1) + (1-\upsilon) \, u(z^2) + \beta \, \mathbb{E}\left[\tilde{J}(\upsilon')\right] \right\}. +\tilde{J}(\upsilon) = \max_{z^1, z^2} \left\{ \upsilon \, u(z^1) + (1-\upsilon) \, u(z^2) + \delta \, \mathbb{E}\left[\tilde{J}(\upsilon')\right] \right\}. $$ +这里 $\delta \in (0, 1)$ 是单期贴现因子;本讲座其他地方的 $\beta$ 则是连续时间下的时间偏好率。 + 在连续时间中,时期长度缩小为 $dt$。 $[t, t+dt)$ 上的"流量收益"变为 $\left[\upsilon F(z^1, \nu^1) + (1-\upsilon)F(z^2, \nu^2)\right] dt$,其中 $F$ 是 Duffie-Epstein-Zin 幸福函数 {eq}`eq:felicity`。 @@ -304,7 +333,7 @@ $$ 其中 $m$ 和 $s$ 是帕累托份额的漂移和扩散。 -这是 $\beta \, \mathbb{E}[\tilde{J}(\upsilon')] - \tilde{J}(\upsilon)$ 的连续时间类比:它衡量随着 $\upsilon$ 演化,值函数如何漂移和波动。 +这是 $\delta \, \mathbb{E}[\tilde{J}(\upsilon')] - \tilde{J}(\upsilon)$ 的连续时间类比:它衡量随着 $\upsilon$ 演化,值函数如何漂移和波动。 令流量收益加上期望资本收益等于零,得到示意性的 HJB 方程: @@ -355,8 +384,7 @@ $$ 边界条件为 $\tilde{J}(0) = \tilde{V}^2$ 和 $\tilde{J}(1) = \tilde{V}^1$,其中 $\tilde{V}^n$ 是仅由主体 $n$ 单独构成的齐次经济体中的延续值。 -这是 {cite:t}`Blume_Easley2006` 中离散时间规划者问题的连续时间对应(另见 {doc}`likelihood_ratio_process_2`)。 - +这是 {cite:t}`Blume_Easley2006` 中离散时间规划者问题的连续时间对应(另见 {doc}`likelihood_ratio_process_2`)。 ## 生存条件 @@ -406,9 +434,23 @@ $$ 主体 1 是主体 2 经济体中的价格接受者。 -令 $m_A^n(\upsilon)$ 表示主体 $n$ 财富的期望对数增长率。 +令 $m_A^n(\upsilon)$ 表示主体 $n$ 的财富 $A^n$ 的期望对数增长率,即 $d \log A_t^n = m_A^n(\upsilon_t) dt + \sigma_A^n(\upsilon_t) dW_t$。 -其差异分解为两个渠道: +{cite:t}`Borovicka2020` 的命题 3.3 将对数比值的边界漂移与这些增长率联系起来: + +$$ +\lim_{\upsilon \to \bar{\upsilon}} \gamma^{-1} m_\vartheta(\upsilon) += \lim_{\upsilon \to \bar{\upsilon}} [m_A^1(\upsilon) - m_A^2(\upsilon)], +\qquad \bar{\upsilon} \in \{0, 1\} . +$$ (eq:drift_wealth) + +令 $R^n$ 表示主体 $n$ 投资组合的累积收益指数,其中 $d \log R_t^n = m_R^n(\upsilon_t) dt + \sigma_R^n(\upsilon_t) dW_t$。 + +因此 $m_R^n$ 是主体 $n$ 投资组合的期望*对数*收益,而 $m_R^n + \frac{1}{2}(\sigma_R^n)^2$ 是其期望算术收益。 + +令 $(y^n)^{-1}$ 表示主体 $n$ 的消费-财富比。 + +财富增长率之差分解为两个渠道: $$ \lim_{\upsilon \searrow 0} [m_A^1(\upsilon) - m_A^2(\upsilon)] @@ -420,7 +462,11 @@ $$ (eq:wealth_decomp) 第二项衡量主体 1 从财富中消费少多少——较低的消费-财富比意味着更多的储蓄和更快的财富积累。 -当此总差异为正时,主体 1 生存;当为负时,她朝着消亡收缩。 +当此总差异为正时,条件 (i) 成立,主体 1 在接近消亡时生存。 + +当其为负时,边界 $\upsilon = 0$ 具有吸引性。 + +如果条件 (ii) 也成立(情形 (c)),主体 1 将几乎必然消亡;如果条件 (ii') 成立(情形 (d)),则以严格正的概率消亡。 ```{exercise} :label: ex_wealth_decomp @@ -429,40 +475,48 @@ $$ (eq:wealth_decomp) 令 $A^n$ 表示主体 $n$ 的财富,$C^n$ 表示她的消费。 -预算约束为 $dA^n = A^n dR^n - C^n dt$,其中 $dR^n$ 是主体 $n$ 投资组合的收益。 +令 $R^n$ 为她投资组合的累积收益指数,其中 $d\log R^n = m_R^n \, dt + \sigma_R^n \, dW$,因此 $m_R^n$ 是她的期望对数投资组合收益。 + +预算约束为 $dA^n = A^n \, dR^n / R^n - C^n dt$。 -定义消费-财富比 $c^n = C^n / A^n = (y^n)^{-1}$。 +定义消费-财富比 $(y^n)^{-1} = C^n / A^n$。 -证明 $d\log A^n = m_R^n \, dt - (y^n)^{-1} dt + \ldots$,因此期望对数财富增长之差为 $m_A^1 - m_A^2 = (m_R^1 - m_R^2) + [(y^2)^{-1} - (y^1)^{-1}]$。 +证明 $d\log A^n = \left(m_R^n - (y^n)^{-1}\right) dt + \sigma_R^n \, dW$,因此期望对数财富增长之差为 $m_A^1 - m_A^2 = (m_R^1 - m_R^2) + [(y^2)^{-1} - (y^1)^{-1}]$。 ``` ```{solution-start} ex_wealth_decomp :class: dropdown ``` -将预算约束除以 $A^n$: +将伊藤引理应用于 $R^n = \exp(\log R^n)$,瞬时收益为 $$ -\frac{dA^n}{A^n} = dR^n - (y^n)^{-1} dt. +\frac{dR^n}{R^n} = \left(m_R^n + \tfrac{1}{2}(\sigma_R^n)^2\right) dt + \sigma_R^n \, dW. $$ -由伊藤引理,$d\log A^n = \frac{dA^n}{A^n} - \frac{1}{2}\left(\frac{dA^n}{A^n}\right)^2$。 +将预算约束除以 $A^n$: + +$$ +\frac{dA^n}{A^n} = \left(m_R^n + \tfrac{1}{2}(\sigma_R^n)^2 - (y^n)^{-1}\right) dt + \sigma_R^n \, dW. +$$ -将 $dR^n = m_R^n \, dt + \sigma_R^n \, dW$ 写出($P$ 下的投资组合收益)。 +由伊藤引理,$d\log A^n = \frac{dA^n}{A^n} - \frac{1}{2}\left(\frac{dA^n}{A^n}\right)^2$,且 $\left(dA^n/A^n\right)^2 = (\sigma_R^n)^2 dt$。 那么 $$ -d\log A^n = \left(m_R^n - (y^n)^{-1} - \tfrac{1}{2}(\sigma_R^n)^2\right) dt + \sigma_R^n \, dW. +d\log A^n = \left(m_R^n - (y^n)^{-1}\right) dt + \sigma_R^n \, dW, $$ -对主体 1 和 2 取差: +因此 $m_A^n = m_R^n - (y^n)^{-1}$。 + +对主体 1 和 2 取差得到 $$ -m_A^1 - m_A^2 = (m_R^1 - m_R^2) + \left[(y^2)^{-1} - (y^1)^{-1}\right] - \tfrac{1}{2}\left[(\sigma_R^1)^2 - (\sigma_R^2)^2\right]. +m_A^1 - m_A^2 = (m_R^1 - m_R^2) + \left[(y^2)^{-1} - (y^1)^{-1}\right], $$ -当我们将 $m_R^n$ 定义为期望对数投资组合收益(即 $\log R^n$ 的漂移而非算术收益)时,波动率项 $\tfrac{1}{2}[(\sigma_R^1)^2 - (\sigma_R^2)^2]$ 被吸收进 $m_R^1 - m_R^2$,从而得到 {eq}`eq:wealth_decomp`。 +取极限 $\upsilon \searrow 0$ 即得 {eq}`eq:wealth_decomp`。 ```{solution-end} ``` @@ -492,7 +546,9 @@ $$ (eq:portfolio_returns) 在边界 $\upsilon \searrow 0$ 处,主体 $n$ 的最优风险资产份额为 $\pi^n = 1 + (\omega^n - \omega^2)/(\gamma \sigma_Y)$(参见 {eq}`eq:portfolio`)。 -令 $\bar{\mu}_R = \mu_Y + \gamma \sigma_Y^2 - \omega^2 \sigma_Y$ 表示 $P$ 下风险资产的期望收益,$r$ 表示无风险利率。 +令 $r$ 表示无风险利率,$\bar{\mu}_R = r + \gamma \sigma_Y^2 - \omega^2 \sigma_Y$ 表示 $P$ 下风险资产的期望算术收益。 + +(利用 {eq}`eq:riskfree` 和 {eq}`eq:wc_ratio`,$\bar{\mu}_R$ 等于期望资本利得 $\mu_Y + \frac{1}{2}\sigma_Y^2$ 加上股息收益率 $(y(0))^{-1}$。) 连续再平衡的投资组合具有期望对数收益 $m_R^n = r + \pi^n(\bar{\mu}_R - r) - \frac{1}{2}(\pi^n)^2 \sigma_Y^2$。 @@ -517,7 +573,7 @@ $$ (\pi^1 - \pi^2)(\bar{\mu}_R - r) = \frac{\omega^1 - \omega^2}{\gamma \sigma_Y} \cdot (\gamma \sigma_Y^2 - \omega^2 \sigma_Y). $$ -对于波动率项,写出 $(\pi^1)^2 - (\pi^2)^2 = (\pi^1 - \pi^2)(\pi^1 + \pi^2)$ 并注意 $\pi^1 + \pi^2 = 2 + (\omega^1 + \omega^2 - 2\omega^2)/(\gamma \sigma_Y)$。 +对于波动率项,写出 $(\pi^1)^2 - (\pi^2)^2 = (\pi^1 - \pi^2)(\pi^1 + \pi^2)$ 并使用 $\pi^2 = 1$,因此 $\pi^1 + \pi^2 = 2 + (\omega^1 - \omega^2)/(\gamma \sigma_Y)$。 化简后: @@ -539,7 +595,13 @@ $$ = \frac{1-\rho}{\rho} \left[(\omega^1 - \omega^2)\sigma_Y + \frac{(\omega^1 - \omega^2)^2}{2\gamma}\right] $$ (eq:consumption_rates) -括号中的项是*主观*期望投资组合收益之差——即主体 1 相对于主体 2 认为她所赚取的收益。 +括号中的项是两位主体预期从各自最优投资组合中获得的*主观*确定性等价收益之间的差距。 + +在她自己的信念 $Q^n$ 下,主体 $n$ 感知到风险资产的夏普比率为 $\lambda^n = \gamma \sigma_Y + \omega^n - \omega^2$。 + +她的最优投资组合获得确定性等价收益 $r + (\lambda^n)^2/(2\gamma)$,括号中的项等于 $[(\lambda^1)^2 - (\lambda^2)^2]/(2\gamma)$。 + +该括号项也等于两位主体主观期望算术投资组合收益之差的一半。 因子 $(1-\rho)/\rho$ 将这种感知到的收益优势转化为储蓄响应。 @@ -554,43 +616,125 @@ $$ (eq:consumption_rates) 推导 {eq}`eq:consumption_rates`。 -在由主体 2 构成的齐次经济体中,消费-财富比为 $(y(0))^{-1} = \beta - (1-\rho)\mu_V^2$,其中 $\mu_V^2$ 是主体 2 财富的期望对数收益。 +在边界 $\upsilon \searrow 0$ 处,两位主体都将无风险利率 $r$ 和在 $P$ 下波动率为 $\sigma_Y$、期望超额收益为 $\gamma \sigma_Y^2 - \omega^2 \sigma_Y$ 的风险资产视为既定。 -作为微不足道的价格接受者,主体 1 的消费-财富比为 $(y^1)^{-1} = \beta - (1-\rho)\mu_V^1$,其中 $\mu_V^1$ 是她自己的期望对数收益。 +1. 证明在 $Q^n$ 下主体 $n$ 感知到的夏普比率为 $\lambda^n = \gamma\sigma_Y + \omega^n - \omega^2$。 + 风险份额为 $\pi$ 的投资组合的主观确定性等价收益为 $r + \pi \sigma_Y \lambda^n - \frac{1}{2}\gamma \pi^2 \sigma_Y^2$。 + 证明最优份额重现了 {eq}`eq:portfolio`,且最大化的确定性等价收益为 $\mathrm{CE}^n = r + (\lambda^n)^2/(2\gamma)$。 -使用 $(y^2)^{-1} - (y^1)^{-1} = (1-\rho)(\mu_V^1 - \mu_V^2)$,并用主体 1 的*主观*期望超额收益表示 $\mu_V^1 - \mu_V^2$。 +2. 令 $c^n = (y^n)^{-1}$,令 $\mu_V^n = \mathrm{CE}^n - c^n$ 为主体 $n$ 财富的主观确定性等价增长率,它也是其消费的增长率。 + 利用面对固定投资机会的 Epstein-Zin 投资者的 Hamilton-Jacobi-Bellman 方程,证明 $c^n = \beta - (1-\rho)\mu_V^n$,从而 $\mu_V^n = (\mathrm{CE}^n - \beta)/\rho$。 -*提示:* 在主体 1 的信念下,她的投资组合在期望对数收益方面相对于主体 2 的投资组合多赚 $(\omega^1 - \omega^2)\sigma_Y + (\omega^1 - \omega^2)^2/(2\gamma)$。 +3. 证明 $\mu_V^2 = \mu_Y + \omega^2\sigma_Y + \frac{1}{2}(1-\gamma)\sigma_Y^2$,从而 $c^2$ 重现了 {eq}`eq:wc_ratio`。 + +4. 推导出 {eq}`eq:consumption_rates`。 + +*提示:* 对于第 2 步,使用归一化的 Duffie-Epstein 聚合器 + +$$ +f(C, V) = \frac{\beta}{1-\rho} (1-\gamma) V \left[\left(\frac{C}{((1-\gamma)V)^{1/(1-\gamma)}}\right)^{1-\rho} - 1\right] +$$ + +并猜测 $V(A) = (\kappa A)^{1-\gamma}/(1-\gamma)$,其中 $\kappa > 0$ 为常数。 ``` ```{solution-start} ex_consumption_wealth :class: dropdown ``` -主体 $n$ 的消费-财富比满足 $(y^n)^{-1} = \beta - (1-\rho)\mu_V^n$,其中 $\mu_V^n$ 是主体 $n$ 在其自身主观测度下财富的期望对数收益。 +*第 1 步。* +在 $Q^n$ 下,$dW = dW^n + \omega^n dt$。 + +风险资产的瞬时收益 $(r + \gamma\sigma_Y^2 - \omega^2\sigma_Y)dt + \sigma_Y dW$ 变为 $(r + \gamma\sigma_Y^2 - \omega^2\sigma_Y + \omega^n\sigma_Y)dt + \sigma_Y dW^n$。 + +因此其主观夏普比率为 $\lambda^n = \gamma\sigma_Y + \omega^n - \omega^2$。 + +确定性等价收益 $r + \pi\sigma_Y\lambda^n - \frac{1}{2}\gamma\pi^2\sigma_Y^2$ 在 $\pi^n = \lambda^n/(\gamma\sigma_Y) = 1 + (\omega^n - \omega^2)/(\gamma\sigma_Y)$ 处最大化,这正是 {eq}`eq:portfolio`。 -取差: +最大化值为 $\mathrm{CE}^n = r + (\lambda^n)^2/(2\gamma)$。 + +*第 2 步。* +在 $Q^n$ 下,财富满足 $dA = A\left[(r + \pi\sigma_Y\lambda^n - c)dt + \pi\sigma_Y dW^n\right]$。 + +当 $V(A) = (\kappa A)^{1-\gamma}/(1-\gamma)$ 时,有 $((1-\gamma)V)^{1/(1-\gamma)} = \kappa A$,HJB 方程为 $$ -(y^2)^{-1} - (y^1)^{-1} = (1-\rho)(\mu_V^1 - \mu_V^2). +0 = \max_{c, \pi} \left\{ f(cA, V(A)) + V'(A) A (r + \pi\sigma_Y\lambda^n - c) + \tfrac{1}{2} V''(A) A^2 \pi^2 \sigma_Y^2 \right\}. $$ -主体 1 的主观期望对数投资组合收益超过主体 2 的部分,等于她认为通过向风险资产倾斜所获得的收益。 +除以 $(\kappa A)^{1-\gamma}$ 得到 + +$$ +0 = \max_{c, \pi} \left\{ \frac{\beta}{1-\rho}\left[\left(\frac{c}{\kappa}\right)^{1-\rho} - 1\right] + r + \pi\sigma_Y\lambda^n - c - \tfrac{1}{2}\gamma\pi^2\sigma_Y^2 \right\}. +$$ -她额外的风险份额为 $\pi^1 - 1 = (\omega^1 - \omega^2)/(\gamma\sigma_Y)$,而在她的主观测度 $Q^1$ 下风险资产的期望超额对数收益为 $(\gamma\sigma_Y^2 + (\omega^1 - \omega^2)\sigma_Y - \omega^2\sigma_Y) - r - \frac{1}{2}\sigma_Y^2$。 +关于 $c$ 的一阶条件为 $\beta (c/\kappa)^{-\rho}/\kappa = 1$,这意味着 $(c/\kappa)^{1-\rho} = c/\beta$。 -化简后,主观期望对数收益之差为 +将其与最优 $\pi$ 代入 HJB 方程得到 $$ -\mu_V^1 - \mu_V^2 = (\omega^1 - \omega^2)\sigma_Y + \frac{(\omega^1 - \omega^2)^2}{2\gamma}. +0 = \frac{c^n - \beta}{1-\rho} + \mathrm{CE}^n - c^n , $$ -代入并整体除以 $\rho$(由 $(y^n)^{-1}$ 与 $\beta$ 之间的关系): +整理得 $c^n = \beta - (1-\rho)(\mathrm{CE}^n - c^n) = \beta - (1-\rho)\mu_V^n$。 + +对同一方程求解 $c^n$ 得到 $\rho c^n = \beta - (1-\rho)\mathrm{CE}^n$,因此 $\mu_V^n = \mathrm{CE}^n - c^n = (\mathrm{CE}^n - \beta)/\rho$。 + +量 $\mu_V^n$ 是财富的主观确定性等价增长率。 + +在 $Q^n$ 下,$d\log A$ 的漂移为 $r + \pi\sigma_Y\lambda^n - c - \frac{1}{2}\pi^2\sigma_Y^2$,波动率为 $\pi\sigma_Y$。 + +加上风险调整项 $\frac{1}{2}(1-\gamma)\pi^2\sigma_Y^2$ 并在 $\pi^n$ 处求值得到 $\mathrm{CE}^n - c^n$。 + +*第 3 步。* +对于主体 2,$\lambda^2 = \gamma\sigma_Y$,因此 $\mathrm{CE}^2 = r + \frac{1}{2}\gamma\sigma_Y^2$。 + +代入 {eq}`eq:riskfree` 得到 $\mathrm{CE}^2 = \beta + \rho\left(\mu_Y + \omega^2\sigma_Y + \frac{1}{2}(1-\gamma)\sigma_Y^2\right)$,因此 $\mu_V^2 = \mu_Y + \omega^2\sigma_Y + \frac{1}{2}(1-\gamma)\sigma_Y^2$。 + +那么 $c^2 = \beta - (1-\rho)\mu_V^2$ 即为 {eq}`eq:wc_ratio`。 + +*第 4 步。* +取差, + +$$ +(y^2)^{-1} - (y^1)^{-1} = c^2 - c^1 = (1-\rho)(\mu_V^1 - \mu_V^2) = \frac{1-\rho}{\rho}\left(\mathrm{CE}^1 - \mathrm{CE}^2\right). +$$ + +由于 $\lambda^1 - \lambda^2 = \omega^1 - \omega^2$ 且 $\lambda^1 + \lambda^2 = 2\gamma\sigma_Y + \omega^1 - \omega^2$, $$ -(y^2)^{-1} - (y^1)^{-1} = \frac{1-\rho}{\rho}\left[(\omega^1 - \omega^2)\sigma_Y + \frac{(\omega^1 - \omega^2)^2}{2\gamma}\right]. +\mathrm{CE}^1 - \mathrm{CE}^2 = \frac{(\lambda^1)^2 - (\lambda^2)^2}{2\gamma} += (\omega^1 - \omega^2)\sigma_Y + \frac{(\omega^1 - \omega^2)^2}{2\gamma}, $$ +由此得到 {eq}`eq:consumption_rates`。 + +因子 $1/\rho$ 反映了消费对财富增长的反馈:$c^n$ 依赖于 $\mu_V^n$,而 $\mu_V^n = \mathrm{CE}^n - c^n$ 又依赖于 $c^n$。 + +下面是在 $\gamma = 5$、$\rho = 0.67$、$\omega^1 = 0.25$、$\omega^2 = 0$、$\sigma_Y = 0.02$、$\mu_Y = 0.02$、$\beta = 0.05$ 下的数值检验。 + +```{code-cell} ipython3 +γ, ρ, β, μ_y, σ_y = 5.0, 0.67, 0.05, 0.02, 0.02 +ω_1, ω_2 = 0.25, 0.0 + +r = β + ρ * (μ_y + ω_2 * σ_y + 0.5 * (1 - γ) * σ_y**2) - 0.5 * γ * σ_y**2 + +def consumption_rate(ω_n): + λ_n = γ * σ_y + ω_n - ω_2 + CE_n = r + λ_n**2 / (2 * γ) + return (β - (1 - ρ) * CE_n) / ρ + +c_1, c_2 = consumption_rate(ω_1), consumption_rate(ω_2) +y0_inv = β - (1 - ρ) * (μ_y + ω_2 * σ_y + 0.5 * (1 - γ) * σ_y**2) +Δω = ω_1 - ω_2 +formula = (1 - ρ) / ρ * (Δω * σ_y + Δω**2 / (2 * γ)) + +print(f"c^2 from the HJB solution: {c_2:.6f}") +print(f"(y(0))^(-1) from eq:wc_ratio: {y0_inv:.6f}") +print(f"c^2 - c^1 from the HJB: {c_2 - c_1:.6f}") +print(f"eq:consumption_rates: {formula:.6f}") +``` + ```{solution-end} ``` @@ -623,8 +767,10 @@ def saving_channel(ω_1, ω_2, γ, ρ, σ_y): def boundary_drift(ω_1, ω_2, γ, ρ, σ_y): """ - 当主体 1 变得微不足道时的边界漂移 m_ϑ。 + 当主体 1 变得微不足道时的边界漂移 m_ϑ(0+)。 + 根据 eq:drift_wealth,这等于 eq:wealth_decomp + 中财富增长差异乘以 γ。 正漂移意味着主体 1 生存(排斥边界)。 """ return γ * ( @@ -633,66 +779,176 @@ def boundary_drift(ω_1, ω_2, γ, ρ, σ_y): ) ``` -## 生存区域 +情形 $\upsilon \nearrow 1$ 是对称的。 -{cite:t}`Borovicka2020` 的一个核心贡献是刻画了 $(\gamma, \rho)$ 平面中的生存区域。 +交换两位主体的标签会将 $\vartheta$ 变为 $-\vartheta$,因此 $\lim_{\upsilon \nearrow 1} m_\vartheta(\upsilon)$ 等于 `-boundary_drift(ω_2, ω_1, γ, ρ, σ_y)`。 -在可分偏好下,$\gamma = \rho$,信念更准确的主体总是占据主导地位。 +### 风险厌恶与 IES 之比较 -在递归偏好下,{prf:ref}`survival_conditions` 中的所有四种结果都可能出现。 +两个边界漂移满足一个简单的恒等式。 -文中的图 2 研究了主体 2 具有正确信念的情形,即 $\omega^2 = 0$。 +```{prf:proposition} +:label: boundary_drift_gap -下一个单元遵循该图。 +$$ +\lim_{\upsilon \searrow 0} m_\vartheta(\upsilon) - \lim_{\upsilon \nearrow 1} m_\vartheta(\upsilon) += (\omega^1 - \omega^2)^2 \left(\frac{1}{\rho} - \frac{1}{\gamma}\right) . +$$ +``` + +为了推导它,令 $\Delta = \omega^1 - \omega^2$。 + +结合 {eq}`eq:drift_wealth`、{eq}`eq:wealth_decomp`、{eq}`eq:portfolio_returns` 和 {eq}`eq:consumption_rates` 得到 + +$$ +\lim_{\upsilon \searrow 0} m_\vartheta(\upsilon) += \Delta(\gamma\sigma_Y - \omega^2) - \Delta\sigma_Y - \frac{\Delta^2}{2\gamma} ++ \frac{1-\rho}{\rho}\left(\gamma\Delta\sigma_Y + \frac{\Delta^2}{2}\right) . +$$ + +在 $\upsilon \nearrow 1$ 处,两位主体的角色互换,这将 $\Delta$ 替换为 $-\Delta$,$\omega^2$ 替换为 $\omega^1$,$m_\vartheta$ 替换为 $-m_\vartheta$: + +$$ +\lim_{\upsilon \nearrow 1} m_\vartheta(\upsilon) += -\left[-\Delta(\gamma\sigma_Y - \omega^1) + \Delta\sigma_Y - \frac{\Delta^2}{2\gamma} ++ \frac{1-\rho}{\rho}\left(-\gamma\Delta\sigma_Y + \frac{\Delta^2}{2}\right)\right] . +$$ + +在差值中,与 $\sigma_Y$ 成线性的项相互抵消。 + +风险溢价项相加得到 $\Delta(\omega^1 - \omega^2) = \Delta^2$,波动率项相加得到 $-\Delta^2/\gamma$,储蓄项相加得到 $\Delta^2 (1-\rho)/\rho$。 + +总和为 $\Delta^2(1/\rho - 1/\gamma)$。 + +该恒等式对 $(\gamma, \rho)$ 平面进行了划分: + +- 结果 (a),即共存,要求 $\lim_{\upsilon \searrow 0} m_\vartheta > 0 > \lim_{\upsilon \nearrow 1} m_\vartheta$,因此要求 $\gamma > \rho$。 +- 结果 (d),即每个主体都以正概率占优,要求相反的不等式,因此要求 $\gamma < \rho$。 +- 在对角线 $\gamma = \rho$ 上,两个边界漂移相等,因此当 $|\omega^1| \neq |\omega^2|$ 时,恰好有一个主体占优。 +- 结果 (b) 和 (c) 可能发生在对角线的任一侧。 + +当 $\gamma > \rho$ 时,Epstein-Zin 主体偏好不确定性的早期解决 {cite}`Kreps_Porteus1978,Epstein_Zin1989`。 + +只有在由具有这种偏好的主体构成的经济体中,两位主体才可能都生存。 + +{cite:t}`Borovicka2020` 指出,他的图 2 左上面板中的共存区域位于 $\gamma > \rho$ 处;{prf:ref}`boundary_drift_gap` 表明,这对所有信念扭曲和所有 $\sigma_Y$ 都成立。 + +单凭 IES 或单凭风险厌恶都无法解决这个问题。 + +IES 大于 1 并不足以保证共存,因为 $\gamma < \rho < 1$ 排除了这种可能性。 + +IES 大于 1 也并非必要条件,下一节将说明这一点。 + +```{exercise} +:label: ex_drift_gap + +1. 从 {eq}`eq:portfolio_returns` 和 {eq}`eq:consumption_rates` 出发,完成 {prf:ref}`boundary_drift_gap` 背后的代数运算。 +2. 证明当 $\gamma = \rho$ 时,两个边界漂移都等于 $\frac{1}{2}\left[(\omega^2)^2 - (\omega^1)^2\right]$。 +3. 使用 `boundary_drift` 在 10,000 个随机抽取的参数向量 $(\omega^1, \omega^2, \gamma, \rho, \sigma_Y)$ 上验证该恒等式。 +``` + +```{solution-start} ex_drift_gap +:class: dropdown +``` + +*第 1 部分。* +将 {eq}`eq:portfolio_returns` 乘以 $\gamma$ 得到 + +$$ +\gamma \lim_{\upsilon \searrow 0}[m_R^1 - m_R^2] += \frac{\Delta}{\sigma_Y}(\gamma\sigma_Y^2 - \omega^2\sigma_Y) - \Delta\left(\sigma_Y + \frac{\Delta}{2\gamma}\right) += \Delta(\gamma\sigma_Y - \omega^2) - \Delta\sigma_Y - \frac{\Delta^2}{2\gamma} . +$$ + +将 {eq}`eq:consumption_rates` 乘以 $\gamma$ 得到 $\frac{1-\rho}{\rho}\left(\gamma\Delta\sigma_Y + \frac{\Delta^2}{2}\right)$。 + +由 {eq}`eq:drift_wealth` 和 {eq}`eq:wealth_decomp`,两者之和即为 $\lim_{\upsilon \searrow 0} m_\vartheta$。 + +在 $\upsilon \nearrow 1$ 处,主体 2 是微不足道的主体,主体 1 决定价格。 + +对交换标签后的情形应用相同的公式得到 $\gamma \lim_{\upsilon \nearrow 1}[m_A^2 - m_A^1]$,它等于 $-\lim_{\upsilon \nearrow 1} m_\vartheta$。 + +交换标签将 $\Delta$ 替换为 $-\Delta$,$\omega^2$ 替换为 $\omega^1$,因此 + +$$ +-\lim_{\upsilon \nearrow 1} m_\vartheta += -\Delta(\gamma\sigma_Y - \omega^1) + \Delta\sigma_Y - \frac{\Delta^2}{2\gamma} ++ \frac{1-\rho}{\rho}\left(-\gamma\Delta\sigma_Y + \frac{\Delta^2}{2}\right) . +$$ + +将两个表达式逐项相加: + +$$ +\Delta(\omega^1 - \omega^2) - \frac{\Delta^2}{\gamma} + \frac{1-\rho}{\rho}\Delta^2 += \Delta^2\left(1 - \frac{1}{\gamma} + \frac{1}{\rho} - 1\right) += \Delta^2\left(\frac{1}{\rho} - \frac{1}{\gamma}\right) . +$$ + +*第 2 部分。* +令 $\rho = \gamma$,储蓄项变为 $(1-\gamma)\Delta\sigma_Y + (1-\gamma)\Delta^2/(2\gamma)$。 + +将其加到投资组合项上,含 $\sigma_Y$ 的项和含 $\Delta^2/(2\gamma)$ 的项相互抵消,剩下 + +$$ +\lim_{\upsilon \searrow 0} m_\vartheta = -\Delta\omega^2 - \frac{\Delta^2}{2} += -\frac{(\omega^1 - \omega^2)(\omega^1 + \omega^2)}{2} += \frac{1}{2}\left[(\omega^2)^2 - (\omega^1)^2\right] . +$$ + +由第 1 部分可知,$\upsilon \nearrow 1$ 处的漂移相同。 + +当 $\gamma = \rho$ 时,除非 $\rho = 1$,否则储蓄项不为零;这三个渠道净得一个不依赖于 $\gamma$ 或 $\sigma_Y$ 的常数。 + +*第 3 部分。* ```{code-cell} ipython3 -def compute_survival_boundary(ω_1, ω_2, σ_y, γ_grid, boundary="lower"): - """ - 计算 (γ, ρ) 空间中边界漂移为零的曲线。 +rng = np.random.default_rng(0) +n_draws = 10_000 +max_err = 0.0 +for _ in range(n_draws): + ω_1, ω_2 = rng.normal(0.0, 0.3, size=2) + γ = rng.uniform(0.05, 30.0) + ρ = rng.uniform(0.05, 5.0) + σ_y = rng.uniform(0.005, 0.2) + m_0 = boundary_drift(ω_1, ω_2, γ, ρ, σ_y) + m_1 = -boundary_drift(ω_2, ω_1, γ, ρ, σ_y) + gap = (ω_1 - ω_2)**2 * (1 / ρ - 1 / γ) + max_err = max(max_err, abs(m_0 - m_1 - gap)) - 对于 boundary='lower',主体 1 是小主体。 - 对于 boundary='upper',主体 2 是小主体。 - """ - ρ_boundary = [] +print(f"largest error over {n_draws} draws: {max_err:.2e}") - if boundary == "lower": - small_agent = (ω_1, ω_2) - else: - small_agent = (ω_2, ω_1) +for γ in [0.5, 2.0, 7.0]: + m_sep = boundary_drift(0.25, -0.1, γ, γ, 0.02) + print(f"γ = ρ = {γ}: m_ϑ(0+) = {m_sep:.6f}, " + f"[(ω^2)^2 - (ω^1)^2] / 2 = {0.5 * (0.1**2 - 0.25**2):.6f}") +``` - ω_small, ω_large = small_agent +```{solution-end} +``` - for γ in γ_grid: - pr = portfolio_return_diff(ω_small, ω_large, γ, σ_y) - Δω = ω_small - ω_large - subj_ret = Δω * σ_y + Δω**2 / (2 * γ) +## 生存区域 - if abs(subj_ret) < 1e-14: - ρ_boundary.append(np.nan) - continue +{cite:t}`Borovicka2020` 的一个核心贡献是刻画了 $(\gamma, \rho)$ 平面中的生存区域。 - denom = subj_ret - pr - if abs(denom) < 1e-14: - ρ_boundary.append(np.nan) - else: - ρ_boundary.append(subj_ret / denom) +在可分偏好下,$\gamma = \rho$,信念更准确的主体总是占据主导地位。 - return np.asarray(ρ_boundary) +在递归偏好下,{prf:ref}`survival_conditions` 中的所有四种结果都可能出现。 +文中的图 2 研究了主体 2 具有正确信念的情形,即 $\omega^2 = 0$。 -def compute_limit_boundary(γ_grid, boundary="lower"): - """ - 极限 |ω_1| / σ_y -> ∞ 的边界曲线。 +下一个单元遵循该图。 - 这等价于文中讨论的常数禀赋情形。 - """ - if boundary == "lower": - return γ_grid / (1 + γ_grid) +对于极限面板 $|\omega^1|/\sigma_Y \to \infty$,我们使用 $m_\vartheta(0+)/(\omega^1)^2$ 和 $m_\vartheta(1-)/(\omega^1)^2$ 的极限,这些极限由 {ref}`ex_limit_boundaries` 推导得出。 - ρ = np.full_like(γ_grid, np.nan, dtype=float) - mask = γ_grid < 1 - ρ[mask] = γ_grid[mask] / (1 - γ_grid[mask]) - return ρ +```{code-cell} ipython3 +def limit_boundary_drifts(γ, ρ): + """ + 当 |ω^1| / σ_y -> ∞ 且 ω^2 = 0 时, + m_ϑ(0+) / (ω^1)^2 和 m_ϑ(1-) / (ω^1)^2 的极限。 + """ + m_0 = (γ - (1 + γ) * ρ) / (2 * γ * ρ) + m_1 = ((1 - γ) * ρ - γ) / (2 * γ * ρ) + return m_0, m_1 ``` ```{code-cell} ipython3 @@ -700,7 +956,7 @@ def compute_limit_boundary(γ_grid, boundary="lower"): tags: [hide-input] mystnb: figure: - caption: 对应于 Borovicka (2020) 图 2 的生存区域 + caption: 对应于 Borovička (2020) 图 2 的生存区域 name: fig-survival-regions --- σ_y = 0.02 @@ -714,6 +970,7 @@ panel_specs = [ ("limit", None, r"$|\omega^1| / \sigma_Y \to \infty$"), ("finite", -0.25, r"$\omega^1 = -0.25$"), ] +region_masks = {} fig, axes = plt.subplots(2, 2, figsize=(13, 10), sharex=True, sharey=True) @@ -721,19 +978,8 @@ for idx, (case, value, label) in enumerate(panel_specs): ax = axes.flat[idx] if case == "limit": - ρ_1 = compute_limit_boundary(γ_vals, boundary="lower") - ρ_2 = compute_limit_boundary(γ_vals, boundary="upper") - # 极限边界漂移:使用闭式表达式 - # 当 ρ < γ/(1+γ) 时 m0 > 0(主体 1 生存) - m0 = G - (1 + G) * R - # 当 γ<1 时 ρ < γ/(1-γ) 时 m1 < 0(主体 2 生存),γ>=1 时总成立 - m1 = (1 - G) * R - G + m0, m1 = limit_boundary_drifts(G, R) else: - ρ_1 = compute_survival_boundary(value, 0.0, σ_y, γ_vals, - boundary="lower") - ρ_2 = compute_survival_boundary(value, 0.0, σ_y, γ_vals, - boundary="upper") - # 在网格上评估边界漂移 m0 = boundary_drift(value, 0.0, G, R, σ_y) m1 = -boundary_drift(0.0, value, G, R, σ_y) @@ -742,6 +988,7 @@ for idx, (case, value, label) in enumerate(panel_specs): ag1_dom = (m0 > 0) & (m1 > 0) ag2_dom = (m0 < 0) & (m1 < 0) either = (m0 < 0) & (m1 > 0) + region_masks[idx] = (both, ag1_dom, ag2_dom, either) # 对共存区域着色 ax.contourf(G, R, both.astype(float), levels=[0.5, 1.5], @@ -768,7 +1015,7 @@ for idx, (case, value, label) in enumerate(panel_specs): if case == "finite" and value == 0.10: ax.text(0.31, 1.05, "任一主体占主导", rotation=90, fontsize=10, **tkw) - ax.text(1.8, 1.55, "主体 2\n占主导", fontsize=11, **tkw) + ax.text(2.6, 1.6, "主体 2\n占主导", fontsize=11, **tkw) ax.text(3.5, 0.75, "两者\n都生存", fontsize=11, **tkw) if ag1_dom.any(): ax.text(5.0, 0.25, "主体 1\n占主导", fontsize=11, **tkw) @@ -778,7 +1025,10 @@ for idx, (case, value, label) in enumerate(panel_specs): ax.text(2.5, 1.55, "主体 2\n占主导", fontsize=11, **tkw) ax.text(3.8, 0.55, "两者\n都生存", fontsize=11, **tkw) if ag1_dom.any(): - ax.text(5.2, 0.08, "主体 1\n占主导", fontsize=9, **tkw) + ax.annotate("主体 1 占主导", xy=(5.85, 0.06), + xytext=(5.0, 0.3), fontsize=9, + arrowprops=dict(arrowstyle="->", color="0.15"), + **tkw) elif case == "limit": ax.text(0.31, 1.05, "任一主体占主导", rotation=90, fontsize=10, **tkw) @@ -801,22 +1051,145 @@ plt.tight_layout() plt.show() ``` -每个面板针对主体 1 的信念扭曲 $\omega^1$ 的不同取值(主体 2 具有正确信念,$\omega^2 = 0$)绘制 $(\gamma, \rho)$ 平面中的两条曲线。 +每个面板针对主体 1 的信念扭曲 $\omega^1$ 的不同取值(主体 2 具有正确信念,$\omega^2 = 0$)绘制 $(\gamma, \rho)$ 平面中的两条曲线。 -- 虚线(蓝色)是 $\upsilon = 0$ 处边界漂移等于零的地方——{prf:ref}`survival_conditions` 中的条件 (i)。 -- 实线(红色)是 $\upsilon = 1$ 处边界漂移等于零的地方——条件 (ii)。 -- 两条曲线之间的阴影区域是两个主体都生存的地方。 +- 虚线(蓝色)是 $\upsilon = 0$ 处边界漂移等于零的地方——{prf:ref}`survival_conditions` 中的条件 (i)。 +- 实线(红色)是 $\upsilon = 1$ 处边界漂移等于零的地方——条件 (ii)。 +- 阴影区域是两个主体都生存的地方。 - 虚线对角线 $\gamma = \rho$ 是可分 CRRA 情形,沿此线信念更准确的主体总是占据主导地位。 -适度乐观($\omega^1 = 0.10$)产生了一个宽阔的共存区域,横跨大部分 $\gamma$ 范围。 +下一个单元报告每种结果在绘图窗口中所占的比例、共存区域中 $\rho > 1$(IES $< 1$)所占的比例,以及共存区域中最大的 $\rho$。 + +```{code-cell} ipython3 +names = ["ω¹ = 0.10", "ω¹ = 0.20", "|ω¹|/σ_y → ∞", "ω¹ = -0.25"] +print(f"{'panel':<15}{'both':>7}{'agent 1':>9}{'agent 2':>9}{'either':>8}" + f"{'share ρ > 1':>13}{'max ρ':>8}") +n_wrong_side = 0 +for idx, name in enumerate(names): + both, ag1_dom, ag2_dom, either = region_masks[idx] + print(f"{name:<15}{both.mean():7.3f}{ag1_dom.mean():9.3f}" + f"{ag2_dom.mean():9.3f}{either.mean():8.3f}" + f"{(both & (R > 1)).sum() / both.sum():13.3f}{R[both].max():8.3f}") + n_wrong_side += (both & (R >= G)).sum() + (either & (R <= G)).sum() + +print(f"\ngrid points with coexistence and ρ ≥ γ, " + f"or with outcome (d) and ρ ≤ γ: {n_wrong_side}") +``` + +每个阴影区域都位于对角线下方,而每个任一主体都可能占主导的区域都位于对角线上方,这正是 {prf:ref}`boundary_drift_gap` 所要求的。 + +适度乐观($\omega^1 = 0.10$)产生了一个宽阔的共存区域,横跨大部分 $\gamma$ 范围。 + +共存并不要求 IES $> 1$:该面板中有 42% 的阴影区域满足 $\rho > 1$,其中包括点 $\gamma = 5$,$\rho = 1.5$。 + +较强的乐观($\omega^1 = 0.20$)使两条曲线都顺时针旋转。 + +主体 1 的曲线下降,因此主体 2 在其上方占主导的区域变大。 + +主体 2 曲线的下支在 $\gamma = \omega^1/(2\sigma_Y)$ 处与轴 $\rho = 0$ 相交,当 $\omega^1 = 0.10$ 时该值为 2.5,当 $\omega^1 = 0.20$ 时为 5。 + +在该 $\gamma$ 值处,两个主体在边界 $\upsilon = 1$ 处的主观确定性等价回报相等,储蓄渠道在此处改变符号。 + +因此在 $\omega^1 = 0.20$ 的面板中,主体 1 仅在右下角的一小块区域内占主导,而共存区域从绘图窗口的 44% 增长到 49%。 + +在极限 $|\omega^1|/\sigma_Y \to \infty$(左下)中,边界曲线为 $\rho = \gamma/(1+\gamma)$,以及当 $\gamma < 1$ 时的 $\rho = \gamma/(1-\gamma)$(参见 {ref}`ex_limit_boundaries`)。 + +当且仅当 $\rho < \gamma/(1+\gamma)$ 时,即在主体 1 曲线下方的区域,两个主体都生存。 + +该曲线随 $\gamma$ 增大而趋向 $\rho = 1$,因此在此极限下共存要求 IES $> 1$。 + +主体 2 曲线将结果 (c) 与结果 (d) 分开,主体 1 永远不会占主导。 + +悲观的扭曲($\omega^1 = -0.25$,右下)也可以生存,但仅在参数空间中窄得多的部分:占绘图窗口的 17%,且全部满足 $\rho < 0.51$。 -较强的乐观($\omega^1 = 0.20$)缩小了该区域:主体 2 边界对于中等和较大的 $\gamma$ 移出了绘图范围,缩小了两个主体共存的 $(\gamma, \rho)$ 对的集合。 +共存区域在 $\gamma = |\omega^1|/(2\sigma_Y) = 6.25$ 处结束,刚好超出绘图范围。 + +对于更大的 $\gamma$,她的空头头寸过小,$\pi^1 > -1$,不足以使她的主观确定性等价回报超过主体 2。 + +当 IES $> 1$ 时,储蓄渠道这时对她不利;当 IES $< 1$ 时,该渠道又太弱,无法抵消她的投资组合损失。 + +```{exercise} +:label: ex_limit_boundaries + +设 $\omega^2 = 0$。 + +1. 证明在固定 $\gamma$ 和 $\rho$ 的情况下,$m_\vartheta(0+)/(\omega^1)^2$ 和 $m_\vartheta(1-)/(\omega^1)^2$ 仅通过 $\sigma_Y/\omega^1$ 依赖于 $\omega^1$ 和 $\sigma_Y$,并且当 $\sigma_Y/\omega^1 \to 0$ 时它们收敛于 `limit_boundary_drifts` 中的表达式。 +2. 由此推导出极限下的边界曲线为 $\rho = \gamma/(1+\gamma)$,以及当 $\gamma < 1$ 时的 $\rho = \gamma/(1-\gamma)$。 + 对极限下的四种结果进行分类,并证明主体 1 永远不会占主导。 +3. 通过数值方法验证,当 $\omega^1/\sigma_Y$ 增大时,`boundary_drift` 在 $\upsilon = 0$ 处的零点曲线收敛于 $\rho = \gamma/(1+\gamma)$。 + +*提示:*$m_\vartheta(0+)$ 关于 $1/\rho$ 是仿射的,因此对于每个 $\gamma$,其零点都可以用闭式表达式计算得出。 +``` + +```{solution-start} ex_limit_boundaries +:class: dropdown +``` + +*第 1 部分。* +设 $\Delta = \omega^1$,$s = \sigma_Y/\omega^1$。 + +根据 {prf:ref}`boundary_drift_gap` 推导过程中 $\lim_{\upsilon \searrow 0} m_\vartheta$ 的表达式,在 $\omega^2 = 0$ 的情况下, + +$$ +\frac{m_\vartheta(0+)}{\Delta^2} += (\gamma - 1)s - \frac{1}{2\gamma} + \frac{1-\rho}{\rho}\left(\gamma s + \frac{1}{2}\right) +\;\longrightarrow\; \frac{\gamma - (1+\gamma)\rho}{2\gamma\rho} . +$$ + +类似地, + +$$ +\frac{m_\vartheta(1-)}{\Delta^2} += (\gamma - 1)s - 1 + \frac{1}{2\gamma} + \frac{1-\rho}{\rho}\left(\gamma s - \frac{1}{2}\right) +\;\longrightarrow\; \frac{(1-\gamma)\rho - \gamma}{2\gamma\rho} . +$$ + +两个极限之差为 $(\gamma - \rho)/(\gamma\rho) = 1/\rho - 1/\gamma$,这正是 {prf:ref}`boundary_drift_gap` 所要求的。 + +*第 2 部分。* +第一个极限为正当且仅当 $\rho < \gamma/(1+\gamma)$。 + +第二个极限为负当且仅当 $(1-\gamma)\rho < \gamma$。 + +当 $\gamma \geq 1$ 时该不等式对所有 $\rho > 0$ 都成立;当 $\gamma < 1$ 时,该不等式当且仅当 $\rho < \gamma/(1-\gamma)$ 时成立。 + +由于当 $\gamma \in (0, 1)$ 时 $\gamma/(1+\gamma) < \gamma/(1-\gamma)$,条件 (i) 蕴含条件 (ii)。 + +因此: + +- (a) 当且仅当 $\rho < \gamma/(1+\gamma)$ 时两者都生存; +- (b) 主体 1 永远不会占主导,因为条件 (i) 和条件 (ii') 不能同时成立; +- (c) 若 $\rho > \gamma/(1+\gamma)$ 且 $\gamma \geq 1$ 或 $\rho < \gamma/(1-\gamma)$,则主体 2 占主导; +- (d) 若 $\gamma < 1$ 且 $\rho > \gamma/(1-\gamma)$,则任一主体都可能占主导。 + +*第 3 部分。* +将 $m_\vartheta(0+)$ 写成 $\gamma\left[P + (1/\rho - 1) S\right]$,其中 $P$ 是投资组合回报之差,$S$ 是 {eq}`eq:consumption_rates` 中的括号项。 + +该漂移在 $1/\rho = 1 - P/S$ 处为零,因此 $\rho = S/(S - P)$。 + +```{code-cell} ipython3 +def lower_zero_curve(ω_1, ω_2, σ_y, γ): + """ + 利用 m_ϑ(0+) 关于 1/ρ 为仿射的性质,计算 + m_ϑ(0+) = 0 处的 ρ。 + """ + Δω = ω_1 - ω_2 + P = portfolio_return_diff(ω_1, ω_2, γ, σ_y) + S = Δω * σ_y + Δω**2 / (2 * γ) + return S / (S - P) -在极限 $|\omega^1|/\sigma_Y \to \infty$(左下)中,边界简化为闭式表达式。 -共存区域变窄,但在主体 2 边界曲线下方延伸到较大的 $\gamma$ 值。 +γ_check = np.array([0.5, 1.0, 2.0, 5.0, 20.0]) +σ_y = 0.02 +print("γ: ", γ_check) +for ratio in [5, 50, 500, 5000]: + ρ_zero = lower_zero_curve(ratio * σ_y, 0.0, σ_y, γ_check) + print(f"ω¹/σ_y = {ratio:>5}: ", np.round(ρ_zero, 4)) +print("γ / (1 + γ): ", np.round(γ_check / (1 + γ_check), 4)) +``` -悲观的扭曲($\omega^1 = -0.25$,右下)也可以生存,但仅在参数空间中窄得多的部分。 +```{solution-end} +``` ## 三个生存渠道 @@ -826,6 +1199,8 @@ plt.show() def decompose_survival(ω_1, ω_2, γ_grid, ρ, σ_y): """ 分解命题 3.4 中的财富增长差异。 + + 总计等于 lim (m_A^1 - m_A^2) = m_ϑ(0+) / γ,当 υ -> 0 时。 """ Δω = ω_1 - ω_2 risk_premium_term = Δω * (γ_grid * σ_y - ω_2) / γ_grid @@ -849,21 +1224,27 @@ fig, ax = plt.subplots(figsize=(11, 6)) ax.plot(γ_grid, risk_term, color="C0", lw=2, label="风险溢价项") ax.plot(γ_grid, vol_term, "--", color="C3", lw=2, label="波动率项") ax.plot(γ_grid, save_term, "-.", color="C2", lw=2, label="储蓄项") -ax.plot(γ_grid, total, color="black", lw=2, label="总计") +ax.plot(γ_grid, total, color="black", lw=2, + label=r"总计 $= m_\vartheta(0+)/\gamma$") ax.axhline(0, color="gray", lw=1) ax.set_xlabel(r"风险厌恶 $\gamma$") ax.set_ylabel("对财富增长差异的贡献") ax.legend() plt.tight_layout() plt.show() + +γ_star = brentq( + lambda γ: decompose_survival(ω_1, ω_2, γ, ρ, σ_y)[3], 0.5, 15.0 +) +print(f"the total crosses zero at γ = {γ_star:.3f}") ``` -此图将 $\upsilon = 0$ 处的边界漂移分解为三项,针对一个乐观主体($\omega^1 = {0.25}$,$\omega^2 = 0$),其 IES $= 1/\rho \approx 1.49$,$\sigma_Y = 0.02$。 +此图将财富增长差异 $\lim_{\upsilon \searrow 0}[m_A^1 - m_A^2] = \lim_{\upsilon \searrow 0} m_\vartheta / \gamma$ 分解为三项,针对一个乐观主体(ω^1 = {0.25},$\omega^2 = 0$),其 IES $= 1/\rho \approx 1.49$,$\sigma_Y = 0.02$。 - 风险溢价项(蓝色)始终为正,因为乐观主体超配了风险资产并赚取了股权溢价。 - 波动率项(红色虚线)为负且在低 $\gamma$ 时较大,反映了持有波动投资组合的成本。 - 储蓄项(绿色点划线)在 IES $> 1$ 时为正,因为乐观主体感知到财富的高收益并更激进地储蓄。 -- 总计(黑色)在临界 $\gamma$ 处穿过零点,低于此值波动率惩罚占主导,主体无法生存。 +- 总计(黑色)在 $\gamma \approx 1.47$ 处穿过零点;低于此值时波动率惩罚占主导,条件(i)不成立,边界 $\upsilon = 0$ 具有吸引力。 ## 改变 IES @@ -904,19 +1285,27 @@ for idx, ies in enumerate(ies_values): axes[0].legend(fontsize=9) plt.tight_layout() plt.show() + +for ies in ies_values: + γ_star = brentq( + lambda γ: decompose_survival(ω_1, ω_2, γ, 1 / ies, σ_y)[3], 0.5, 25.0 + ) + print(f"IES = {ies:.1f}: the total crosses zero at γ = {γ_star:.2f}") ``` 每个面板显示与前一图相同的三项分解,但现在针对三种不同的 IES 值($\omega^1 = 0.25$,$\omega^2 = 0$,$\sigma_Y = 0.02$)。 -- 左面板(IES $= 0.5$):储蓄项为负,因此乐观主体实际上储蓄更少,不利于生存。 +- 左面板(IES $= 0.5$):储蓄项为负,因此乐观主体实际上储蓄更少,不利于生存。风险溢价项仍使总和在 $\gamma > 9.56$ 时为正,因此在 IES 低于 1 的情况下条件(i)依然成立。 - 中面板(IES $= 1.0$):储蓄项完全消失,因此只剩下投资组合收益和波动率渠道。 - 这消除了储蓄渠道,但本身并不能重现完整的可分 CRRA 基准,后者要求 $\gamma = \rho$(即 IES $= 1/\gamma$),而不仅仅是 $\rho = 1$。 - 右面板(IES $= 1.5$):储蓄项为正并将总漂移向上移动,扩大了乐观主体生存的 $\gamma$ 值范围。 +随着 IES 从 0.5 升至 1 再升至 1.5,零点穿越位置从 $\gamma = 9.56$ 移动到 $3.05$,再移动到 $1.45$。 + ## 渐近结果 -Borovicka 推导了几个有用的渐近结果。 +Borovička 推导了几个有用的渐近结果。 1. 当 $\gamma \searrow 0$ 时,每个主体都以严格正概率占据主导地位。 1. 当 $\gamma \nearrow \infty$ 时,相对更乐观的主体占据主导地位。 @@ -953,10 +1342,10 @@ plt.tight_layout() plt.show() ``` -此图将两个边界漂移绘制为 $\gamma$ 的函数($\omega^1 = 0.25$,$\omega^2 = 0$,IES $\approx 1.49$)。 +此图将两个边界漂移绘制为 $\gamma$ 的函数($\omega^1 = 0.25$,$\omega^2 = 0$,IES $\approx 1.49$)。 -- 实线蓝色曲线是 $\upsilon \to 0$ 处的漂移 $m_\vartheta$(主体 1 接近消亡);共存要求这为正(条件 (i))。 -- 虚线红色曲线是 $\upsilon \to 1$ 处的漂移 $m_\vartheta$(主体 2 接近消亡);共存要求这为负(条件 (ii))。 +- 实线蓝色曲线是 $\upsilon \to 0$ 处的漂移 $m_\vartheta$(主体 1 接近消亡);共存要求这为正(条件 (i))。 +- 虚线红色曲线是 $\upsilon \to 1$ 处的漂移 $m_\vartheta$(主体 2 接近消亡);共存要求这为负(条件 (ii))。 此图说明了渐近结果 1。 @@ -966,22 +1355,104 @@ plt.show() 这是 {prf:ref}`survival_conditions` 中的结果 (d):两个边界都不是排斥的,因此无论哪个主体碰巧早期领先都将占据主导地位,每个主体都有严格正概率占据主导地位,这取决于实现的布朗路径。 -随着 $\gamma$ 增大超过大约 1,蓝色曲线穿过零点变为正,而红色曲线保持为负。 +红色曲线首先在 $\gamma \approx 0.39$ 处穿过零点,而此时蓝色曲线仍为负。 + +对于大约在 0.39 到 1.47 之间的 $\gamma$,边界 $\upsilon = 1$ 排斥而边界 $\upsilon = 0$ 吸引,因此主体 2 占据主导地位——结果 (c)。 + +正如 {prf:ref}`boundary_drift_gap` 所要求的,两条曲线在 $\gamma = \rho = 0.67$ 处相交;它们在该点的共同值为 $-\frac{1}{2}(\omega^1)^2 = -0.03125$。 + +蓝色曲线在 $\gamma \approx 1.47$ 处穿过零点。 + +超过该点后,两个边界都排斥,两个主体都能生存——结果 (a)。 + +在所绘范围之外,红色曲线在 $\gamma \approx 10.7$ 处再次穿过零点,对于更大的 $\gamma$,主体 1 占据主导地位——结果 (b),这与渐近结果 2 一致。 + +```{exercise} +:label: ex_thresholds + +采用 {numref}`fig-boundary-drifts-small-gamma` 中的参数:$\omega^1 = 0.25$,$\omega^2 = 0$,$\rho = 0.67$,$\sigma_Y = 0.02$。 + +1. 证明 $2\gamma \lim_{\upsilon \searrow 0} m_\vartheta$ 和 $2\gamma \lim_{\upsilon \nearrow 1} m_\vartheta$ 是关于 $\gamma$ 的二次多项式,并利用它们找出使边界漂移变号的所有 $\gamma > 0$。 +2. 用 `boundary_drift` 确认这些根。 +3. 在相邻根之间的每个区间上标注 {prf:ref}`survival_conditions` 的结果。 +``` + +```{solution-start} ex_thresholds +:class: dropdown +``` + +设 $\Delta = \omega^1$,$\omega^2 = 0$,$k = (1-\rho)/\rho$。 + +将 {prf:ref}`boundary_drift_gap` 推导中的两个边界漂移乘以 $2\gamma$ 得到 + +$$ +2\gamma \lim_{\upsilon \searrow 0} m_\vartheta += \frac{2\Delta\sigma_Y}{\rho}\gamma^2 + \left(k\Delta^2 - 2\Delta\sigma_Y\right)\gamma - \Delta^2, +$$ + +$$ +2\gamma \lim_{\upsilon \nearrow 1} m_\vartheta += \frac{2\Delta\sigma_Y}{\rho}\gamma^2 - \left(2\Delta\sigma_Y + \frac{1+\rho}{\rho}\Delta^2\right)\gamma + \Delta^2 . +$$ + +当 $\Delta > 0$ 时,第一个二次多项式有一个正根,因为其常数项为负。 -现在两个边界都是排斥的,我们进入共存区域——结果 (a)。 +第二个二次多项式在判别式为正时有两个正根,因为其常数项和首项系数都为正。 + +```{code-cell} ipython3 +ω_1, ω_2, ρ, σ_y = 0.25, 0.0, 0.67, 0.02 +Δ, k = ω_1 - ω_2, (1 - ρ) / ρ + +roots_0 = np.roots([2 * Δ * σ_y / ρ, k * Δ**2 - 2 * Δ * σ_y, -Δ**2]) +roots_1 = np.roots([2 * Δ * σ_y / ρ, + -(2 * Δ * σ_y + (1 + ρ) / ρ * Δ**2), Δ**2]) +roots_0 = np.sort(roots_0[roots_0 > 0]) +roots_1 = np.sort(roots_1[roots_1 > 0]) + +m_0 = lambda γ: boundary_drift(ω_1, ω_2, γ, ρ, σ_y) +m_1 = lambda γ: -boundary_drift(ω_2, ω_1, γ, ρ, σ_y) + +print("roots of m_ϑ(0+):", roots_0, " check:", [m_0(g) for g in roots_0]) +print("roots of m_ϑ(1-):", roots_1, " check:", [m_1(g) for g in roots_1]) + +outcome = {(True, True): "(a) both survive", + (True, False): "(b) agent 1 dominates", + (False, True): "(c) agent 2 dominates", + (False, False): "(d) either agent dominates"} + +cuts = np.concatenate(([0.0], np.sort(np.concatenate((roots_0, roots_1))), + [np.inf])) +for lo, hi in zip(cuts[:-1], cuts[1:]): + γ_mid = 0.5 * (lo + hi) if np.isfinite(hi) else 2 * lo + print(f"γ in ({lo:6.3f}, {hi:6.3f}): " + f"{outcome[(m_0(γ_mid) > 0, m_1(γ_mid) < 0)]}") +``` + +随着 $\gamma$ 的增加,结果从 (d) 到 (c) 再到 (a) 再到 (b),这与渐近结果 1 和 2 一致。 + +```{solution-end} +``` ## 可分情形 当 $\gamma = \rho$ 时,模型退化为可分 CRRA 基准。 -在这种情形下,对数几率过程变为 +{cite:t}`Blume_Easley2006` 在离散时间中研究了这一基准;{doc}`likelihood_ratio_process_2` 介绍了他们的分析。 + +此时两个主体的贴现率 $\nu^1$ 和 $\nu^2$ 相等,对数几率过程 {eq}`eq:log_odds` 变为 $$ d\vartheta_t = \frac{1}{2}\left[(\omega^2)^2 - (\omega^1)^2\right] dt + (\omega^1 - \omega^2) dW_t . $$ +当 $\gamma = \rho$ 时,其漂移是 {prf:ref}`boundary_drift_gap` 中两个边界漂移的公共值(参见 {ref}`ex_drift_gap`)。 + 漂移是常数,且仅取决于两个信念扭曲的相对熵。 +在 $P$ 下,$P$ 相对于 $Q^n$ 在 $\mathcal{F}_t$ 上的相对熵为 $E^P[-\log M_t^n] = \frac{1}{2}(\omega^n)^2 t$,即 {ref}`rel_entropy` 中描述的 Kullback–Leibler 散度。 + +$\vartheta$ 的漂移是两个主体相对熵增长率之差。 + $|\omega^n|$ 较小的主体在 $P$ 下占据主导地位。 如果两个主体的信念扭曲幅度相等,则几乎必然没有一个主体会消亡,但不存在非退化的平稳财富分布。 @@ -1016,7 +1487,8 @@ def simulate_crra_pareto(ω_1, ω_2, T, dt, n_paths, seed=42): ω_1 = 0.10 ω_2 = 0.0 -t_grid, υ_paths = simulate_crra_pareto(ω_1, ω_2, T=200, dt=0.01, n_paths=50) +T, dt = 2000, 0.05 +t_grid, υ_paths = simulate_crra_pareto(ω_1, ω_2, T=T, dt=dt, n_paths=50) fig, ax = plt.subplots(figsize=(11, 5)) @@ -1029,14 +1501,31 @@ ax.set_ylabel(r"帕累托份额 $\upsilon_t$") ax.set_ylim(0, 1) plt.tight_layout() plt.show() + +drift = 0.5 * (ω_2**2 - ω_1**2) +vol = abs(ω_1 - ω_2) +print(f"{'t':>6}{'share of paths with υ_t < 1/2':>32}{'P(υ_t < 1/2)':>16}") +for t in [200, 500, 1000, 2000]: + k = int(round(t / dt)) + share = np.mean(υ_paths[:, k] < 0.5) + prob = 0.5 * (1 + erf(-drift * sqrt(t) / vol / sqrt(2))) + print(f"{t:>6}{share:>32.2f}{prob:>16.3f}") ``` -此图模拟了在可分 CRRA 偏好($\gamma = \rho$)下帕累托份额 $\upsilon_t$ 的 20 条样本路径,其中 $\omega^1 = 0.10$ 且 $\omega^2 = 0$。 +此图模拟了在可分 CRRA 偏好($\gamma = \rho$)下帕累托份额 $\upsilon_t$ 的 50 条样本路径,其中 $\omega^1 = 0.10$ 且 $\omega^2 = 0$。 -主体 2 具有正确信念,因此对数几率漂移为负,所有路径都趋向于 $\upsilon = 0$。 +主体 2 具有正确信念,因此 $\vartheta$ 的漂移为 $-\frac{1}{2}(\omega^1)^2 = -0.005$,且 $\upsilon_t \to 0$ 几乎必然成立。 主体 1 被驱向消亡——这是 {cite:t}`Blume_Easley2006` 的经典市场选择结果。 +选择过程是缓慢的。 + +$\vartheta$ 的波动率为 $0.1$,因此在 $t = 200$ 时,$\vartheta_t$ 的均值 $-1$ 在量级上小于其标准差 $1.41$。 + +下表将 50 条模拟路径中 $\upsilon_t < 1/2$ 的比例与概率 $P(\vartheta_t < 0) = \Phi(0.05\sqrt{t})$ 进行了比较,其中 $\Phi$ 是标准正态分布函数。 + +在 $t = 200$ 时,约有四分之三的路径满足 $\upsilon_t < 1/2$;到 $t = 2000$ 时,几乎所有路径都满足这一条件。 + ## 资产定价含义 随着一个主体变得微不足道,当前价格收敛于由大主体构成的齐次经济体的价格。 @@ -1134,13 +1623,32 @@ plt.show() 乐观主体从风险溢价项中获益,并且当 IES $> 1$ 时,也从储蓄项中获益。 -悲观主体放弃了风险溢价,只有当储蓄效应足够强以抵消该损失时才能生存。 +悲观主体持有的风险资产少于持有市场组合的主体 2,即 $\pi^2 = 1$。 + +当 $\omega^2 = 0$ 时,在 $P$ 下使期望对数收益最大化的投资组合的风险份额为 $\gamma$。 + +当 $\gamma \geq 1$ 时,较小的风险份额使悲观主体偏离该组合,因此她获得的期望对数收益低于主体 2。 + +此时她只有在储蓄效应足够强以抵消该损失时才能生存。 + +当 IES $> 1$ 时,储蓄项只有在她持有较大的空头头寸($\pi^1 < -1$)时才能帮助她;当 IES $< 1$ 时,储蓄项只有在 $-1 < \pi^1 < 1$ 时才能帮助她。 + +当 $\gamma < 1$ 时,市场组合比使期望对数收益最大化的组合杠杆更高。 + +此时一个具有 $2\gamma - 1 < \pi^1 < 1$ 的轻度悲观主体,无需借助储蓄渠道,就能获得高于主体 2 的期望对数收益。 + +例如,当 $\rho = 1$、$\gamma = 0.5$、$\sigma_Y = 0.02$ 且 $\omega^1 = -0.005$ 时,两个边界漂移都为正,悲观主体占主导地位。 + +```{code-cell} ipython3 +print(f"m_ϑ(0+) = {boundary_drift(-0.005, 0.0, 0.5, 1.0, 0.02):.2e}, " + f"m_ϑ(1-) = {-boundary_drift(0.0, -0.005, 0.5, 1.0, 0.02):.2e}") +``` ```{code-cell} ipython3 --- mystnb: figure: - caption: 乐观和悲观扭曲的总边界漂移 + caption: 乐观和悲观扭曲在边界处的财富增长差 name: fig-optimistic-pessimistic-drifts --- fig, axes = plt.subplots(1, 2, figsize=(14, 5), sharey=True) @@ -1157,7 +1665,8 @@ for ω_1 in [0.1, 0.25, 0.5, 1.0]: ax.axhline(0, color="gray", lw=1) ax.set_title("乐观", fontsize=12) ax.set_xlabel(r"风险厌恶 $\gamma$") -ax.set_ylabel("边界漂移") +ax.set_ylabel(r"$m_\vartheta(0+)/\gamma$") +ax.set_ylim(-0.03, 0.06) ax.legend(fontsize=9) ax = axes[1] @@ -1171,14 +1680,22 @@ ax.legend(fontsize=9) plt.tight_layout() plt.show() + +f = lambda γ: decompose_survival(-1.0, ω_2, γ, ρ, σ_y)[3] +total = f(γ_grid) +idx = np.where(np.diff(np.sign(total)) != 0)[0] +roots = [brentq(f, γ_grid[i], γ_grid[i + 1]) for i in idx] +print("ω¹ = -1.0: the curve changes sign at γ =", np.round(roots, 2)) ``` -两个面板都将 $\upsilon = 0$ 处的总边界漂移绘制为 $\gamma$ 的函数(IES $\approx 1.49$,$\omega^2 = 0$)。 +两个面板都将财富增长差 $\lim_{\upsilon \searrow 0}[m_A^1 - m_A^2] = \lim_{\upsilon \searrow 0} m_\vartheta/\gamma$ 绘制为 $\gamma$ 的函数(IES $\approx 1.49$,$\omega^2 = 0$)。 + +我们对纵轴进行了截断;当 $\gamma \to 0$ 时,每条曲线都会急剧下降。 曲线为正的地方,主体 1 在接近消亡时生存。 -- 左面板(乐观主体):较大的 $\omega^1$ 意味着对风险资产更大的押注,因此波动率惩罚在低 $\gamma$ 时占主导,但一旦 $\gamma$ 足够大漂移转为正。 -- 右面板(悲观主体):悲观主体通过低配风险资产放弃了风险溢价,因此漂移在大部分参数空间内为负,生存需要足够强的储蓄动机以抵消投资组合损失。 +- 左面板(乐观主体):较大的 $\omega^1$ 意味着对风险资产更大的押注,因此波动率惩罚在低 $\gamma$ 时占主导,但一旦 $\gamma$ 足够大漂移转为正。 +- 右面板(悲观主体):$\omega^1 = -0.1, -0.25, -0.5$ 的曲线始终为负。只有最悲观的主体($\omega^1 = -1$)在接近消亡时得以生存,对应的 $\gamma$ 范围大约在 2.69 到 6.23 之间。在该区间内,她大量做空风险资产($\pi^1 < -1$),预期其头寸能获得高回报,并储蓄足够多以抵消投资组合损失。 ## 长期消费分布 @@ -1256,7 +1773,7 @@ plt.tight_layout() plt.show() ``` -左面板显示了在共存区域内的参数下帕累托份额 $\upsilon_t$ 的 20 条样本路径($\omega^1 = 0.25$,$\omega^2 = 0$,$\gamma = 5$,IES $\approx 1.49$)。 +左面板显示了在共存区域内的参数下帕累托份额 $\upsilon_t$ 的 50 条样本路径($\omega^1 = 0.25$,$\omega^2 = 0$,$\gamma = 5$,IES $\approx 1.49$)。 与 {numref}`fig-crra-pareto-paths` 中的可分情形不同,这些路径不会漂向零——它们反复访问广泛的取值范围,在两个排斥边界之间来回弹跳。 @@ -1274,6 +1791,14 @@ plt.show() 波动率渠道仍然惩罚激进的头寸。 -但当 IES $> 1$ 时,储蓄渠道可以足够强以使具有扭曲信念的主体存活。 +当 IES $> 1$ 时,储蓄渠道会奖励预期其投资组合收益较高的主体,而当 IES $< 1$ 时则会惩罚该主体。 + +两个边界漂移项相差 $(\omega^1 - \omega^2)^2(1/\rho - 1/\gamma)$。 + +只有当 $\gamma > \rho$ 时,两个主体才都能存活,这意味着主体偏好不确定性的早期解决。 + +只有当 $\gamma < \rho$ 时,每个主体才有可能以正概率占据主导地位。 + +共存并不要求 IES $> 1$:当 $\omega^1 = 0.10$、$\omega^2 = 0$ 且 $\sigma_Y = 0.02$ 时,在 $\gamma = 5$、$\rho = 1.5$ 的情形下两个主体都能存活。 -这就是为什么递归偏好经济体可以支持在信念和投资组合头寸方面具有持续异质性的平稳长期财富分布。 \ No newline at end of file +当 $\gamma > \rho$ 时,递归偏好经济体可以支持在信念和投资组合头寸方面具有持续异质性的平稳长期财富分布。 diff --git a/lectures/wald_friedman.md b/lectures/wald_friedman.md index 462acc38..629645f0 100644 --- a/lectures/wald_friedman.md +++ b/lectures/wald_friedman.md @@ -46,17 +46,17 @@ translation: ## 概述 -这是关于一个统计决策问题的两个讲座中的第一个。这个问题是二战期间,当弥尔顿·弗里德曼和W·艾伦·沃利斯在哥伦比亚大学的美国政府统计研究组担任分析师时,一位美国海军上尉向他们提出的。 +这是关于一个统计决策问题的三个讲座中的第一个。这个问题是二战期间,当弥尔顿·弗里德曼和W·艾伦·沃利斯在哥伦比亚大学的美国政府统计研究组担任分析师时,一位美国海军上尉向他们提出的。 -这个问题促使亚伯拉罕·瓦尔德{cite}`Wald47`提出了**序贯分析**,这是一种与动态规划密切相关的统计决策问题处理方法。 +这个问题促使亚伯拉罕·瓦尔德 {cite}`Wald47` 提出了**序贯分析**,这是一种与动态规划密切相关的统计决策问题处理方法。 本讲座及其{doc}`续篇 `延续了{doc}`之前讲座 `的精神,从频率主义和贝叶斯两个不同的角度来处理这个问题。 -在本讲中,我们从一位统计学家的角度描述Wald的问题表述,这位统计学家遵循Neyman-Pearson的频率派统计学传统,关注假设检验,并因此使用大数定律来研究在给定**假设**下特定统计量的极限性质,即,一个**参数**向量确定了统计学家感兴趣的统计模型簇中的某个特定成员。 +在本讲中,我们从一位频率派统计学家的角度描述 Wald 的问题表述,这位统计学家遵循 Neyman-Pearson 传统,关注假设检验,并因此使用大数定律来研究在给定**假设**下特定统计量的极限性质,即,一个**参数**向量确定了统计学家感兴趣的统计模型簇中的某个特定成员。 - * 从{doc}`这节关于频率派和贝叶斯统计的讲座`中,请记住频率派统计学家经常计算随机变量序列的函数,以参数向量为条件。 + * 从 {doc}`这节关于频率派和贝叶斯统计的讲座` 中,请记住频率派统计学家经常计算随机变量序列的函数,以参数向量为条件。 -在{doc}`这个相关讲座`中,我们将讨论另一种表述方法,它采用**贝叶斯统计学家**的视角,将参数视为与他所关心的可观测变量共同分布的随机变量。 +在 {doc}`这个相关讲座` 中,我们将讨论另一种表述方法,它采用**贝叶斯统计学家**的视角,将参数视为与他所关心的可观测变量共同分布的随机变量。 因为我们采用的是关注在不同参数值(即不同**假设**)条件下相对频率的频率派视角,本讲的关键概念包括: @@ -66,7 +66,7 @@ translation: - 频率派统计检验的**检验效能** - 频率派统计检验的**显著性水平** - 统计检验的**临界区域** -- **一致最优检验** +- **最优检验** - 大数定律(LLN)在解释频率统计检验的**功效**和**规模**中的作用 - 亚伯拉罕·瓦尔德的**序贯概率比检验** @@ -83,14 +83,14 @@ plt.rcParams['font.family'] = ['Source Han Serif SC'] from numba import njit, prange, vectorize, jit from numba.experimental import jitclass from math import gamma -from scipy.integrate import quad +from scipy.special import betaln, digamma from scipy.stats import beta from collections import namedtuple import pandas as pd import scipy as sp ``` -本讲座运用了{doc}`似然比过程讲座`和{doc}`贝叶斯学习讲座`中研究的概念。 +本讲座运用了 {doc}`似然比过程讲座` 和 {doc}`贝叶斯学习讲座` 中研究的概念。 ## 问题的来源 @@ -116,9 +116,9 @@ Friedman和Wallis研究了这个问题一段时间但没有完全解决它。 ## Neyman-Pearson公式 -从描述美国海军告诉G. S. Schuyler上尉使用的测试背后的理论开始会很有帮助。 +从描述美国海军告诉Garret L. Schuyler上尉使用的测试背后的理论开始会很有帮助。 -Schuyler上尉的疑虑促使他向Milton Friedman和Allen Wallis表达了他的推测,即存在更好的实践程序。 +Schuyler上尉的疑虑促使他向Milton Friedman和Allen Wallis表达了他的推测,即存在更好的实践程序。 显然,海军当时要求Schuyler上校使用当时最先进的Neyman-Pearson假设检验。 @@ -156,7 +156,7 @@ Wald将问题框定为对部分已知的概率分布做出决策。 > Neyman和Pearson提出了以下选择临界区域的考虑因素:在接受或拒绝$H_0$时, > 我们可能犯两种错误。当$H_0$为真而我们拒绝它时,我们犯第一类错误;当 > $H_1$为真而我们接受$H_0$时,我们犯第二类错误。在选定特定的临界区域 -> $W$之后,犯第一类错误的概率以及犯第二类错误的概率是唯一确定的。第一类错误的概率等于在假设$H_0$为真的条件下,观察到的样本落入临界区域$W$的概率。第二类错误的概率等于在假设$H_1$为真的条件下,概率落在临界区域$W$之外的概率。对于任何给定的临界区域$W$,我们用$\alpha$表示第一类错误的概率,用$\beta$表示第二类错误的概率。 +> $W$之后,犯第一类错误的概率以及犯第二类错误的概率是唯一确定的。第一类错误的概率等于在假设$H_0$为真的条件下,观察到的样本落入临界区域$W$的概率。第二类错误的概率等于在假设$H_1$为真的条件下,观察到的样本落在临界区域$W$之外的概率。对于任何给定的临界区域$W$,我们用$\alpha$表示第一类错误的概率,用$\beta$表示第二类错误的概率。 让我们仔细听听Wald如何运用大数定律来解释$\alpha$和$\beta$: @@ -181,6 +181,8 @@ Wald总结了Neyman和Pearson的设置如下: Wald继续讨论了Neyman和Pearson的*一致最优势*检验的概念。 +我们的$H_0$和$H_1$各自都指定了单一的分布,因此上述最优势检验就是我们所需要的全部。 + 以下是Wald如何引入序贯检验的概念 > 在实验的任何阶段(对于每个整数值$m$的第$m$次试验),都给出一个规则来做出以下三个决定之一: @@ -207,7 +209,9 @@ $A$和$B$表征了瓦尔德用来确定随机变量$n$作为随机结果函数 我们使用贝塔分布作为例子。 -我们还将使用在 {doc}`divergence_measures` 中介绍的 Jensen-Shannon 散度。 +我们还将使用在 {doc}`divergence_measures` 中介绍的 Kullback-Leibler 散度。 + +对于两个贝塔密度,Kullback-Leibler 散度具有闭式解。 ```{code-cell} ipython3 @vectorize @@ -220,19 +224,11 @@ def create_beta_density(a, b): """创建具有指定参数的贝塔密度函数。""" return jit(lambda x: p(x, a, b)) -def compute_KL(f, g): - """计算KL散度 KL(f, g)""" - integrand = lambda w: f(w) * np.log(f(w) / g(w)) - val, _ = quad(integrand, 1e-5, 1-1e-5) - return val - -def compute_JS(f, g): - """计算Jensen-Shannon散度""" - def m(w): - return 0.5 * (f(w) + g(w)) - - js_div = 0.5 * compute_KL(f, m) + 0.5 * compute_KL(g, m) - return js_div +def compute_KL(a1, b1, a2, b2): + """对于 f = Beta(a1, b1) 和 g = Beta(a2, b2),计算KL散度 KL(f, g)。""" + return (betaln(a2, b2) - betaln(a1, b1) + + (a1 - a2) * digamma(a1) + (b1 - b2) * digamma(b1) + + (a2 - a1 + b2 - b1) * digamma(a1 + b1)) ``` 下图显示了两个贝塔分布 @@ -246,7 +242,7 @@ fig, ax = plt.subplots() ax.plot(grid, f0(grid), lw=2, label="$f_0$") ax.plot(grid, f1(grid), lw=2, label="$f_1$") ax.legend() -ax.set(xlabel="$z$ 值", ylabel="$z_k$ 的概率") +ax.set(xlabel="$z$ 值", ylabel="密度") plt.tight_layout() plt.show() ``` @@ -257,7 +253,7 @@ plt.show() 但是观察者并不知道序列是由这两个分布中的哪一个生成的。 -由[可交换性和贝叶斯更新](https://python.quantecon.org/exchangeable.html)中解释的原因,这意味着观察者认为该序列不是IID的。 +由 {doc}`exchangeable` 中解释的原因,这意味着观察者认为该序列不是IID的。 因此,观察者有需要学习的内容,即观测值是来自$f_0$还是来自$f_1$。 @@ -290,9 +286,11 @@ Wald定义 - $p_{1m} = f_1(z_1) \cdots f_1(z_m)$ - $L_{m} = \frac{p_{1m}}{p_{0m}}$ +对于$m \geq 1$,并设$L_0 = 1$。 + 这里$\{L_m\}_{m=0}^\infty$是一个**似然比过程**。 -Wald的序贯决策规则由实数$B < A$参数化。 +Wald的序贯决策规则由实数$0 < B < 1 < A$参数化。 对于给定的一对$A, B$,决策规则是 @@ -304,6 +302,12 @@ $$ \end{aligned} $$ +```{note} +后续内容 {doc}`wald_friedman_2` 使用$A$和$B$表示后验概率$\pi_k$(即$f = f_1$的后验概率)的阈值,并使用$L_0$和$L_1$表示错误决策所带来的损失。 + +在那里,我们用$\Lambda_k$表示似然比,用$A_\Lambda$和$B_\Lambda$表示与此处瓦尔德的$A$和$B$相对应的似然比阈值。 +``` + 下图说明了Wald程序的各个方面。 ```{figure} /_static/lecture_specific/wald_friedman/wald_dec_rule.png @@ -321,6 +325,32 @@ $$ \end{aligned} $$ +这些不等式源自一种测度变换。 + +设 $P_i$ 和 $E_i$ 分别表示在假设 $f_i$ 生成数据的情况下计算的概率和数学期望。 + +设 $N$ 为检验停止时的随机抽样次数,并假设 $P_0\{N < \infty\} = P_1\{N < \infty\} = 1$。 + +在事件 $\{N = n\}$ 上,因子 $L_n^{-1} = p_{0n}/p_{1n}$ 将 $z_1, \ldots, z_n$ 的联合密度 $p_{1n}$ 转换为联合密度 $p_{0n}$。 + +当 $L_N \geq A$ 时检验拒绝 $H_0$,所以 + +$$ +\alpha = P_0\{L_N \geq A\} = E_1\left[L_N^{-1} \mathbf{1}\{L_N \geq A\}\right] \leq \frac{1}{A} P_1\{L_N \geq A\} = \frac{1-\beta}{A} +$$ + +当 $L_N \leq B$ 时检验接受 $H_0$,所以 + +$$ +\beta = P_1\{L_N \leq B\} = E_0\left[L_N \mathbf{1}\{L_N \leq B\}\right] \leq B \, P_0\{L_N \leq B\} = B (1-\alpha) +$$ + +同样的测度变换也是 {doc}`imp_sample` 中重要性抽样的基础。 + +当 $L_N$ 恰好落在 $A$ 或 $B$ 上时,这两个不等式都取等号。 + +当 $L_N$ 在停止时刻可能跳过 $A$ 或 $B$ 时,这两个不等式则严格成立。 + 他对这些不等式的分析导致Wald推荐以下近似作为设置$A$和$B$的规则,这些规则接近于达到决策者对第I类错误概率$\alpha$和第II类错误概率$\beta$的目标值: $$ @@ -337,12 +367,34 @@ $$ (eq:Waldrule) > $\ldots$ 不会导致 $\alpha$ 或 $\beta$ 的值有任何显著增加。换句话说, > 就实际目的而言,对应于 $A = a(\alpha, \beta), B = b(\alpha,\beta)$ 的检验 > 至少提供了与对应于 $A = A(\alpha, \beta)$ 和 -> $B = b(\alpha, \beta)$ 的检验相同的防错决策保护。 +> $B = B(\alpha, \beta)$ 的检验相同的防错决策保护。 > 因此,使用 $ a(\alpha, \beta), b(\alpha,\beta)$ 而不是 > $ A(\alpha, \beta), B(\alpha,\beta)$ 可能产生的唯一缺点是, > 这可能会导致检验所需的观测数量显著增加。 +Wald的论证如下。 + +设 $\alpha'$ 和 $\beta'$ 是设定 $A = a(\alpha,\beta)$ 和 $B = b(\alpha,\beta)$ 的检验的错误概率。 + +将上述不等式应用于该检验,可得 + +$$ +\frac{\alpha'}{1-\beta'} \leq \frac{\alpha}{1-\beta}, \quad \frac{\beta'}{1-\alpha'} \leq \frac{\beta}{1-\alpha} +$$ + +由此可以推出 + +$$ +\alpha' \leq \frac{\alpha}{1-\beta}, \quad \beta' \leq \frac{\beta}{1-\alpha}, \quad \alpha' + \beta' \leq \alpha + \beta +$$ (eq:Wald_bounds) + +第三个不等式是通过将上述两个不等式交叉相乘并相加得到的。 + +当 $\alpha$ 和 $\beta$ 较小时,$\alpha/(1-\beta)$ 和 $\beta/(1-\alpha)$ 接近于 $\alpha$ 和 $\beta$。 + +只有当 $L_N$ 从不跳过 $A$ 或 $B$ 时,该检验才能达到 $\alpha' = \alpha$ 和 $\beta' = \beta$。 + 我们将编写一些Python代码来帮助我们说明Wald关于 $\alpha$ 和 $\beta$ 如何与表征其序贯概率比检验的参数 $A$ 和 $B$ 相关的论断。 ## 模拟 @@ -482,6 +534,12 @@ print(f"经验第二类错误: {results['type_II']:.3f} (目标 = {params.β})") 正如在上文中 Wald 讨论近似式 {eq}`eq:Waldrule` 中给出的 $a(\alpha, \beta), b(\alpha, \beta)$ 的质量时所预期的那样,我们发现该算法实际上给出了比目标值**更低**的第一类和第二类错误率。 +经验错误率满足Wald的界 {eq}`eq:Wald_bounds`,此处为 $\alpha' \leq 0.05/0.90 \approx 0.056$,$\beta' \leq 0.10/0.95 \approx 0.105$,以及 $\alpha' + \beta' \leq 0.15$。 + +由于 $f_0 = \text{Beta}(2,5)$ 和 $f_1 = \text{Beta}(5,2)$ 相距很远,这些界远不是紧的。 + +单次抽样往往会使 $\log L_m$ 远远超过 $\log A$ 或 $\log B$,而这种超调会使 $\alpha'$ 和 $\beta'$ 低于 $\alpha$ 和 $\beta$。 + ```{note} 关于近似式 {eq}`eq:Waldrule` 质量的最新研究,请参见 {cite}`fischer2024improving`。 ``` @@ -491,13 +549,6 @@ print(f"经验第二类错误: {results['type_II']:.3f} (目标 = {params.β})") ```{code-cell} ipython3 :tags: [hide-input] -@njit -def compute_wald_thresholds(α, β): - """计算 Wald 推荐的阈值。""" - A = (1 - β) / α - B = β / (1 - α) - return A, B, np.log(A), np.log(B) - def plot_sprt_results(results, params, title=""): """绘制 SPRT 结果。""" fig, axes = plt.subplots(1, 3, figsize=(20, 6)) @@ -522,7 +573,7 @@ def plot_sprt_results(results, params, title=""): # 停止时间 max_n = min(results['stopping_times'].max(), 101) - bins = np.arange(1, max_n) - 0.5 + bins = np.arange(1, max_n + 2) - 0.5 axes[1].hist(results['stopping_times'], bins=bins, color="steelblue", alpha=0.8, edgecolor="black") axes[1].set_title(f'stopping times (μ={results["stopping_times"].mean():.1f})', @@ -573,7 +624,7 @@ def plot_confusion_matrix(results, ax): plot_sprt_results(results, params) ``` -在这个例子中,停止时间保持在10以下。 +在这个例子中,停止时间从未超过10,平均停止时间为1.59。 我们可以构建一个$2 \times 2$的"混淆矩阵",其对角线元素统计了Wald决策规则正确接受和正确拒绝原假设的次数。 @@ -619,75 +670,119 @@ plot_sprt_results(results_3, params_3) 当两个分布"相近"时,判断哪个分布在产生数据应该需要更长时间。 -我们很容易想到将这种模式与我们在{doc}`likelihood_ratio_process`中讨论的[Kullback–Leibler散度](rel_entropy)联系起来。 +{doc}`divergence_measures` 中描述的[Kullback–Leibler散度](rel_entropy)衡量了两个分布相距多远。 -虽然当两个分布差异更大时KL散度更大,但KL散度并不是对称的,这意味着分布$f$相对于分布$g$的KL散度不一定等于$g$相对于$f$的KL散度。 +Wald将其与他的检验所需的预期抽样次数联系起来。 -如果我们想要一个真正具有度量性质的对称散度,我们可以使用[Jensen-Shannon距离](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.jensenshannon.html)。 +在 $H_0$ 下,$\log L_N = \sum_{i=1}^N \log \frac{f_1(z_i)}{f_0(z_i)}$ 是随机数量 $N$ 个独立同分布项的和,每一项的均值为 $E_0 \log \frac{f_1(z)}{f_0(z)} = -KL(f_0, f_1)$。 -这就是我们现在要做的。 +在 $H_1$ 下,每一项的均值为 $E_1 \log \frac{f_1(z)}{f_0(z)} = KL(f_1, f_0)$。 -我们将计算Jensen-Shannon距离,并绘制它与平均停止时间的关系图。 +由于 $N$ 是一个均值有限的停止时间,**Wald等式**给出 + +$$ +E_0 [\log L_N] = - E_0[N] \, KL(f_0, f_1), \qquad E_1 [\log L_N] = E_1[N] \, KL(f_1, f_0) +$$ (eq:Wald_identity) + +{doc}`likelihood_ratio_process` 中的{ref}`这一节 ` 描述了KL散度与固定抽样次数下预期对数似然比之间的联系。 + +Wald忽略了超调:当检验拒绝 $H_0$ 时,他用 $\log A$ 近似 $\log L_N$;当检验接受 $H_0$ 时,他用 $\log B$ 近似 $\log L_N$。 + +在{eq}`eq:Wald_identity`中设 $P_0\{L_N \geq A\} \approx \alpha$ 和 $P_1\{L_N \leq B\} \approx \beta$,就得到了Wald对**平均样本数**的近似 + +$$ +E_0[N] \approx \frac{(1-\alpha)\log(1/B) - \alpha \log A}{KL(f_0, f_1)}, \qquad +E_1[N] \approx \frac{(1-\beta)\log A - \beta \log(1/B)}{KL(f_1, f_0)} +$$ (eq:ASN) + +KL散度不是对称的,所以{eq}`eq:ASN`在 $H_0$ 下除以 $KL(f_0, f_1)$,而在 $H_1$ 下除以 $KL(f_1, f_0)$。 + +在下面的实验中,$f_0 = \text{Beta}(a, b)$ 且 $f_1 = \text{Beta}(b, a)$,因此 $f_1(z) = f_0(1-z)$ 且 $KL(f_0, f_1) = KL(f_1, f_0)$。 + +我们一半的重复从 $f_0$ 中抽样,另一半从 $f_1$ 中抽样,因此{eq}`eq:ASN`使平均停止时间与 $1/KL(f_0, f_1)$ 成正比。 + +我们计算100对这样的分布对的 $KL(f_0, f_1)$ 和平均停止时间,并将平均停止时间与{eq}`eq:ASN`进行比较。 ```{code-cell} ipython3 -def js_dist(a0, b0, a1, b1): - """Jensen–Shannon距离""" - f0 = create_beta_density(a0, b0) - f1 = create_beta_density(a1, b1) - - # 混合 - m = lambda w: 0.5*(f0(w) + f1(w)) - return np.sqrt(0.5*compute_KL(m, f0) + 0.5*compute_KL(m, f1)) - def generate_β_pairs(N=100, T=10.0, d_min=0.5, d_max=9.5): ds = np.linspace(d_min, d_max, N) a0 = (T - ds) / 2 b0 = (T + ds) / 2 return list(zip(a0, b0, b0, a0)) +def wald_asn(α, β, KL_01, KL_10): + """Wald对E_0[N]和E_1[N]的近似。""" + A, B, logA, logB = compute_wald_thresholds(α, β) + E0_N = ((1 - α) * (-logB) - α * logA) / KL_01 + E1_N = ((1 - β) * logA - β * (-logB)) / KL_10 + return E0_N, E1_N + param_comb = generate_β_pairs() -# 为每个参数组合运行模拟 -js_dists = [] +KL_divs = [] mean_stopping_times = [] +asn_approx = [] param_list = [] for a0, b0, a1, b1 in param_comb: - # 计算KL散度 - js_div = js_dist(a1, b1, a0, b0) + KL_01 = compute_KL(a0, b0, a1, b1) + KL_10 = compute_KL(a1, b1, a0, b0) - # 用固定参数集运行SPRT模拟 - params = SPRTParams(α=0.05, β=0.10, a0=a0, b0=b0, - a1=a1, b1=b1, N=5000, seed=42) - results = run_sprt(params) + params_d = SPRTParams(α=0.05, β=0.10, a0=a0, b0=b0, + a1=a1, b1=b1, N=5000, seed=42) + results_d = run_sprt(params_d) + E0_N, E1_N = wald_asn(params_d.α, params_d.β, KL_01, KL_10) - js_dists.append(js_div) - mean_stopping_times.append(results['stopping_times'].mean()) + KL_divs.append(KL_01) + mean_stopping_times.append(results_d['stopping_times'].mean()) + asn_approx.append(0.5 * (E0_N + E1_N)) param_list.append((a0, b0, a1, b1)) -# 创建图表 -fig, ax = plt.subplots() - -scatter = ax.scatter(js_dists, mean_stopping_times, - s=80, alpha=0.7, linewidth=0.5) - -ax.set_xlabel('Jensen–Shannon距离', fontsize=14) -ax.set_ylabel('平均停止时间', fontsize=14) +KL_divs = np.array(KL_divs) +mean_stopping_times = np.array(mean_stopping_times) +asn_approx = np.array(asn_approx) +fig, ax = plt.subplots() +ax.scatter(KL_divs, mean_stopping_times, s=40, alpha=0.7, + label='simulated mean stopping time') +ax.plot(KL_divs, asn_approx, color='C1', lw=2, + label="Wald's approximation") +ax.axhline(1, color='black', linestyle='--', lw=1, label='$N = 1$') +ax.set_xscale('log') +ax.set_yscale('log') +ax.set_xlabel('$KL(f_0, f_1)$', fontsize=14) +ax.set_ylabel('mean stopping time', fontsize=14) +ax.legend() plt.tight_layout() plt.show() + +ratio = mean_stopping_times / asn_approx +print(f"corr(mean stopping time, 1/KL) = " + f"{np.corrcoef(mean_stopping_times, 1 / KL_divs)[0, 1]:.4f}") +print(f"simulated / approximate mean stopping time: " + f"{ratio.min():.2f} (closest pair) to {ratio.max():.1f} (farthest pair)") ``` -该图显示了相对熵与平均停止时间之间存在明显的负相关关系。 +在对数坐标下,Wald的近似是一条斜率为 $-1$ 的直线。 + +在这100对分布中,平均停止时间与 $1/KL(f_0, f_1)$ 之间的相关系数为0.9999。 + +平均停止时间接近于 $1/KL(f_0, f_1)$ 的线性函数。 + +模拟得到的平均停止时间高于Wald近似值,原因有两个。 + +超调使得 $|\log L_N|$ 比 $\log A$ 或 $\log(1/B)$ 更大,因此根据{eq}`eq:Wald_identity`,它使 $E_0[N]$ 和 $E_1[N]$ 比{eq}`eq:ASN`更大。 -随着Jensen-Shannon散度的增加(分布之间的差异增大),平均停止时间呈指数下降。 +检验至少需要一次抽样,因此平均停止时间不能低于1,而{eq}`eq:ASN`在 $KL(f_0, f_1)$ 增大时趋于零。 + +{ref}`wald_friedman_ex4` 要求你研究这两个差异来源。 以下是我们上述实验的采样示例 ```{code-cell} ipython3 -def plot_beta_distributions_grid(param_list, js_dists, mean_stopping_times, +def plot_beta_distributions_grid(param_list, KL_divs, mean_stopping_times, selected_indices=None): - """绘制贝塔分布网格,包含JS距离和停止时间。""" + """绘制贝塔分布网格,包含KL散度和停止时间。""" if selected_indices is None: selected_indices = [0, len(param_list)//6, len(param_list)//3, len(param_list)//2, 2*len(param_list)//3, -1] @@ -708,7 +803,7 @@ def plot_beta_distributions_grid(param_list, js_dists, mean_stopping_times, np.minimum(f0(z_grid), f1(z_grid)), alpha=0.3, color='purple') - axes[row, col].set_title(f'JS距离: {js_dists[idx]:.3f}' + axes[row, col].set_title(f'KL散度: {KL_divs[idx]:.3f}' f'\n平均时间: {mean_stopping_times[idx]:.1f}', fontsize=12) axes[row, col].set_xlabel('z', fontsize=10) @@ -719,10 +814,10 @@ def plot_beta_distributions_grid(param_list, js_dists, mean_stopping_times, plt.tight_layout() plt.show() -plot_beta_distributions_grid(param_list, js_dists, mean_stopping_times) +plot_beta_distributions_grid(param_list, KL_divs, mean_stopping_times) ``` -再次发现,当分布之间的差异越大(用Jensen-Shannon距离衡量),停止时间就越短。 +再次发现,当分布之间的差异越大(用KL散度衡量),停止时间就越短。 让我们可视化单个似然比过程,看看它们是如何向决策边界演变的。 @@ -888,7 +983,7 @@ df 这增加了第二类错误的概率。 -表格证实了这种直觉:当$A$减小且$B$增加超出其最优Wald值时,第一类和第二类错误率都会增加,而平均停止时间会减少。 +表格证实了这种直觉:当 $A$ 减小且 $B$ 增加超出 Wald 的近似值 {eq}`eq:Waldrule` 时,第一类和第二类错误率都会增加,而平均停止时间会减少。 ## 相关讲座 @@ -902,7 +997,7 @@ df ## 练习 -在下面的两个练习中,请尝试重写本讲座中的整个SPRT套件。 +在下面的前两个练习中,请尝试重写本讲座中的整个SPRT套件。 ```{exercise} :label: wald_friedman_ex1 @@ -1111,7 +1206,7 @@ $$ 任务: 1. 使用VAR讲座中的函数实现VAR似然比 2. 实现Wald的序贯检验,其中 $\alpha = 0.05$ 且 $\beta = 0.10$ -3. 分析在两个假设下以及模型错误设定情况下的表现 +3. 分析在两个假设下以及当第三个VAR(1)模型生成数据从而导致模型错误设定情况下的表现 4. 在停止时间和准确性方面与马尔可夫链情况进行比较 ``` @@ -1262,5 +1357,284 @@ plt.tight_layout() plt.show() ``` +两个检验的经验错误率都保持在目标值以下,而且VAR检验比马尔可夫链检验停止得更快。 + +现在我们转向模型错误设定的问题。 + +假设有一个具有如下参数的第三个VAR(1)模型$h$: + +$$ +A^{(h)} = (1-\lambda) A^{(0)} + \lambda A^{(1)}, \quad C^{(h)} = (1-\lambda) C^{(0)} + \lambda C^{(1)}, \quad \lambda \in [0, 1] +$$ + +生成了数据。 + +设$f_i(x_{t+1} | x_t)$为模型$i$的条件密度。 + +在$h$下,$\log L_t$每期的期望增量为 + +$$ +E_h\left[\log \frac{f_1(x_{t+1} | x_t)}{f_0(x_{t+1} | x_t)}\right] = KL(h, f_0) - KL(h, f_1) +$$ + +其中$KL(h, f_i)$是$f_i(\cdot | x_t)$相对于$h$的条件密度的KL散度,并在$h$下$x_t$的平稳分布上求平均。 + +这是{doc}`likelihood_ratio_process`中{ref}`本节 `里的公式,应用于条件密度的情形。 + +当$KL(h, f_0) > KL(h, f_1)$时,$\log L_t$向上漂移,检验倾向于拒绝$H_0$。 + +当$KL(h, f_0) < KL(h, f_1)$时,$\log L_t$向下漂移,检验倾向于接受$H_0$。 + +无论哪种情况,检验都倾向于选择在KL散度意义上更接近$h$的模型。 + +设$\Sigma_i = C^{(i)} C^{(i)\top}$,并设$V_h$为$h$下$x_t$的平稳协方差矩阵。 + +对于我们的高斯模型, + +$$ +E_h[\log f_i(x_{t+1} | x_t)] = -\frac{1}{2}\left[ 2 \log 2\pi + \log\det \Sigma_i + \operatorname{tr}(\Sigma_i^{-1} \Sigma_h) + \operatorname{tr}\left((A^{(h)} - A^{(i)})^\top \Sigma_i^{-1} (A^{(h)} - A^{(i)}) V_h\right) \right] +$$ + +下面的代码用这个公式计算$KL(h, f_0) - KL(h, f_1)$,并对若干$\lambda$值在由$h$生成的1000条路径上运行该检验。 + +```{code-cell} ipython3 +def var_drift(A_h, C_h, model_0, model_1): + """在h的平稳律下,每期的KL(h, f_0) - KL(h, f_1)。""" + n = A_h.shape[0] + Σ_h = C_h @ C_h.T + V_h = sp.linalg.solve_discrete_lyapunov(A_h, Σ_h) + + def expected_loglik(model): + D = A_h - model['A'] + quad_form = (np.trace(model['CC_inv'] @ Σ_h) + + np.trace(D.T @ model['CC_inv'] @ D @ V_h)) + return -0.5 * (n * np.log(2 * np.pi) + model['log_det_CC'] + + quad_form) + + return expected_loglik(model_1) - expected_loglik(model_0) + +model_0 = create_var_model(A_0, C_0) +model_1 = create_var_model(A_1, C_1) +_, _, logA, logB = compute_wald_thresholds(0.05, 0.10) + +rows = [] +for λ in [0.0, 0.25, 0.4, 0.5, 0.75, 1.0]: + A_h = (1 - λ) * A_0 + λ * A_1 + C_h = (1 - λ) * C_0 + λ * C_1 + model_h = create_var_model(A_h, C_h) + runs = [var_sprt_single_run(model_0, model_1, model_h, + logA, logB, 42 + i) + for i in range(1000)] + n_stop = np.array([run[0] for run in runs]) + accept_h0 = np.array([run[1] for run in runs]) + rows.append([λ, var_drift(A_h, C_h, model_0, model_1), + 1 - accept_h0.mean(), n_stop.mean()]) + +df_misspec = pd.DataFrame(rows, columns=['λ', 'KL(h,f0) - KL(h,f1)', + 'share rejecting H0', + 'mean stop time']) +df_misspec.set_index('λ').round(3) +``` + +在$\lambda = 0$和$\lambda = 1$时,$h$与两个模型之一重合。 + +随着$\lambda$的增加,$KL(h, f_0) - KL(h, f_1)$上升,并在$\lambda = 0.25$与$\lambda = 0.4$之间变号;拒绝$H_0$的运行比例也随之上升。 + +在符号变化附近,$\log L_t$几乎没有漂移,检验所需的抽样次数最多。 + +一个步长很小的无漂移随机游走,在到达$\log B$之前先到达$\log A$的概率接近$\log(1/B)/(\log A - \log B) = 0.44$,这与$\lambda = 0.4$时拒绝$H_0$的运行比例相近。 + +```{solution-end} +``` + + +```{exercise} +:label: wald_friedman_ex3 + +{cite:t}`WaldWolfowitz1948`证明了,在所有I类和II类错误概率不超过某个SPRT对应值的检验(无论是否为序贯检验)中,该SPRT同时最小化了$E_0[N]$和$E_1[N]$。 + +本练习将SPRT与海军要求Schuyler船长使用的固定样本奈曼-皮尔逊检验进行比较。 + +使用我们上面针对$f_0 = \text{Beta}(4, 5)$和$f_1 = \text{Beta}(5, 4)$计算得到的`results_2`。 + +1. 计算SPRT的经验错误概率$\hat \alpha$和$\hat \beta$,以及它在$f_0$和$f_1$下的平均停止时间。 +2. 对于每个$n = 1, \ldots, 40$,基于固定的$n$次抽样构造大小为$\hat \alpha$的最优势检验,并计算其II类错误概率$\beta(n)$。 +3. 找出满足$\beta(n) \leq \hat \beta$的最小$n$,并将其与SPRT的平均停止时间进行比较。 + +提示:对于这两个密度,$\log \left( f_1(z)/f_0(z) \right) = \log \left( z/(1-z) \right)$。 +``` + +```{solution-start} wald_friedman_ex3 +:class: dropdown +``` + +根据奈曼-皮尔逊引理,基于$n$次抽样的最优势检验在$S_n = \sum_{i=1}^n \log \left( f_1(z_i)/f_0(z_i) \right) \geq k_n$时拒绝$H_0$,其中$k_n$使得$P_0\{S_n \geq k_n\} = \hat \alpha$。 + +我们通过蒙特卡洛方法计算$S_n$在$f_0$和$f_1$下的分布。 + +```{code-cell} ipython3 +truth_h0 = results_2['truth_h0'] +stops = results_2['stopping_times'] +α_hat, β_hat = results_2['type_I'], results_2['type_II'] +E0_N_sprt = stops[truth_h0].mean() +E1_N_sprt = stops[~truth_h0].mean() + +print(f"SPRT: α̂ = {α_hat:.3f}, β̂ = {β_hat:.3f}, " + f"E_0[N] = {E0_N_sprt:.1f}, E_1[N] = {E1_N_sprt:.1f}") + +rng = np.random.default_rng(1234) +M, n_max = 100_000, 40 + +def llr_partial_sums(a, b): + """S_n = sum of log(f_1/f_0)的路径,n = 1, ..., n_max。""" + z = rng.beta(a, b, size=(M, n_max)) + return np.cumsum(np.log(z / (1 - z)), axis=1) + +S0 = llr_partial_sums(params_2.a0, params_2.b0) +S1 = llr_partial_sums(params_2.a1, params_2.b1) + +ns = np.arange(1, n_max + 1) +k_n = np.quantile(S0, 1 - α_hat, axis=0) # 临界值 +β_n = (S1 < k_n).mean(axis=0) # II类错误概率 +n_star = ns[np.argmax(β_n <= β_hat)] + +print(f"满足β(n) <= β̂的最小固定n: {n_star}") + +fig, ax = plt.subplots() +ax.plot(ns, β_n, 'o-', lw=2, label=r'固定样本检验: $\beta(n)$') +ax.axhline(β_hat, color='C1', linestyle='--', label=r'SPRT: $\hat\beta$') +ax.axvline(E0_N_sprt, color='C2', linestyle=':', label='SPRT: $E_0[N]$') +ax.axvline(E1_N_sprt, color='C3', linestyle=':', label='SPRT: $E_1[N]$') +ax.set_xlabel('$n$') +ax.set_ylabel('II类错误概率') +ax.legend() +plt.tight_layout() +plt.show() +``` + +要达到SPRT的错误概率,固定样本检验需要23次抽样。 + +而SPRT在$f_0$下平均需要10.1次抽样,在$f_1$下平均需要12.0次。 + +平均而言,在$f_0$下SPRT使用的抽样次数仅为固定样本检验的44%,在$f_1$下为52%。 + +Wald和Wolfowitz的定理表明,在错误概率不超过$\hat \alpha$和$\hat \beta$的所有检验中,没有任何检验在这两方面都能做得更好。 + +```{solution-end} +``` + + +```{exercise} +:label: wald_friedman_ex4 + +Wald的近似{eq}`eq:ASN`忽略了超调量,也忽略了$N \geq 1$这一事实。 + +1. 修改`sprt_single_run`,使其同时返回$\log L_N$。 +2. 对于`generate_β_pairs`生成的每隔五个贝塔分布参数对,在$f_0$下模拟50000次重复,在$f_1$下也模拟50000次重复,并估计$E_0[N]$、$E_1[N]$、$E_0[\log L_N]$和$E_1[\log L_N]$。 +3. 验证Wald等式{eq}`eq:Wald_identity`。 +4. 绘制模拟得到的$E_0[N]$和$E_1[N]$与Wald近似{eq}`eq:ASN`之比随$KL(f_0, f_1)$变化的图形,并解释其中的规律。 +``` + +```{solution-start} wald_friedman_ex4 +:class: dropdown +``` + +我们使用对数密度进行计算,以避免当某个形状参数较小时出现下溢。 + +```{code-cell} ipython3 +from math import lgamma + +@njit +def log_p(z, a, b): + """贝塔密度的对数。""" + return (lgamma(a + b) - lgamma(a) - lgamma(b) + + (a - 1) * np.log(z) + (b - 1) * np.log(1 - z)) + +@njit +def sprt_single_run_log_L(a0, b0, a1, b1, logA, logB, true_f0, seed): + """运行单次SPRT并返回N和log L_N。""" + log_L = 0.0 + n = 0 + np.random.seed(seed) + + while True: + z = np.random.beta(a0, b0) if true_f0 else np.random.beta(a1, b1) + n += 1 + log_L += log_p(z, a1, b1) - log_p(z, a0, b0) + if log_L >= logA or log_L <= logB: + return n, log_L + +@njit(parallel=True) +def simulate_N_log_L(a0, b0, a1, b1, α, β, M, true_f0, seed): + """从某一假设下M次重复中得到的N和log L_N的抽样。""" + A, B, logA, logB = compute_wald_thresholds(α, β) + N_draws = np.empty(M) + log_L_draws = np.empty(M) + for i in prange(M): + n, log_L = sprt_single_run_log_L(a0, b0, a1, b1, + logA, logB, true_f0, seed + i) + N_draws[i] = n + log_L_draws[i] = log_L + return N_draws, log_L_draws + +def t_stat(d): + """d的样本均值除以其标准误。""" + return d.mean() / (d.std() / np.sqrt(len(d))) + +α, β, M = 0.05, 0.10, 50_000 +rows, t_stats = [], [] +for a0, b0, a1, b1 in param_comb[::5]: + KL_01 = compute_KL(a0, b0, a1, b1) + KL_10 = compute_KL(a1, b1, a0, b0) + N0, log_L0 = simulate_N_log_L(a0, b0, a1, b1, α, β, M, True, 0) + N1, log_L1 = simulate_N_log_L(a0, b0, a1, b1, α, β, M, False, M) + E0_N_asn, E1_N_asn = wald_asn(α, β, KL_01, KL_10) + rows.append([KL_01, N0.mean(), -log_L0.mean() / KL_01, E0_N_asn, + N1.mean(), log_L1.mean() / KL_10, E1_N_asn]) + # Wald等式说明这些差值的均值为零 + t_stats += [t_stat(N0 + log_L0 / KL_01), t_stat(N1 - log_L1 / KL_10)] + +cols = ['KL', 'E0_N', 'E0_N_identity', 'E0_N_asn', + 'E1_N', 'E1_N_identity', 'E1_N_asn'] +df_asn = pd.DataFrame(rows, columns=cols) + +print(f"在{len(t_stats)}次检验中,Wald等式的最大|t|统计量为: " + f"{np.max(np.abs(t_stats)):.2f}") + +fig, ax = plt.subplots() +ax.plot(df_asn['KL'], df_asn['E0_N'] / df_asn['E0_N_asn'], 'o-', lw=2, + label=r'$E_0[N]$ / 近似值') +ax.plot(df_asn['KL'], df_asn['E1_N'] / df_asn['E1_N_asn'], 's-', lw=2, + label=r'$E_1[N]$ / 近似值') +ax.axhline(1, color='black', linestyle='--', lw=1) +ax.set_xscale('log') +ax.set_yscale('log') +ax.set_xlabel('$KL(f_0, f_1)$') +ax.set_ylabel('模拟值 / 近似值') +ax.legend() +plt.tight_layout() +plt.show() + +df_asn.iloc[[0, 5, 10, 15, 19]].round(3) +``` + +`E0_N_identity`和`E1_N_identity`这两列是根据模拟得到的$E_i[\log L_N]$以及{eq}`eq:Wald_identity`计算出的$E_0[N]$和$E_1[N]$。 + +它们在蒙特卡洛误差范围内与直接估计值一致:40个$t$统计量中绝对值最大的为1.61。 + +因此,模拟得到的$E_i[N]$与{eq}`eq:ASN`之间的全部差距都来自Wald对$E_i[\log L_N]$的近似,该近似忽略了超调量。 + +在停止时刻,$\log L_N$已经越过了它所穿越的那个阈值。 + +超调量还会使实际错误概率低于$\alpha$和$\beta$。 + +这两种效应都使得$|E_i[\log L_N]|$比Wald近似赋予它的值更大,因此{eq}`eq:ASN`低估了$E_i[N]$。 + +对于最接近的那对参数,每次抽样对$\log L_m$的影响都很小,超调量相对于$\log A$和$\log(1/B)$来说很小,此时比值约为1.1。 + +随着$KL(f_0, f_1)$增大,单次抽样常常会使$\log L_m$移动的幅度超过$\log B$与$\log A$之间的距离。 + +此时检验在一两次抽样后就会停止,超调量占主导地位,而由于$N \geq 1$,{eq}`eq:ASN`趋于零,因此该比值会不断增大。 + ```{solution-end} ``` diff --git a/lectures/wald_friedman_2.md b/lectures/wald_friedman_2.md index 2403b93a..9cf39070 100644 --- a/lectures/wald_friedman_2.md +++ b/lectures/wald_friedman_2.md @@ -21,8 +21,10 @@ translation: Implementation: 实现 Analysis: 分析 Analysis::Cost Function: 成本函数 + Analysis::The Bayesian rule is a sequential probability ratio test: 贝叶斯规则是一种序贯概率比检验 Analysis::Simulations: 模拟 Analysis::Comparative Statics: 比较静态分析 + Exercises: 练习 --- (wald_friedman_2)= @@ -51,6 +53,12 @@ translation: ```{note} 瓦尔德将问题顺序化的想法与理查德·贝尔曼在1950年代发展的**动态规划**建立了联系。 + +{cite:t}`ArrowBlackwellGirshick1949` 通过反向归纳法计算了序贯决策问题的贝叶斯解,这预示了贝尔曼的方法。 + +{cite:t}`WaldWolfowitz1948` 利用贝叶斯解证明了瓦尔德的序贯概率比检验是最优的。 + +{ref}`下面的一节 ` 表明本讲座中研究的贝叶斯决策规则正是一种序贯概率比检验。 ``` 正如我们在{doc}`prob_matrix`和{doc}`prob_meaning`中所学到的,频率学派统计学家将概率分布视为从已知概率分布中进行大量独立同分布抽样时所构建的统计量的相对频率的度量。 @@ -84,7 +92,7 @@ translation: - Abraham Wald的**序贯概率比检验** - 统计检验的**检验力** - 统计检验的**临界区域** -- **一致最优检验** +- **最优检验** 在这个问题的贝叶斯重构讲座中,还包含以下额外概念: - 模型 $f_1$ 生成数据的初始先验概率 $\pi_{-1}$ @@ -96,6 +104,10 @@ translation: 本讲座使用了在 {doc}`似然比过程`、{doc}`它们在贝叶斯学习中的作用` 和 {doc}`这个关于可交换性的讲座` 中研究的概念。 +{doc}`blackwell_kihlstrom` 研究了一个互补的问题:如何根据信息量对实验进行排序。 + +而在本讲中,实验是固定的,决策者选择的是何时停止从中抽样。 + 让我们从一些导入开始: @@ -114,7 +126,7 @@ from math import gamma ## 动态规划方法 -以下对问题的介绍主要遵循Dmitri Bertsekas在**动态规划与随机控制**{cite}`Bertsekas75`中的处理方式。 +以下对问题的介绍主要遵循Dimitri Bertsekas在**动态规划与随机控制**{cite}`Bertsekas75`中的处理方式。 决策者可以观察到一个随机变量$z$的一系列抽样。 @@ -126,7 +138,7 @@ from math import gamma 但观察者并不知道是哪个分布生成了这个序列。 -由[可交换性和贝叶斯更新](https://python.quantecon.org/exchangeable.html)中解释的原因,这意味着该序列不是IID的。 +由 {doc}`exchangeable` 中解释的原因,这意味着该序列不是IID的。 观察者有需要学习的东西,即观察值是从$f_0$还是从$f_1$中抽取的。 @@ -204,7 +216,7 @@ for π in 0.25, 0.5, 0.75: for ax in axes: ax.legend() - ax.set(xlabel="$z$ values", ylabel="probability of $z_k$") + ax.set(xlabel="$z$ values", ylabel="density") plt.tight_layout() plt.show() @@ -310,16 +322,16 @@ J(\pi) = - $(1-\pi) L_1$ 是接受 $f_1$ 的预期损失(即犯第I类错误的成本)。 - $h(\pi) := c + \mathbb E [J(\pi')]$;这是继续值;即与再抽取一个 $z$ 相关的预期成本。 -最优决策规则由两个数 $A, B \in (0,1) \times (0,1)$ 来表征,满足 +最优决策规则由两个数 $0 < B \leq A < 1$ 来表征,满足 $$ -\pi L_0 < \min \{ (1-\pi) L_1, c + \mathbb E [J(\pi')] \} \textrm { if } \pi \leq B +\pi L_0 \leq \min \{ (1-\pi) L_1, c + \mathbb E [J(\pi')] \} \textrm { if } \pi \leq B $$ 和 $$ -(1- \pi) L_1 < \min \{ \pi L_0, c + \mathbb E [J(\pi')] \} \textrm { if } \pi \geq A +(1- \pi) L_1 \leq \min \{ \pi L_0, c + \mathbb E [J(\pi')] \} \textrm { if } \pi \geq A $$ 则最优决策规则为 @@ -332,6 +344,38 @@ $$ \end{aligned} $$ +这一规则的双阈值形式来自 $h$ 以及停止损失 $S(\pi) = \min \{ \pi L_0, (1-\pi) L_1 \}$ 的三个性质。 + +首先,$h(0) = h(1) = c$。 + +当 $\pi \in \{0, 1\}$ 时,贝叶斯法则设定 $\pi' = \pi$,且 $J(0) = J(1) = 0$。 + +其次,$h$ 是凹函数。 + +将 $\mathbb E [J(\pi')]$ 写为 $\int f_\pi(z') J \left( \pi f_1(z') / f_\pi(z') \right) dz'$。 + +对每个 $z'$,被积函数是 $J$ 在 $x = \pi f_1(z')$ 和 $t = f_\pi(z')$ 处的透视函数 $t J(x/t)$,而 $x$ 和 $t$ 都是 $\pi$ 的线性函数。 + +凹函数的透视函数仍是凹的,因此只要 $J$ 是凹的,$\mathbb E [J(\pi')]$ 就是 $\pi$ 的凹函数。 + +$J$ 是 $h$ 与两个线性函数的最小值,因此只要 $h$ 是凹的,$J$ 也是凹的。 + +因此下面定义的算子 $Q$ 将凹函数映射为凹函数,而其不动点 $h$(从 $h = 0$ 开始的迭代序列的极限)是凹的。 + +第三,$S$ 在 $\hat \pi = L_1/(L_0 + L_1)$ 两侧各自都是线性的。 + +在 $[0, \hat \pi]$ 上,当 $\pi L_0 - h(\pi) \leq 0$ 时,接受 $f_0$ 是最优的。 + +函数 $\pi L_0 - h(\pi)$ 是凸函数,且在 $\pi = 0$ 处等于 $-c < 0$,因此这个集合是一个区间 $[0, B]$,其中 $B > 0$。 + +在 $[\hat \pi, 1]$ 上,将同样的论证应用于 $(1-\pi) L_1 - h(\pi)$,可得到一个区间 $[A, 1]$,其中 $A < 1$,在该区间上接受 $f_1$ 是最优的。 + +决策者在二者之间的区间 $(B, A)$ 上再次抽样。 + +当 $h(\hat \pi) \geq S(\hat \pi)$ 时,该区间为空,且 $B = A = \hat \pi$。 + +由于 $h \geq c$,只要 $c \geq L_0 L_1/(L_0 + L_1)$,这种情况就会发生。 + 我们的目标是计算成本函数 $J$ 以及相关的临界值 $A$ 和 $B$。 为了使我们的计算更易于管理,我们可以使用 {eq}`optdec` 将继续成本 $h(\pi)$ 写为 @@ -372,6 +416,16 @@ Q h(\pi) = c + \int \min \{ \kappa(z', \pi) L_0, (1 - \kappa(z', \pi) ) L_1, h(\kappa(z', \pi) ) \} f_\pi (z') dz' $$ +算子 $Q$ 是单调的:$h \leq g$ 意味着 $Q h \leq Q g$。 + +决策者不对未来的损失进行贴现,因此 $Q$ 在上确界范数下不是压缩映射。 + +我们从 $h = 0$ 开始。 + +那么 $Q h \geq h$,而单调性使得迭代序列 $Q^n h$ 随 $n$ 增大而增大。 + +这些迭代以 $c + L_0 L_1/(L_0 + L_1)$ 为上界,因此它们收敛,且其极限正是 {eq}`funceq` 的解。 + ## 实现 首先,我们将构造一个 `jitclass` 来存储模型的参数 @@ -404,7 +458,8 @@ class WaldFriedman: L0=25, L1=25, π_grid_size=200, - mc_size=1000): + mc_size=1000, + seed=1234): self.a0, self.b0 = a0, b0 self.a1, self.b1 = a1, b1 @@ -413,6 +468,7 @@ class WaldFriedman: self.π_grid = np.linspace(0, 1, π_grid_size) self.mc_size = mc_size + np.random.seed(seed) # 用于计算E[J(π')]的蒙特卡洛抽样 self.z0 = np.random.beta(a0, b0, mc_size) self.z1 = np.random.beta(a1, b1, mc_size) @@ -443,7 +499,7 @@ class WaldFriedman: return π_new ``` -如同{doc}`os_stochastic`中所述,为了近似连续的值函数 +如同{doc}`os_stochastic` 中所述,为了近似连续的值函数 * 我们在有限的 $\pi$ 值网格上进行迭代。 * 当我们在网格点之间评估 $\mathbb E[J(\pi')]$ 时,我们使用线性插值。 @@ -520,10 +576,11 @@ def solve_model(wf, tol=1e-4, max_iter=1000): ```{code-cell} ipython3 wf = WaldFriedman() +z_grid = np.linspace(0, 1, 200) fig, ax = plt.subplots(figsize=(10, 6)) -ax.plot(wf.f0(wf.π_grid), label="$f_0$") -ax.plot(wf.f1(wf.π_grid), label="$f_1$") -ax.set(ylabel="$z_k$的概率", xlabel="$z_k$", title="分布") +ax.plot(z_grid, wf.f0(z_grid), label="$f_0$") +ax.plot(z_grid, wf.f1(z_grid), label="$f_1$") +ax.set(ylabel="密度", xlabel="$z$", title="分布") ax.legend() plt.show() @@ -608,19 +665,81 @@ plt.show() 决策者继续采样,直到他对模型$f_1$的概率低于$B$或高于$A$。 +(wald_friedman_2_sprt)= +### 贝叶斯规则是一种序贯概率比检验 + +令 + +$$ +\Lambda_k = \prod_{j=0}^{k} \frac{f_1(z_j)}{f_0(z_j)} +$$ + +为经过$k+1$次观测$z_0, \ldots, z_k$后的似然比。 + +我们写作$\Lambda_k$而不是$L_k$,因为在本讲座中$L_0$和$L_1$表示损失。 + +如 {doc}`likelihood_bayes` 中所述,对贝叶斯法则进行迭代,可得 + +$$ +\pi_k = \frac{\pi_{-1} \Lambda_k}{\pi_{-1} \Lambda_k + 1 - \pi_{-1}} +$$ + +后验概率$\pi_k$是$\Lambda_k$的严格递增函数。 + +因此当且仅当$\Lambda_k \geq A_\Lambda$时$\pi_k \geq A$,当且仅当$\Lambda_k \leq B_\Lambda$时$\pi_k \leq B$,其中 + +$$ +A_\Lambda = \frac{1 - \pi_{-1}}{\pi_{-1}} \frac{A}{1 - A}, \qquad +B_\Lambda = \frac{1 - \pi_{-1}}{\pi_{-1}} \frac{B}{1 - B} +$$ (eq:wf2_LR_thresholds) + +贝叶斯决策规则正是 {doc}`wald_friedman` 中沃尔德的序贯概率比检验,其似然比的阈值为$A_\Lambda$和$B_\Lambda$。 + +这些阈值不依赖于$k$,因为$J$和$h$不依赖于时间。 + +{cite:t}`WaldWolfowitz1948` 从相反的方向利用了这种联系。 + +他们证明了每一个序贯概率比检验都是针对这类问题、在适当选取损失和每次抽样成本情况下的贝叶斯规则。 + +他们利用这一事实证明:在具有相同或更小错误概率的所有检验中,没有其他检验能在$f_0$或$f_1$下取得更小的期望抽样次数。 + +{cite:t}`ArrowBlackwellGirshick1949` 刻画了更一般的序贯决策问题的贝叶斯解和极小极大解。 + +对于我们的默认参数以及$\pi_{-1} = 0.5$,阈值为 + +```{code-cell} ipython3 +def LR_thresholds(B, A, π_minus_1=0.5): + """将π上的阈值映射为似然比上的阈值。""" + prior_odds = (1 - π_minus_1) / π_minus_1 + return prior_odds * B / (1 - B), prior_odds * A / (1 - A) + +B_Λ, A_Λ = LR_thresholds(B, A) +print(f"B = {B:.3f}, A = {A:.3f}") +print(f"B_Λ = {B_Λ:.2f}, A_Λ = {A_Λ:.2f}") +``` + +{ref}`wald_friedman_2_ex1` 将该检验的错误概率与 {doc}`wald_friedman` 中沃尔德公式所隐含的错误概率进行了比较。 + ### 模拟 下图显示了决策过程的500次模拟结果。 +在所有500次模拟中,数据均由$f_0$生成,决策者从先验$\pi_{-1} = 0.5$出发。 + 左图是**停止时间**的直方图,即做出决策所需的$z_k$抽样次数。 -平均抽样次数约为6.6。 +平均抽样次数为2.82。 右图是在停止时间时正确决策的比例。 在这种情况下,决策者80%的时间做出正确决策。 ```{code-cell} ipython3 +@jit +def seed_numba(seed): + """为numba编译代码使用的随机数生成器设置种子。""" + np.random.seed(seed) + def simulate(wf, true_dist, h_star, π_0=0.5): """ @@ -649,10 +768,10 @@ def simulate(wf, true_dist, h_star, π_0=0.5): z = f_rvs() t = t + 1 π = κ(z, π) - if π < B: + if π <= B: decision_made = True decision = 0 - elif π > A: + elif π >= A: decision_made = True decision = 1 @@ -670,12 +789,13 @@ def simulate(wf, true_dist, h_star, π_0=0.5): return correct, π, t -def stopping_dist(wf, h_star, ndraws=250, true_dist="f0"): +def stopping_dist(wf, h_star, ndraws=250, true_dist="f0", seed=0): """ 重复模拟以获得做出决策所需时间的分布以及正确决策的频率 """ + seed_numba(seed) tdist = np.empty(ndraws, int) cdist = np.empty(ndraws, bool) @@ -693,15 +813,15 @@ def simulation_plot(wf): fig, ax = plt.subplots(1, 2, figsize=(16, 5)) - ax[0].hist(tdist, bins=np.max(tdist)) + counts, _, _ = ax[0].hist(tdist, bins=np.arange(1, np.max(tdist) + 2) - 0.5) ax[0].set_title(f"在{ndraws}次重复中的停止时间") ax[0].set(xlabel="时间", ylabel="停止次数") - ax[0].annotate(f"平均值 = {np.mean(tdist)}", xy=(max(tdist) / 2, - max(np.histogram(tdist, bins=max(tdist))[0]) / 2)) + ax[0].annotate(f"平均值 = {np.mean(tdist):.2f}", + xy=(max(tdist) / 2, max(counts) / 2)) ax[1].hist(cdist.astype(int), bins=2) ax[1].set_title(f"在{ndraws}次重复中的正确决策") - ax[1].annotate(f"正确率 = {np.mean(cdist)}", + ax[1].annotate(f"正确率 = {100 * np.mean(cdist):.1f}", xy=(0.05, ndraws / 2)) plt.show() @@ -731,13 +851,259 @@ simulation_plot(wf) 当他对两个模型赋予相同权重时,这导致他的预期损失更高。 -为了便于比较静态分析,我们邀请您调整模型参数并研究: +下面的代码计算了当$\pi_{-1} = 0.5$时,在两种$c$值下的$J(0.5)$以及平均抽样次数$\mathbb E[N]$。 + +由于先验对$f_0$和$f_1$赋予相同权重,$\mathbb E[N]$是$f_0$和$f_1$下模拟得到的平均停止时间的平均值。 + +```{code-cell} ipython3 +def J_and_mean_N(c, ndraws=5000): + """当π_{-1} = 0.5时的J(0.5)和平均抽样次数。""" + wf_c = WaldFriedman(c=c) + h_c = solve_model(wf_c) + S = np.minimum(wf_c.π_grid * wf_c.L0, (1 - wf_c.π_grid) * wf_c.L1) + J_half = np.interp(0.5, wf_c.π_grid, np.minimum(S, h_c)) + _, t0 = stopping_dist(wf_c, h_c, ndraws, "f0", seed=1) + _, t1 = stopping_dist(wf_c, h_c, ndraws, "f1", seed=2) + return J_half, 0.5 * (t0.mean() + t1.mean()) + +for c in (1.25, 2.5): + J_half, mean_N = J_and_mean_N(c) + print(f"c = {c}: J(0.5) = {J_half:.2f}, E[N] = {mean_N:.2f}") +``` + +将$c$加倍,$J(0.5)$从7.56升至10.42。 + +包络定理解释了这一增幅的大小。 + +对于一个固定的决策规则,期望损失等于$c \, \mathbb E[N]$加上来自错误决策的期望损失,这是$c$的一个线性函数,斜率为$\mathbb E[N]$。 + +$J$是在各决策规则上取这些线性函数的最小值,因此在$J$可微的每一个$c$处,$dJ/dc = \mathbb E[N^*]$;$N^*$是最优规则下的抽样次数。 + +当$c$从1.25升至2.5时,$\mathbb E[N^*]$从3.34降至1.49,因此$J(0.5)$的增幅介于$1.25 \times 1.49 = 1.86$和$1.25 \times 3.34 = 4.17$之间。 + +下面的练习研究了$c$、$L_0$和$L_1$如何影响阈值$B$和$A$以及贝叶斯决策规则的错误概率。 + +## 练习 + +```{exercise} +:label: wald_friedman_2_ex1 + +使用默认参数、$\pi_{-1} = 0.5$ 以及我们{ref}`上面 ` 计算得到的阈值 $B_\Lambda$ 和 $A_\Lambda$。 + +1. 在 $f_0$ 下模拟贝叶斯决策规则 20000 次,在 $f_1$ 下模拟 20000 次,并估计其第一类错误概率 $\alpha$(当 $f_0$ 生成数据时接受 $f_1$)和第二类错误概率 $\beta$(当 $f_1$ 生成数据时接受 $f_0$)。 +2. 在 {doc}`wald_friedman` 中,当似然比从未越过其阈值时,瓦尔德不等式 $\alpha \leq (1-\beta)/A$ 和 $\beta \leq B(1-\alpha)$ 取等号。用这些等式结合 $A = A_\Lambda$ 和 $B = B_\Lambda$ 计算检验在没有越限情况下应具有的错误概率,并将它们与你的估计值进行比较。 +3. 记录停止时刻 $N$ 处的 $\log \Lambda_N$,并绘制其在 $f_0$ 下和 $f_1$ 下的分布图。利用该图解释第 2 步中的比较结果。 +``` -* 当我们增加分段线性近似中的网格点数量时,对不确定中间范围内价值函数平滑性的影响。 -* 不同成本参数 $L_0, L_1, c$、两个贝塔分布 $f_0$ 和 $f_1$ 的参数,以及用于价值函数分段连续近似的点数和线性函数数量 $m$ 的设置效果。 -* 从 $f_0$ 进行的各种模拟以及做出决定前等待时间的分布。 -* 相关的正确和错误决定的直方图。 +```{solution-start} wald_friedman_2_ex1 +:class: dropdown +``` + +在没有越限的情况下,$\alpha = (1-\beta)/A_\Lambda$ 且 $\beta = B_\Lambda (1-\alpha)$。 + +求解这两个方程可得 + +$$ +\alpha = \frac{1 - B_\Lambda}{A_\Lambda - B_\Lambda}, \qquad +\beta = \frac{B_\Lambda (A_\Lambda - 1)}{A_\Lambda - B_\Lambda} +$$ + +当 $\pi_{-1} = 0.5$ 时,$\Lambda_N$ 等于停止时刻的后验概率比 $\pi_N / (1 - \pi_N)$。 + +```{code-cell} ipython3 +def simulate_many(wf, h_star, ndraws, true_dist, seed): + """Correctness, terminal posterior, and stopping time of ndraws runs.""" + seed_numba(seed) + correct = np.empty(ndraws, bool) + π_N = np.empty(ndraws) + N = np.empty(ndraws, int) + for i in range(ndraws): + correct[i], π_N[i], N[i] = simulate(wf, true_dist, h_star) + return correct, π_N, N + +wf = WaldFriedman() +h_star = solve_model(wf) +B, A = find_cutoff_rule(wf, h_star) +B_Λ, A_Λ = LR_thresholds(B, A) + +correct_0, π_N0, N0 = simulate_many(wf, h_star, 20_000, "f0", seed=1) +correct_1, π_N1, N1 = simulate_many(wf, h_star, 20_000, "f1", seed=2) +α_hat, β_hat = 1 - correct_0.mean(), 1 - correct_1.mean() + +α_wald = (1 - B_Λ) / (A_Λ - B_Λ) +β_wald = B_Λ * (A_Λ - 1) / (A_Λ - B_Λ) + +print(f"simulated: α = {α_hat:.3f}, β = {β_hat:.3f}") +print(f"without overshoot: α = {α_wald:.3f}, β = {β_wald:.3f}") + +log_Λ0 = np.log(π_N0 / (1 - π_N0)) +log_Λ1 = np.log(π_N1 / (1 - π_N1)) +log_Λ = np.concatenate((log_Λ0, log_Λ1)) +above = log_Λ >= np.log(A_Λ) +print(f"mean of log Λ_N - log A_Λ when the test accepts f1: " + f"{np.mean(log_Λ[above] - np.log(A_Λ)):.2f}") +print(f"mean of log B_Λ - log Λ_N when the test accepts f0: " + f"{np.mean(np.log(B_Λ) - log_Λ[~above]):.2f}") +print(f"runs with log Λ_N < -8: {np.sum(log_Λ0 < -8)} under f0, " + f"{np.sum(log_Λ1 < -8)} under f1") + +fig, axes = plt.subplots(1, 2, figsize=(12, 4), sharey=True) +for ax, x, title in zip(axes, (log_Λ0, log_Λ1), + ("data from $f_0$", "data from $f_1$")): + ax.hist(x, bins=np.linspace(-8, 3, 111), density=True, alpha=0.7) + ax.axvline(np.log(A_Λ), color='C1', linestyle='--', + label=r'$\log A_\Lambda$') + ax.axvline(np.log(B_Λ), color='C2', linestyle='--', + label=r'$\log B_\Lambda$') + ax.set_title(title) + ax.set_xlabel(r'$\log \Lambda_N$') + ax.legend() +plt.tight_layout() +plt.show() +``` + +直方图中省略了 $f_0$ 下 $\log \Lambda_N < -8$ 的 494 次运行。 + +模拟得到的 $\beta$ 远低于没有越限时的理论值,而模拟得到的 $\alpha$ 则略低于理论值。 + +平均而言,当检验接受 $f_1$ 时,$\log \Lambda_N$ 超出 $\log A_\Lambda$ 达 0.29;当检验接受 $f_0$ 时,$\log \Lambda_N$ 低于 $\log B_\Lambda$ 达 1.83。 + +由于 $f_0$ 是均匀分布,单次抽取的似然比即为 $f_1(z)$。 + +密度 $f_1(z)$ 从未超过 2.16,因此一次抽取最多使 $\log \Lambda$ 增加 $\log 2.16 = 0.77$,所以 $\log \Lambda_N$ 仅略高于 $\log A_\Lambda$。 + +密度 $f_1(z)$ 在 $z \to 0$ 时趋于零,因此一次抽取可以使 $\log \Lambda$ 大幅降低任意多,所以 $\log \Lambda_N$ 常常远低于 $\log B_\Lambda$。 + +{doc}`wald_friedman` 中的测度变换给出 $\beta = E_0[\Lambda_N \mathbf{1}\{\Lambda_N \leq B_\Lambda\}]$,所以 $\Lambda_N$ 低于 $B_\Lambda$ 越多,$\beta$ 相对于 $B_\Lambda (1 - \alpha)$ 就越小。 + +```{solution-end} +``` + +```{exercise} +:label: wald_friedman_2_ex2 + +设 $S(\pi) = \min \{ \pi L_0, (1-\pi) L_1 \}$ 为停止损失。 + +1. 保持其他参数为默认值,在 0.5 到 5 之间求解不同 $c$ 值下的模型,并绘制 $B(c)$ 和 $A(c)$ 的图像。 +2. 证明延续区域为空的充要条件是 $c \geq \bar c = \max_\pi \{ S(\pi) - \mathbb E [S(\pi')] \}$,即再抽取一次所带来的停止损失的最大期望减少量。 +3. 计算 $\bar c$,并将其与第 1 步中解出的延续区域为空时的 $c$ 值进行比较。 +``` + +```{solution-start} wald_friedman_2_ex2 +:class: dropdown +``` + +假设对某个 $\pi$ 有 $c < S(\pi) - \mathbb E [S(\pi')]$。 + +由于 $J \leq S$,有 $h(\pi) = c + \mathbb E [J(\pi')] \leq c + \mathbb E [S(\pi')] < S(\pi)$,因此在 $\pi$ 处再次抽取是最优的。 + +反之,假设对每个 $\pi$ 都有 $c \geq S(\pi) - \mathbb E [S(\pi')]$。 + +设 $p_n$ 为第 $n$ 次抽取后 $f_1$ 的后验概率,其中 $p_0 = \pi_{-1}$。 + +那么 $\mathbb E [c (n+1) + S(p_{n+1}) | p_n] \geq c n + S(p_n)$,因此在决策者的信念下,$c n + S(p_n)$ 是一个下鞅。 + +根据最优停时定理,对于任何均值有限的停止规则 $N$,有 $\mathbb E [c N + S(p_N)] \geq S(p_0)$。 + +没有任何规则能优于立即停止,因此延续区域为空。 + +```{code-cell} ipython3 +def one_draw_value(wf): + """S(π) - E[S(π')] on the grid, using the Monte Carlo draws in wf.""" + S = lambda π: np.minimum(π * wf.L0, (1 - π) * wf.L1) + values = np.empty(len(wf.π_grid)) + for i, π in enumerate(wf.π_grid): + ES = ((1 - π) * S(wf.κ(wf.z0, π)).mean() + + π * S(wf.κ(wf.z1, π)).mean()) + values[i] = S(π) - ES + return values + +c_bar = one_draw_value(WaldFriedman()).max() +print(f"c̄ = {c_bar:.2f}") + +c_grid = np.linspace(0.5, 5, 10) +B_c, A_c, empty = [], [], [] +for c in c_grid: + wf_c = WaldFriedman(c=c) + h_c = solve_model(wf_c) + B_val, A_val = find_cutoff_rule(wf_c, h_c) + S_grid = np.minimum(wf_c.π_grid * wf_c.L0, (1 - wf_c.π_grid) * wf_c.L1) + B_c.append(B_val) + A_c.append(A_val) + empty.append(not np.any(h_c < S_grid)) + +print("c values with an empty continuation region:", + np.round(c_grid[np.array(empty)], 2)) + +fig, ax = plt.subplots() +ax.plot(c_grid, B_c, 'o-', lw=2, label='$B(c)$') +ax.plot(c_grid, A_c, 's-', lw=2, label='$A(c)$') +ax.fill_between(c_grid, B_c, A_c, alpha=0.2, label='draw again') +ax.axvline(c_bar, color='black', linestyle='--', lw=1, label=r'$\bar c$') +ax.set_xlabel('$c$') +ax.set_ylabel(r'$\pi$') +ax.legend(loc='upper right') +plt.tight_layout() +plt.show() +``` + +随着 $c$ 的上升,$B(c)$ 上升而 $A(c)$ 下降,延续区域随之收窄。 + +该区域在 $\bar c = 4.24$ 处消失,远低于我们从 $h \geq c$ 推导出的上界 $L_0 L_1 / (L_0 + L_1) = 12.5$。 + +当该区域为空时,`find_cutoff_rule` 返回 $\hat \pi = 0.5$ 附近的两个网格点。 + +```{solution-end} +``` + +```{exercise} +:label: wald_friedman_2_ex3 + +依次将 $(L_0, L_1)$ 设为 $(50, 25)$、$(25, 25)$ 和 $(25, 50)$,保持其他参数为默认值。 + +对于每种设置,在 $\pi_{-1} = 0.5$ 时计算 $B$、$A$、$B_\Lambda$ 和 $A_\Lambda$,并通过模拟估计 $\alpha$、$\beta$ 以及在 $f_0$ 和 $f_1$ 下的平均停止时间。 + +解释阈值和错误概率如何随 $L_0$ 和 $L_1$ 变化。 +``` + +```{solution-start} wald_friedman_2_ex3 +:class: dropdown +``` + +我们复用 {ref}`wald_friedman_2_ex1` 解答中的 `simulate_many`。 + +```{code-cell} ipython3 +for L0, L1 in [(50, 25), (25, 25), (25, 50)]: + wf_L = WaldFriedman(L0=L0, L1=L1) + h_L = solve_model(wf_L) + B_val, A_val = find_cutoff_rule(wf_L, h_L) + B_Λ_val, A_Λ_val = LR_thresholds(B_val, A_val) + correct_0, _, N0 = simulate_many(wf_L, h_L, 20_000, "f0", seed=1) + correct_1, _, N1 = simulate_many(wf_L, h_L, 20_000, "f1", seed=2) + print(f"L0 = {L0}, L1 = {L1}: B = {B_val:.3f}, A = {A_val:.3f}, " + f"B_Λ = {B_Λ_val:.2f}, A_Λ = {A_Λ_val:.2f}, " + f"α = {1 - correct_0.mean():.3f}, β = {1 - correct_1.mean():.3f}, " + f"E_0[N] = {N0.mean():.2f}, E_1[N] = {N1.mean():.2f}") +``` + +将 $L_1$ 从 25 提高到 50,会使在 $f_0$ 为真时接受 $f_1$ 的代价更高。 + +决策者在接受 $f_1$ 之前需要更多证据:$A$ 从 0.794 升至 0.899,$A_\Lambda$ 从 3.85 升至 8.95。 + +他也会在较弱的证据下接受 $f_0$:$B$ 从 0.256 升至 0.302,$B_\Lambda$ 从 0.34 升至 0.43。 + +第一类错误概率 $\alpha$ 从 0.176 降至 0.070,第二类错误概率 $\beta$ 从 0.095 升至 0.136。 + +将 $L_0$ 从 25 提高到 50 则作用相反。 + +$B$ 从 0.256 降至 0.116,$A$ 从 0.794 降至 0.774,因此 $\beta$ 降至 0.035,$\alpha$ 升至 0.214。 + +在这两种情况下,平均停止时间都会上升,因为某种错误损失更大会使证据的价值更高。 + +```{solution-end} +``` -[^f1]: 决策者的行为就像他相信随机变量序列 $[z_{0}, z_{1}, \ldots]$ 是*可交换的*。关于可交换性的讨论,请参见[可交换性和贝叶斯更新](https://python.quantecon.org/exchangeable.html)和 -{cite}`Kreps88`第11章。 +[^f1]: 决策者的行为就好像他相信随机变量序列 +$[z_{0}, z_{1}, \ldots]$ 是*可交换的*。关于可交换性的讨论,请参阅 {doc}`exchangeable` 和 +{cite}`Kreps88` 第 11 章。