1. 数据导入与清洗:回归分析的基石
当你拿到一份新鲜出炉的数据集时,千万别急着跑回归模型。我见过太多人一上来就输入regress y x1 x2,结果被各种缺失值和异常值坑得怀疑人生。正确的打开方式应该是这样的:
首先用import excel命令导入数据,记得加上firstrow参数让Stata自动识别表头:
import excel "D:\data\consumer_behavior.xlsx", sheet("Sheet1") firstrow接下来用browse快速浏览数据全貌,就像检查新买的房子要先看户型图一样重要。这时候你可能会发现:
- 某些数值变量里混进了"NA"或"999"这样的特殊值
- 分类变量的类别拼写不一致(比如"Male"和"MALE")
- 日期变量被识别成了字符串
处理缺失值我常用的三板斧:
mvdecode _all, mv(-99) // 将-99设为缺失值标记 mvencode _all, mv(.d) // 统一缺失值编码 drop if missing(income) // 删除收入缺失的样本对于分类变量,一定要用tabulate检查类别分布:
tabulate gender, missing tabulate region, gen(region_dummy) // 自动生成虚拟变量2. 描述性统计:用数据讲好故事
跑回归前不做描述性统计,就像相亲不看对方资料一样危险。我常用的黄金组合是:
summarize price age income, detail // 连续变量 tabulate brand, plot // 分类变量+可视化 correlate price age income // 相关系数矩阵这里有个实用技巧:用estpost保存统计结果,方便导出到论文:
estpost summarize price age income esttab using summary.rtf, cells("mean sd min max") replace最近帮客户分析电商数据时,通过描述性统计发现了个有趣现象:某品牌手机在东部地区售价平均比西部高15%,这直接影响了后续回归模型的设定。所以千万别小看这个步骤!
3. 模型设定与估计:从简单到复杂
终于来到重头戏——回归分析。基础命令很简单:
regress sales price advertising inventory但高手和新手的区别在于懂得添加这些关键参数:
regress sales c.price##i.brand c.advertising#c.inventory, vce(robust)c.表示连续变量i.表示分类变量##包含主效应和交互项vce(robust)使用稳健标准误
模型结果要看懂这几个关键指标:
- F统计量和p值:模型整体显著性
- R-squared:模型解释力
- 系数估计值:影响方向和大小
- t值和p值:单个变量显著性
4. 模型诊断:别被漂亮的R²欺骗
曾经有个硕士生的论文差点翻车,就是因为没做模型诊断。后来我们用这些方法发现了大问题:
异方差检验:
estat hettest // Breusch-Pagan检验 rvfplot // 残差与拟合值散点图多重共线性检测:
estat vif // 方差膨胀因子 collin price advertising inventory // 条件数异常值识别:
predict rstudent, rstudent // 学生化残差 list if abs(rstudent)>2.5 // 列出异常值去年分析医疗数据时,VIF值高达20,说明存在严重共线性。我们最终用逐步回归解决了这个问题:
stepwise, pr(0.05): regress outcome age weight height bp1 bp25. 结果可视化:让数字会说话
好的可视化能让评审专家眼前一亮。我的Stata绘图秘籍:
系数森林图:
coefplot, xline(0) keep(price advertising) levels(95)边际效应图:
margins, at(price=(1000(500)5000)) marginsplot交互效应三维图:
twoway contour sales price advertising, levels(10)记得导出高清图片:
graph export "plot.png", width(2000) replace6. 进阶技巧:让分析更稳健
处理完基础问题后,可以尝试这些进阶方法:
面板数据模型:
xtset id year xtreg y x1 x2, fe robust工具变量法:
ivregress 2sls sales (price = cost_index), first分位数回归:
qreg sales price advertising, quantile(0.25 0.5 0.75)最近用面板固定效应模型分析零售商数据,发现广告投入的回报率被低估了30%,这就是不考虑个体效应的后果。
7. 完整案例:消费者行为分析
让我们用奶粉数据实战演练:
// 数据准备 use milk_powder.dta, clear encode origin, gen(origin_num) encode package, gen(package_num) // 基础回归 regress rating price weight i.origin_num i.package_num // 诊断检验 estat hettest estat vif // 稳健性检验 regress rating c.price##i.origin_num weight, vce(cluster region)这个案例教会我们:价格对评价的影响呈U型曲线,进口奶粉溢价显著,但包装类型的影响不显著。完整分析报告应该包含:
- 描述统计表
- 回归结果表
- 诊断检验结果
- 关键效应可视化
- 稳健性检验说明
记得用esttab输出专业的三线表:
esttab using results.tex, replace b(3) se(3) r2 ar2 star(* 0.1 ** 0.05 *** 0.01)