如何在自变量样本均值处预测因变量?Stata多类回归实操疑问
在Stata中于自变量均值处预测因变量(覆盖OLS、分位数回归、Probit/Logit)
刚好之前折腾过Stata里不同回归模型的均值处预测,我来给你拆解清楚——不管是你熟悉的OLS,还是搞不定的分位数回归,甚至probit/logit这类非线性模型,都能搞定这件事。
一、先回顾你熟悉的OLS操作
毕竟你说OLS很简单,先快速过一遍,方便和后面的方法对比:
- 先跑OLS回归:
reg y x1 x2 x3 - 要在自变量均值处预测,直接用
predict加atmeans选项就行,一步到位:
生成的predict y_hat_ols, atmeansy_hat_ols就是所有自变量取样本均值时的预测值,整个样本里这个值是固定的(因为都是用均值代入)。
二、重点:分位数回归的实现方法
分位数回归(比如qreg)没有直接的atmeans选项,得手动走三步,逻辑其实很清晰:
- 第一步:提取所有自变量的样本均值
可以用summarize逐个提取,也可以用循环批量处理更高效:foreach var of varlist x1 x2 x3 { summarize `var' local mean_`var' = r(mean) // 把每个变量的均值存到对应局部宏里 } - 第二步:跑分位数回归
比如跑中位数回归(0.5分位数):qreg y x1 x2 x3, quantile(0.5) - 第三步:手动代入均值计算预测值
用_b[]提取回归系数,然后按回归公式计算:
如果需要把这个预测值放到数据集中(每个观测都显示这个固定值),生成新变量即可:// 先存成标量看结果 scalar y_hat_qreg = _b[_cons] + _b[x1]*`mean_x1' + _b[x2]*`mean_x2' + _b[x3]*`mean_x3' display y_hat_qreg // 直接显示预测值gen y_hat_qreg = _b[_cons] + _b[x1]*`mean_x1' + _b[x2]*`mean_x2' + _b[x3]*`mean_x3'
三、Probit/Logit的情况(补充)
你提到也在用probit和logit,这类非线性模型有两种实现方式:
方式1:用predict加atmeans(推荐)
Stata的probit/logit命令支持atmeans选项,和OLS一样省心:
probit y x1 x2 x3 predict y_hat_probit, pr atmeans // pr选项是预测概率,用xb则是预测指数值
logit y x1 x2 x3 predict y_hat_logit, pr atmeans
方式2:手动计算(和分位数回归逻辑一致)
要是想自己掌控计算过程,也可以像分位数回归那样操作:
// 先提取自变量均值 foreach var of varlist x1 x2 x3 { summarize `var' local mean_`var' = r(mean) } // 跑probit回归 probit y x1 x2 x3 // 先算指数值,再转成概率 scalar xb_probit = _b[_cons] + _b[x1]*`mean_x1' + _b[x2]*`mean_x2' + _b[x3]*`mean_x3' scalar prob_probit = normal(xb_probit) // normal是标准正态分布的CDF函数 display prob_probit
小提示
- 如果自变量里有分类变量(比如虚拟变量、因子变量),计算均值的时候不用特殊处理:分类变量的均值就是该类别在样本中的占比,代入预测是合理的;如果是用
i.var形式的因子变量,提取系数的时候要对应正确的类别,比如_b[i.x1]。 - 分位数回归如果要跑多个分位数(比如0.25、0.5、0.75),可以把上面的步骤写成循环,批量计算每个分位数的均值处预测值。
内容的提问来源于stack exchange,提问作者Ruben Perez Sanz
相关产品推荐
相关产品推荐

