# 这套数据能回答什么问题（5 个例子）

> 每个例子给出：**问题 → 用哪些字段 → 怎么算 → 这个答案的置信度**。
> ⚠ **置信度一栏最重要** —— 它决定了你能不能把这个答案写进论文/报告里。

**通用前提**：本数据是**仿真输出**（见 `README_ZH.md` 的三句话）。
下面每个例子里，凡是"**政策效应**"类的结论，都需要**两臂对照**（同一批种子 · 只改一个政策开关），
单臂数据**只能做描述统计**。

---

## 例 1 · 建学校对学历的影响（**政策效应 · 本包演示不了 · 需两臂**）

**问题**：把 `school` 级数从 1 提到 2，25~29 岁人群的平均学历会变化多少？

| 用什么 | 字段 / 文件 |
|---|---|
| 处理变量 | 运行时的 `city.policy.school`（不在数据里，在**对照设计**里） |
| 结果变量 | `panel.edu`（人·年）—— 按 `age` 分箱后取 `25 ≤ age ≤ 29` 的均值 |
| 辅助 | `panel.year`（看时间趋势）· `panel.bid`（同一人跨年配对） |

**怎么算**：两臂各跑相同种子 → 各自算 `q25_29 meanEdu` → 做**跨种子 t 检验**。

**⭐ 置信度**：**已实测过一次**（本项目内部实验）：
- 效应 **+4.454%**，CI **[3.624, 5.284]**，**t = 12.139**，**10/0 同向** ⇒ **统计显著** ✓
- 分层看：**大专及以上 +3.062%（显著）** · **本科及以上 +0.82%（CI 跨 0 · 不显著）**
- ⚠ **而这需要完整批次 + 10 个种子** —— 本样例包的 200 行**做不了**

---

## 例 2 · 生育意愿 vs 实际生育（**描述统计 · 含一个陷阱**）

**问题**：人们的"想生几个"和"实际生了几个"差多少？差在哪一年龄段？

| 用什么 | 字段 / 文件 |
|---|---|
| 意愿 | `demog.marWant` / `demog.cohWant`（队列口径）· `demog.fertWill`（意愿生育数） |
| 实际 | `demog.births`（年度出生数）· `demog.tfr` |
| 算子 | ⚠ **`demog.expBirthsY` / `demog.judgedN`** —— 见下 |

**怎么算**：
```
意愿-实际缺口 = cohWant − cohDonePct（或 births / 育龄妇女数）
```

**⚠⚠ 这里有一个**必须知道的陷阱**：**
```
`expBirthsY` 是【总量】指标 = Σ(每个人的日概率) = 平均概率 × judgedN。
而 `judgedN`（进入判断的人数）本身会被政策改变 ⇒
⇒ 当政策【有效】时，judgedN 变小 ⇒ expBirthsY 可能反而【下降】⇒ 看起来像"政策失败"。
```
⇒ **所以不要用 `expBirthsY` 的绝对值判断政策效果**，要看**人均**（`fertWill`）或
`expBirthsY / judgedN`。

**⭐ 置信度**：**描述统计可用**（本包 200 行能看趋势）·
**因果结论不可用**（需两臂 + 多种子）。

---

## 例 3 · 婚姻匹配池（**描述统计 · 结构分析**）

**问题**：男女匹配池的规模如何随年份变化？"想结婚但找不到对象"的比例是多少？

| 用什么 | 字段 / 文件 |
|---|---|
| 池子 | `demog.poolW`（女池）· `demog.poolM`（男池） |
| 意愿/尝试/候选/匹配 | `demog.marWant` → `marTry` → `marCand` → `marMp`（**漏斗**） |
| 队列 | `demog.coh0` / `coh1` / `coh2` / `coh3p`（**分档**）· `cohNever` · `cohMarried` |
| 个体 | `panel.mstat`（人·年婚况） |

**怎么算**：`marCand / marTry` = 尝试者中有候选的比例；
`marWant − marMp` = 想结但未成的缺口。

**⭐ 置信度**：**描述统计与漏斗结构可用**（这是引擎内部一致的口径）。
⚠ **但不要与真实婚姻率对比** —— 未做过真实对照（见 `../REALITY_ANCHOR_PLAN.md`）。

