☰
Statistical Rethinking 隐藏马尔可夫模型实战:从猞猁野兔周期到黑猫生存分析
2026/10/23 2:02:24 网站建设 项目流程

【免费下载链接】stat_rethinking_2026

Statistical Rethinking Course 2026

项目地址:https://gitcode.com/gh_mirrors/st/stat_rethinking_2026
点击查看免费下载

想在真实数据上掌握隐藏马尔可夫模型(HMM)?《Statistical Rethinking》2026 开源课程(stat_rethinking_2026)给出了完整路径:Richard McElreath 教授把 HMM 放在课程第 10 周压轴讲授,配套脚本覆盖了从猞猁-野兔种群周期、黑猫领养生存分析到总统"死亡概率"的马尔可夫建模全流程。本文带你沿课程脚本走一遍,理解 HMM 的核心思想并找到动手入口。

为什么 HMM 值得学:一个"看不见"的问题

HMM 解决的是这类问题:系统内部有状态,但你只能看到状态的模糊证据。

以课程里的经典例子为例:一位"总统"每天可能公开露面(观察到 0/1),但他实际处于"活着"或"已死"两个隐藏状态之一。活着时他 50% 概率露面,死了则几乎永远不露面——于是"连续几天没露面"的证据会逐步推高你估计的"死亡概率"。这正是 HMM 的两大要素:

HMM 要素符号含义课程示例
状态转移矩阵gamma隐藏状态如何随时间演化活着→已死的每日概率phi
观测发射概率theta各状态下"看到某证据"的概率活着时露面概率约 0.5
初始状态rho起点的状态分布第 1 天一定活着[1,0]

这套框架一旦建立,就能套用到物种监测、疾病分期、设备故障预警等大量场景。

第一步:猞猁-野兔周期——先看懂动态系统

动手 HMM 之前,课程先用猞猁与野兔(Lynx-Hare)的经典皮草贸易数据带你复习动态系统的贝叶斯建模,脚本见 B09_new_lynx.R。

该脚本的脉络非常清晰:

  1. R code 16.13:绘制 21 年间的猞猁/野兔数量,肉眼可见的周期性振荡;
  2. R code 16.14:写出捕食者-猎物的差分方程仿真函数sim_lynx_hare,理解"猎物驱动捕食者、捕食者压制猎物"的循环机制;
  3. R code 16.17–16.19:把微分方程嵌入 Stan,用 MCMC 从皮草数据反推四个生态参数,并用 21 条后验预测时间序列检验模型是否复现了真实周期;
  4. R code 16.21:再用自回归(AR1)思路对照——不同建模视角的对比,正是本课程"数据花园"思想的体现。

🦊 这一节的收获:HMM 不是凭空出现的,它是"带隐变量的时间序列"。猞猁-野兔让你先熟悉"用数据反推系统机制"的贝叶斯工作流。

第二步:黑猫生存分析——处理删失数据的三种等价姿势

接下来 B08 black cats new script.r 用 AustinCats 数据讲生存分析:每只猫有两个属性——days_to_event(多少天后被领养)和out_event(领养/死亡/仍留在收容所)。"仍留在收容所"的猫只有下限信息,这就是典型的**右删失(right-censored)**数据。

脚本演示了三种处理删失的方式,结论完全等价:

  • 只建事件模型:对已领养猫用几何分布似然(1-P)^(days-1)*P,ulam直接拟合;
  • 加删失似然项:adopted==0的猫贡献log( (1-P)^days ),一行代码解决删失;
  • 插补(imputation)版本:为每只删失猫引入参数days_imputed,把删失似然变成缺失值的先验,用cstan直接写 Stan 代码。

三种写法互相验证后,课程再用 Kaplan-Meier 后验预测曲线(对 1000 只模拟猫作survfit)检查推断质量。

🐈 生存分析看似和 HMM 无关,但它训练的核心能力——"只看到部分证据时如何建模"——正是 HMM 的前置技能。

第三步:B10 核心脚本——纯 Stan 手写 HMM

压轴脚本 B10_HMMs_basic.R 用 CmdStan 从零搭建 HMM,是全文最值得精读的部分。

3.1 最小可用的 HMM:三块积木

整个模型代码可以拆成三块:

  1. 构造转移矩阵gamma:2×2 矩阵中gamma[1,2]=phi(每日死亡概率),gamma[2,1]=0(死人不会复活);
  2. 发射对数似然log_omega:对每个状态、每一天,计算bernoulli_lpmf(Y[n] | theta[k]);
  3. 一行核心:target += hmm_marginal(log_omega, gamma, rho);——Stan 前向-后向算法自动完成边缘化,无需手写隐状态积分。

先验设置也颇有讲究:theta[2] ~ beta(1,100)让"死者的露面概率"接近 0 但不严格为 0,避免数值溢出;phi ~ beta(1,50)表达"每日死亡概率约 2%"的弱先验。

3.2 从后验里读出"哪一天死的"

采样后,generated quantities块提供两种解读:

  • hmm_latent_rng(...):从后验中采样一条具体隐状态轨迹("他最可能在第 50 天死");
  • hmm_hidden_state_prob(...):逐日"死亡概率"曲线——脚本把它画成带不确定带的时间序列,死亡日附近曲线陡然爬升,直观展示 HMM 如何用累积证据定位不可观测事件。

3.3 升级:多个体版本 = 捕获-再捕获模型

脚本后半段把模型推广为M只个体 ×N年的观测矩阵,每个个体独立跑一次hmm_marginal后累加似然。此时模型就退化成了生态学的捕获-再捕获(capture-recapture)模型:年度调查中"看见/没看见"某只动物,用来估计年死亡率phi。脚本用 100 只模拟动物(真实死亡率 0.05)验证了后验密度dens(post$phi)能精准覆盖真值。

📌 这是 HMM 的精髓所在:同一套前向-后向算法,换个数据排列就是生态学里成熟的人口模型。理解了它,你就拥有了一个可复用的建模模板。

配套作业与学习路径

课程每周配 PDF 作业题,本节相关的是 homework/homework_B08.pdf(生存/删失数据)与 homework/homework_B09.pdf(猞猁-野兔建模),部分章节附解答 PDF 可供对照。完整日程与讲座安排见 README.md 中的 Calendar & Topical Outline 表格。

环境准备清单

  1. 安装 R 并装好rethinking包(课程所有脚本的第一行都是library(rethinking));
  2. HMM 部分用cstan(),因此需要 CmdStan 后端,首次运行会自动编译;
  3. 运行顺序建议:B09→B08→B10,先建立动态系统与删失数据直觉,再攻坚hmm_marginal。

总结:三条脚本串起的一条能力线

脚本训练能力对应场景
B09_new_lynx.R动态系统 + 后验预测检验种群周期
B08 black cats new script.r删失数据、三种等价建模生存分析
B10_HMMs_basic.R转移矩阵 + 发射概率 + 前向-后向HMM / 捕获-再捕获

HMM 的门槛不在代码量——核心逻辑不超过 50 行 Stan——而在于"状态不可见、证据可累积"这一建模视角。跑通上面三个脚本后,你会发现把模板迁移到自己的问题(如设备故障、用户流失、疾病分期)只是换个先验和观测矩阵的事。

【免费下载链接】stat_rethinking_2026

Statistical Rethinking Course 2026

项目地址:https://gitcode.com/gh_mirrors/st/stat_rethinking_2026
点击查看免费下载

相关推荐

上一篇:如何用一个界面管理所有游戏平台?Playnite游戏库整合方案深度解析
下一篇:Docker 实验性功能完全指南:开启方式、特性详解与源码级原理解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询