价格、地块规模、距离、服务质量
这些变量可由调查数据观测,构成净收益中可解释的部分。
本章以模块 6 的农机服务采纳模型为例,依次讨论模型的经济含义、logit 选择概率的推导、似然函数的计算、Newton 迭代、参数识别、估计结果的解释、经济量的计算、模型拟合、反事实分析和蒙特卡洛检验。文中数值均为配套程序的实际输出。
mechanization_sim.csv(700 户,代金券随机分配),其数据生成过程和随机数种子与模块 6 的 Python 程序相同。“真值”是模拟时设定的参数,只用于检验估计方法,不是对真实农户的估计。农户在购买农机服务与自己作业(或雇工)之间选择。购买服务可以节省劳动、保证农时,但需要付费并承担联系服务的成本。两者之差为购买的净收益;净收益大于零时,农户购买服务。
这些变量可由调查数据观测,构成净收益中可解释的部分。
研究者观测不到这些因素,将其视为随机项。因此,可观测条件相同的两户可能作出不同的选择。
数据中只有选择结果,没有净收益本身。结构估计的任务是由选择结果推断净收益中各因素的权重。
是扣除代金券后的净价格。 是行为参数;规模、距离和价格是农户的状态变量或政策变量,不是参数。
若 服从标准 logistic 分布(等价于“买”和“不买”两个选项各带一个独立的 I 型极值误差,二者之差就是 logistic),则 有闭式解:
这条 S 形曲线把任意实数 压到 0–1 之间: 时概率 0.5; 时约 0.18; 时约 0.82。
给“买”和“不买”的效用同时加 10,选择不变。所以只能识别效用差,“不买”的效用被归一化为 0。
把所有效用乘以 2,排序不变。logit 把 的方差固定为 ,所以 的单位是“相对于随机项标准差”。系数的比值(如 )和概率才有不依赖尺度的含义。
似然函数是给定参数时观测到的选择出现的概率。买了的农户贡献 ,没买的贡献 :
数据前三户都没有购买()。比较两组候选参数:
| 农户 | y | θA=全 0:V | P(买) | 贡献 | θB=真值:V | P(买) | 贡献 |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 0.000 | 0.500 | −0.693 | −1.251 | 0.222 | −0.252 |
| 2 | 0 | 0.000 | 0.500 | −0.693 | −0.957 | 0.277 | −0.325 |
| 3 | 0 | 0.000 | 0.500 | −0.693 | −1.570 | 0.172 | −0.189 |
| 三户合计 | −2.079 | −0.766 | |||||
| 全样本 700 户 | −485.203 | −300.946 | |||||
手算第 1 户(θB):,没买,所以贡献 。θB 下该户购买的概率较低,与观测结果一致,因此其对数似然贡献的绝对值较小。
对 求一阶和二阶导数,分别得到 score(梯度)和 Hessian 矩阵:
score 等于预测误差 乘以特征。若高价农户实际买得比预测多,score 会推动 的估计值增大(绝对值减小)。在最大值处,各特征与预测误差的乘积之和均为零,即一阶条件。
| 迭代 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| ℓ(θ) | −309.320 | −299.431 | −298.934 | −298.932 | −298.932 | −298.932 |
| max|Δθ| | 0.885 | 0.665 | 0.227 | 0.017 | 7.9e−5 | 1.7e−9 |
logit 模型的对数似然函数是凹函数,最大值唯一,因此迭代几步即收敛。更复杂的结构模型的目标函数可能有多个局部极值,需要用不同初值重复估计(见模块 3 和模块 4)。
如果服务好的机手要价也高,而研究者看不到服务好坏 ,那么“高价”与“受欢迎”会一起出现,直接回归会把质量的作用算到价格头上。代金券随机发放,让同一标价下的农户面对不同净价格,这部分价格变化与 无关。
| 估计方式 | α̂ | 说明 |
|---|---|---|
| 只含净价格的 logit | +0.462 | 符号为正,与需求规律相反 |
| 控制标价,只利用代金券造成的净价格差异 | −1.355(SE 0.199) | 与真值相差不到一个标准误 |
| 把 ξ 作为解释变量(不可行估计) | −1.470 | 实际数据中 ξ 不可观测,仅作对照 |
| 参数 | 估计值 | SE | z | p | 95% CI | 真值 |
|---|---|---|---|---|---|---|
| 常数 β₀ | 0.100 | 0.604 | 0.17 | 0.868 | [−1.083, 1.283] | −0.80 |
| 净价格 α | −1.795 | 0.382 | −4.70 | <0.001 | [−2.544, −1.045] | −1.40 |
| ln(1+规模) β | 0.822 | 0.329 | 2.50 | 0.013 | [0.177, 1.467] | 0.75 |
| 距离 γ | −0.256 | 0.062 | −4.12 | <0.001 | [−0.378, −0.134] | −0.18 |
| 质量 δ | 0.393 | 0.511 | 0.77 | 0.441 | [−0.608, 1.394] | 0.90 |
| 经济量 | 数值 | 含义 |
|---|---|---|
| 净价格平均边际效应 | −0.240 | 净价格每升 0.1 个单位,购买概率平均约降 2.4 个百分点 |
| 平均价格弹性 | −1.646 | 净价格升 1%,购买概率约降 1.6%(相对于自身水平) |
| 距离的价格等价 γ/α | 0.143(delta-method SE 0.045) | 距离增加 1 公里对效用的影响,相当于价格上涨 0.143 个单位;该比值与 logit 的尺度无关 |
| 胜算比 | exp(0.1α) = 0.836 | 净价格升 0.1 个单位,购买胜算乘以 0.836 |
价格单位沿用原教学数据的设定(标价在 0.8–1.8 之间),没有对应真实货币单位;用于真实数据时应换成“元/亩”等明确单位。
| 组 | 观测 | 预测 |
|---|---|---|
| Q1 最便宜 | 0.274 | 0.272 |
| Q2 | 0.177 | 0.190 |
| Q3 | 0.171 | 0.153 |
| Q4 最贵 | 0.074 | 0.083 |
| 组 | 观测 | 预测 |
|---|---|---|
| 近 | 0.235 | 0.250 |
| 中 | 0.185 | 0.168 |
| 远 | 0.103 | 0.105 |
两张表中预测值与观测值之差都在几个百分点以内。应注意,含常数项的 logit 模型的总体预测采纳率必然等于观测值(都是 0.174),因此报告总体平均值没有意义,需要分组比较。更严格的检验是用留出样本或实验组作样本外预测(见模块 2 和模块 5 的 PROGRESA 例子)。
| 补贴率 s | 采纳率 | 95% 区间 | 每户财政成本 | 每新增 1 户采纳的成本 |
|---|---|---|---|---|
| 0% | 0.128 | [0.106, 0.160] | 0.000 | — |
| 10% | 0.153 | [0.130, 0.183] | 0.018 | 0.741 |
| 20% | 0.181 | [0.156, 0.212] | 0.043 | 0.822 |
| 30% | 0.214 | [0.182, 0.252] | 0.078 | 0.910 |
| 50% | 0.293 | [0.233, 0.363] | 0.182 | 1.104 |
R 与 Python 的反事实点估计完全相同;区间因随机抽样略有差别(如 s=20% 时 R 为 [0.156, 0.214])。
用已知真值重复生成 300 份 N=700 的数据,每份都重新估计。若估计量无偏、标准误正确,平均估计应接近真值,95% CI 覆盖真值的比例应接近 95%。
| 参数 | 真值 | 平均估计 | 偏差 | 估计的标准差 | 95% CI 覆盖率 |
|---|---|---|---|---|---|
| 常数 | −0.80 | −0.746 | 0.054 | 0.632 | 0.957 |
| 净价格 | −1.40 | −1.428 | −0.028 | 0.342 | 0.963 |
| ln(1+规模) | 0.75 | 0.759 | 0.009 | 0.319 | 0.967 |
| 距离 | −0.18 | −0.182 | −0.002 | 0.063 | 0.933 |
| 质量 | 0.90 | 0.833 | −0.067 | 0.498 | 0.957 |
结果表明估计方法和程序是正确的。在单个样本中, α̂ = −1.795 偏离真值 0.4,约为抽样标准差(0.34)的 1.2 倍,属于正常抽样波动。质量系数的抽样标准差 0.50,说明在这一样本量下该系数的估计精度较低。
中文里两者都简称“结构”,但研究对象不同:结构估计从经济行为(效用、约束、均衡)出发,估计可用于反事实的行为参数;结构方程模型从潜变量(态度、意愿等不可直接测量的构念)出发,用多个问卷题项测量它们,再估计潜变量之间的路径。农业经济学文献中两种方法都很常见,详见 模块 6B:结构方程模型。
| 文件 | 内容 | 运行情况 |
|---|---|---|
00_make_data.py | 生成 data/mechanization_sim.csv(与原脚本同一 DGP、同一 seed) | 已运行 |
01_structural_logit.py | Python:手算、Newton、MLE 表、经济量、拟合、反事实区间、蒙特卡洛、内生性演示 | 已运行(numpy 2 / scipy 1.16 / statsmodels 0.14) |
02_structural_logit.R | R:optim 手写似然 + glm 对照、AME、delta method、拟合、Krinsky–Robb | 已运行(R 4.5.0) |
03_structural_logit.do | Stata:logit、margins、nlcom、predictnl 反事实 | 未运行(无 Stata 环境,未经验证) |
python 00_make_data.py # 生成共用数据
python 01_structural_logit.py # 依赖 numpy scipy pandas statsmodels
Rscript 02_structural_logit.R # 依赖 MASS(R 自带)
stata -b do 03_structural_logit.do1.795 是效用差(以随机项尺度计)的变化;概率变化还要乘以 。在本样本中平均只有 0.240。
不能仅凭显著性删掉。真值是 0.90,不显著来自精度不足;若质量与价格相关,删掉它还会使价格系数产生遗漏变量偏误(见 6A.5 节)。
只能表述为“在标价和供给不变、价格外生的条件下”的预测,并报告区间 [0.156, 0.212];还应说明基准是“取消代金券”,以及供给反应可能使结果偏高。