---

## 例 4 · 队列的学历/婚育构成（**⚠ 有方向性陷阱 · 必读 L-1**）

**问题**：不同出生队列的学历构成、初婚年龄、终身未婚比例。

| 用什么 | 字段 / 文件 |
|---|---|
| 队列出生数 | `demog.cohN` |
| 平均 | `demog.cohMean` · `cohBioMean` |
| 分档 | `coh0`（0 个）· `coh1` · `coh2` · `coh3p`（≥3 个） |
| 未婚/已婚 | `cohNever` · `cohMarried` · `cohDivWid`（离异/丧偶） |
| 窗口 | `cohWinY` · `cohMarWinY` · `cohExposurePct`（**暴露窗口**） |
| 完成度 | `cohDonePct` · `cohByWant` |

**⚠⚠⚠ `LIMITATIONS.md` 的 L-1 会让"学历 → 行为"的结论【方向出错】：**
```
实测：`q25_29 meanEdu` 在 10 年内【下降 54.4%】，而 `q30_34` / `q40_49` 上升。
⇒ 这与真实世界的"教育扩张"（年轻队列学历更高）【相反】。
⇒ 根因：学历是从【全年龄段】的表里抽的，而截断只封上界，不封下界。
```
⇒ **所以：用本数据做"年龄 × 学历"的交叉分析时，不要解读为"教育趋势"。**

**⭐ 置信度**：**队列口径的字段是自洽的**（引擎内部一致）·
⚠ **但"学历随年龄的变化"不可解释为真实趋势** · ⚠ **任何"学历 → 行为"的因果结论都要先排除 L-1**。

---

## 例 5 · 个体一生轨迹（**质性 / 序列分析 · 本包最能体现"行为级"的一张**）

**问题**：一个人一生中的关键事件是如何排列的？重大事件之后，人格/健康/收入如何变化？

| 用什么 | 字段 / 文件 |
|---|---|
| 一生骨架 | `lives.birthDay` · `deathDay` · `ageAtDeath` · `life`（第几世） |
| 人格轨迹 | `lives.L1_start`（起点五维）· `L1_end`（终点）· `L1_peak`（峰值） |
| 事件流 | `lives.events`（**实测首条 431 条**）· `lives.ev` · `lives.dev`（发展） |
| 逐年 | `lives.yearly`（**实测首条 79 个年点**） |
| 转世 | `lives.rebirth` · `souls.lives`（一个 sid 有几世） |

**怎么算**：
```python
import json
for line in open('sample_lives.jsonl', encoding='utf-8'):
    o = json.loads(line)
    # 人格变化幅度
    delta = [e - s for e, s in zip(o['L1_end'], o['L1_start'])]
    print(o['sid'], o['life'], o['ageAtDeath'], delta)
```

**⭐ 置信度**：**这是本系统最独特的输出** ——
常见的人口模型给不出"有姓名、有关系网、有事件序列的一生"。
⇒ ⭐ **可以用于：序列模式挖掘、事件史分析（event-history）的方法演示、合成数据实验。**
⚠ **不可以用于：推断真实人群的生命历程。**

---

## 一览表

| # | 问题 | 粒度 | 本包能做吗 | 因果结论 |
|---|---|---|---|---|
| 1 | 建学校对学历的影响 | 人·年 | ❌ 需两臂完整批次 | ✅ **已验证（t=12.14）** |
| 2 | 意愿 vs 实际生育 | 城市·年 | ✅ 描述统计 | ❌ 需两臂 |
| 3 | 婚姻匹配池 | 城市·年 | ✅ 描述统计 | ⚠ 未与真实对照 |
| 4 | 队列构成 | 城市·年 | ⚠ **有 L-1 陷阱** | ❌ **方向可能反** |
| 5 | 个体一生轨迹 | 人·一生 | ✅ **本包能演示** | ❌ 仅方法演示 |

**⇒ 一句话**：这套数据的**独特价值在"行为级"（例 5）与"可做反事实"（例 1）**，
而它的**风险在"看起来像真实统计"（例 2、4）** —— 后者必须配 `LIMITATIONS.md` 一起读。
