You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Stata中实现从分类变量自动生成虚拟变量?

在Stata里实现分类变量自动生成虚拟变量并用于回归,其实有两种实用思路——手动生成虚拟变量后建模,或者直接用Stata自带的因子变量语法(更高效简洁)。下面我用NLSW数据集做示例,一步步给你演示:

第一步:数据预处理

先加载并整理数据,确保样本没有缺失值,只保留我们需要的变量:

clear
use http://www.stata-press.com/data/r13/nlswork
xtset idcode year  // 设定面板数据结构
keep idcode year ln_wage union tenure age race occ_code  // 筛选变量
* 剔除有缺失值的样本
drop if union ==.
drop if tenure ==.
drop if occ_code ==.

方法一:手动生成虚拟变量(传统方式)

tabulate, generate()命令可以自动把分类变量转换成虚拟变量,之后手动构建交互项再做回归:

* 为race变量生成虚拟变量r1、r2、r3(Stata会自动把分类的基准组排除,避免多重共线性)
tabulate race, generate(r)
* 为职业编码occ_code生成虚拟变量occ1到occ13
tabulate occ_code, generate(occ)
* 构建连续变量tenure和race虚拟变量的交互项
generate tr1 = tenure*r1
generate tr2 = tenure*r2
generate tr3 = tenure*r3
* 代入回归模型
reg ln_wage tenure r1 r2 r3 tr1 tr2 tr3 age union ///
occ1 occ2 occ3 occ4 occ5 occ6 occ7 occ8 occ9 occ10 occ11 occ12 occ13
* 保存回归结果用于后续对比
iestimates store reg_dummies

方法二:因子变量语法(推荐!更简洁)

Stata的因子变量语法i.可以自动识别分类变量并处理虚拟变量,##符号还能一键生成主效应+交互项,完全不用手动创建虚拟变量和交互项,既省时间又不容易出错:

* c.tenure表示tenure是连续变量,i.race表示race是分类变量
* c.tenure##i.race 等价于 tenure + i.race + c.tenure#i.race(主效应+交互项)
reg ln_wage c.tenure##i.race i.occ_code age union
* 保存结果
iestimates store reg_factor

验证两种方法的一致性

iestimates table命令可以对比两种回归的系数,你会发现结果完全一致——这说明因子变量语法和手动生成虚拟变量的效果是等价的,但前者的代码可读性和效率高太多:

iestimates table reg_factor reg_dummies

内容的提问来源于stack exchange,提问作者Marco

火山引擎 最新活动