如何用Stata中mvprobit模型结果为新数据集预测二元结果?
解决Stata多元Probit模型(
mvprobit)的新数据集预测问题 一、Stata实操方案
虽然mvppred不支持跨数据集预测,但可以通过导出估计结果+手动计算的方式实现,步骤如下:
- 在原数据集导出模型参数
* 先完成mvprobit估计(示例命令,替换为你的实际模型) mvprobit (rainfed = x1 x2 x3) (surface = x1 x4) (sprinkler = x2 x3 x4) (drip = x1 x3) * 保存系数估计结果 estimates save "mvprobit_coefs.ster", replace * 提取并保存残差协方差矩阵 matrix Sigma = e(Sigma) matrix save "mvprobit_Sigma.mat", replace - 切换到新数据集加载参数并生成预测
注:如果需要预测联合概率(比如某农场同时采用喷灌和滴灌的概率),由于Stata内置* 加载之前保存的系数和协方差矩阵 estimates use "mvprobit_coefs.ster" matrix use "mvprobit_Sigma.mat" * 计算每个方程的线性预测值(替换为你的自变量和方程对应关系) gen y1_hat = _b[rainfed:_cons] + _b[rainfed:x1]*x1 + _b[rainfed:x2]*x2 + _b[rainfed:x3]*x3 gen y2_hat = _b[surface:_cons] + _b[surface:x1]*x1 + _b[surface:x4]*x4 gen y3_hat = _b[sprinkler:_cons] + _b[sprinkler:x2]*x2 + _b[sprinkler:x3]*x3 + _b[sprinkler:x4]*x4 gen y4_hat = _b[drip:_cons] + _b[drip:x1]*x1 + _b[drip:x3]*x3 * 生成符合模型假设的多元正态随机误差项 drawnorm eps1 eps2 eps3 eps4, means(0 0 0 0) cov(Sigma) seed(1234) // seed固定可复现结果 * 生成二元预测结果:潜变量>0时取1,否则取0 gen rainfed_pred = (y1_hat + eps1) > 0 gen surface_pred = (y2_hat + eps2) > 0 gen sprinkler_pred = (y3_hat + eps3) > 0 gen drip_pred = (y4_hat + eps4) > 0mvnormal()仅支持3维以下,4维场景可使用外部命令mvnp实现积分计算。
二、手动预测的理论公式
多元Probit模型的核心逻辑基于潜变量假设:
1. 潜变量方程
对于第$i$个观测的第$j$个因变量($j=1,2,3,4$对应雨养、地面灌溉、喷灌、滴灌),存在不可观测的潜变量$y_{ij}^$:
$$y_{ij}^ = \mathbf{x}_{i}'\boldsymbol{\beta}j + \epsilon{ij}$$
其中:
- $\mathbf{x}_i$:第$i$个观测的自变量向量
- $\boldsymbol{\beta}_j$:第$j$个方程的系数向量(模型估计得到的$\hat{\boldsymbol{\beta}}_j$)
- $\boldsymbol{\epsilon}i = (\epsilon{i1}, \epsilon_{i2}, \epsilon_{i3}, \epsilon_{i4})'$:服从均值为0、协方差矩阵为$\Sigma$(即模型输出的
e(Sigma))的多元正态分布
2. 二元结果映射
观测到的二元因变量$y_{ij}$与潜变量的关系为:
$$y_{ij} = \begin{cases}
1 & \text{当 } y_{ij}^* > 0 \
0 & \text{当 } y_{ij}^* \leq 0
\end{cases}$$
3. 预测逻辑
- 二元结果预测:先计算线性预测值$\hat{y}{ij}^* = \mathbf{x}i'\hat{\boldsymbol{\beta}}j$,再从$N(\mathbf{0}, \hat{\Sigma})$中抽取误差项$\hat{\epsilon}{ij}$,最后通过$\hat{y}{ij}^* + \hat{\epsilon}{ij}$与0的比较得到预测值。
- 联合概率预测:若要计算特定结果组合的概率(如$y_1=1, y_2=0$),需对多元正态分布在对应区域($\epsilon_{i1} > -\hat{y}{i1}^*, \epsilon{i2} \leq -\hat{y}_{i2}^*$等)进行积分。
内容的提问来源于stack exchange,提问作者Charlotte
相关产品推荐
相关产品推荐

