数据清洗, 管理和操作Stata命令汇编, 附上常用计量方法操作code!
凡是搞计量经济的,都关注这个号了
邮箱:econometrics666@sina.cn
所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.
上一日,引荐了“用Stata学习计量经济学的小技巧, 直接附上学习code和对应解释!”,对各位学者起到很大帮助作用!
**调整变量格式:
format x1 %10.3f //将x1的列宽固定为10,小数点后取三位
format x1 %10.3g //将x1的列宽固定为10,有效数字取三位
format x1 %10.3e //将x1的列宽固定为10,采用科学计数法
format x1 %10.3fc //将x1的列宽固定为10,小数点后取三位,加入千分位分隔符
format x1 %10.3gc //将x1的列宽固定为10,有效数字取三位,加入千分位分隔符
format x1 %-10.3gc //将x1的列宽固定为10,有效数字取三位,加入千分位分隔符,加入“-”表示左对齐
**对样本进行随机筛选:
sample 50 //在观测案例中随机选取50%的样本,其余删除
sample 50,count //在观测案例中随机选取50个样本,其余删除
**查看与编辑数据:
browse x1 x2 if x3>3 //按所列变量与条件打开数据查看器
edit x1 x2 if x3>3 //按所列变量与条件打开数据编辑器
**简单统计量的计----------------------------------------------------------
ameans x //计算变量x的算术平均值、几何平均值和简单调和平均值,均显示样本量和置信区间
mean var1 [pweight = var2] //求取分组数据的平均值和标准误,var1为各组的赋值,var2为每组的频数
summarize y x1 x2,detail //可以获得各个变量的百分比数、最大最小值、样本量、平均数、标准差、方差、峰度、偏度
summarize var1 [aweight = var2], detail //求取分组数据的统计量,var1为各组的赋值,var2为每组的频数
tabstat X1,stats(mean n q max min sd var cv //计算变量X1的算术平均值、样本量、四分位线、最大最小值、标准差、方差和变异系数
**概率分布的计算:
**贝努利概率分布测试:
webuse quick
bitest quick==0.3,detail //假设每次得到成功案例‘1’的概率等于0.3,计算在变量quick所显示的二项分布情况下,各种累计概率和单个概率是多少
bitesti 10,3,0.5,detail //计算当每次成功的概率为0.5时,十次抽样中抽到三次成功案例的概率:低于或高于三次成功的累计概率和恰好三次成功概率
**泊松分布概率:
display poisson(7,6) //计算均值为7,成功案例小于等于6个的泊松概率
display poissonp(7,6) //计算均值为7,成功案例恰好等于6个的泊松概率
display poissontail(7,6) //计算均值为7,成功案例大于等于6个的泊松概率
**超几何分布概率:
display hypergeometricp(10,3,4,2) //计算在样本总量为10,成功案例为3的样本总体中,不重置地抽取4个样本,其中恰好有2个为成功案例的概率
display hypergeometric(10,3,4,2) //计算在样本总量为10,成功案例为3的样本总体中,不重置地抽取4个样本,其中有小于或等于2个为成功案例的概率
**检验极端值的步骤--------------------------------
**常见命令:tabulate、stem、codebook、summarize、list、histogram、graph box、gragh matrix
**第一步,用codebook、summarize、histogram、graph boxs、graph matrix、stem看检验数据的总体情况:
codebook y x1 x2
summarize y x1 x2,detail
histogram x1,norm //正态直方图
graph box x1 //箱图
graph matrix y x1 x2,half //画出各个变量的两两x-y图
stem x1 //做x1的茎叶图
**第二部,用tabulate、list细致寻找极端值
tabulate code if x1==极端值 //作出x1等于极端值时code的频数分布表,code表示地区、年份等序列变量,这样便可找出那些地区的数值出现了错误
list code if x1==极端值 //直接列出x1等于极端值时code的值,当x1的错误过多时,不建议使用该命令
list in -20/l //l表示last one,-20表示倒数第20个样本,该命令列出了从倒数第20个到倒数第一个样本的各变量值
**第三部,用replace命令替换极端值
replace x1=? if x1==极端值
keep if y<1000
drop if y>1000 //去除极端值
**数据排序-----------------------------------
sort x //对数据排序
gsort +x //对数据按x进行升序排列
gsort -x //对数据按x进行降序排列
gsort -x, generate(id) mfirst //对数据按x进行降序排列,缺失值排最前,生成反映位次的变量id
order y x3 x1 x2 //将变量按照y、x3、x1、x2的顺序排列
**生成新变量----------------------------------
gen logx1=log(x1) //得出x1的对数
gen x1=exp(logx1) //将logx1反对数化
gen r61_100=1 if rank>=61&rank<=100 //若rank在61与100之间,则新变量r61_100的取值为1,其他为缺失值
replace r61_100 if r61_100!=1 //“!=”表示不等于,若r61_100取值不为1,则将r61_100替换为0,就是将上式中的缺失值替换为0
gen abs(x) //取x的绝对值
gen ceil(x) //取大于或等于x的最小整数
gen trunc(x) //取x的整数部分
gen round(x) //对x进行四舍五入
gen round(x,y) //以y为单位,对x进行四舍五入
gen sqrt(x) //取x的平方根
gen mod(x,y) //取x/y的余数
gen reldif(x,y) //取x与y的相对差异,即|x-y|/(|y|+1)
gen logit(x) //取ln[x/(1-x)]
gen x=autocode(x,n,xmin,xmax) //将x的值域,即xmax-xmin,分为等距的n份
gen x=cond(x1>x2,x1,x2) //若x1>x2成立,则取x1,若x1>x2不成立,则取x2
sort x
gen gx=group(n) //将经过排序的变量x分为尽量等规模的n个组
egen zx1=std(x1) //得出x1的标准值,就是用(x1-avgx1)/sdx1
egen zx1=std(x1),m(0) s(1) //得出x1的标准分,标准分的平均值为0,标准差为1
egen sdx1=sd(x1) //得出x1的标准差
egen meanx1=mean(x1) //得出x1的平均值
egen maxx1=max(x1) //最大值
egen minx1=min(x1) //最小值
egen medx1=med(x1) //中数
egen modex1=mode(x1) //众数
egen totalx1=total(x1) //得出x1的总数
egen rowsd=sd(x1 x2 x3) //得出x1、x2和x3联合的标准差
egen rowmean=mean(x1 x2 x3) //得出x1、x2和x3联合的平均值
egen rowmax=max(x1 x2 x3) //联合最大值
egen rowmin=min(x1 x2 x3) //联合最小值
egen rowmed=med(x1 x2 x3) //联合中数
egen rowmode=mode(x1 x2 x3) //联合众数
egen rowtotal=total(x1 x2 x3) //联合总数
egen xrank=rank(x) //在不改变变量x各个值排序的情况下,获得反映x值大小排序的xrank
**数据计算器display命令---------------------------
display x[12] //显示x的第十二个观察值
display chi2(n,x) //自由度为n的累计卡方分布
display chi2tail(n,x) //自由度为n的反向累计卡方分布,chi2tail(n,x)=1-chi2(n,x)
display invchi2(n,p) //卡方分布的逆运算,若chi2(n,x)=p,那么invchi2(n,p)=x
display invchi2tail(n,p) //chi2tail的逆运算
display F(n1,n2,f) //分子、分母自由度分别为n1和n2的累计F分布
display Ftail(n1,n2,f) //分子、分母自由度分别为n1和n2的反向累计F分布
display invF(n1,n2,P) //F分布的逆运算,若F(n1,n2,f)=p,那么invF(n1,n2,p)=f
display invFtail(n1,n2,p) //Ftail的逆运算
display tden(n,t) //自由度为n的t分布
display ttail(n,t) //自由度为n的反向累计t分布
display invttail(n,p) //ttail的逆运算
**给数据库和变量做标记-----------------------------
label data "~~~" //对现用的数据库做标记,"~~~"就是标记,可自行填写
label variable x "~~~" //对变量x做标记
label values x label1 //赋予变量x一组标签:label1
label define label1 1 "a1" 2 "a2" //定义标签的具体内容:当x=1时,标记为a1,当x=2时,标记为a2
**频数表-----------------------------------
tabulate x1,sort
tab1 x1-x7,sort //做x1到x7的频数表,并按照频数以降序显示行
table c1,c(n x1 mean x1 sd x1)//在分类变量c1的不同水平上列出x1的样本量和平均值
**二维交互表------------------------------
webuse auto
table rep78 foreign, c(n mpg mean mpg sd mpg median mpg) center row col //rep78,foreign均为分类变量,rep78为行变量,foreign为列变量,center表示结果显示在单元格中间,row表示计算行变量整体的统计量,col表示计算列变量整体的统计量
tabulate x1 x2,all //做x1和x2的二维交互表,要求显示独立性检验chi2、似然比卡方独立性检验lrchi2、对定序变量适用的等级相关系数gamma和taub、以及对名义变量适用的V
tabulate x1 x2,column chi2 //做x1和x2的二维交互表,要求显示列百分比和行变量和列变量的独立性检验——零假设为变量之间独立无统计关系
tab2 x1-x7,all nofreq //对x1到x7这七个变量两两地做二维交互表,不显示频数:nofreq
**三维交互表----------------------------------------
by x3,sort:tabulate x1 x2,nofreq col chi2 //同时进行x3的每一个取值内的x1和x2的二维交互表,不显示频数、显示列百分比和独立性检验
**四维交互表-----------------------------------------
table x1 x2 x3,c(ferq mean x1 mean x2 mean x3) by(x4)
tabstat X1 X2,by(X3) stats(mean n q max min sd var cv) col(stats)
tabstat X1 X2,by(X3) stats(mean range q sd var cv p5 p95 median),[aw=X4] //以X4为权重求X1、X2的均值,标准差、方差等
ttest X1=1
count if X1==0
count if X1>=0
gen X2=1 if X1>=0
corr x1 x2 x3 //做x1、x2、x3的相关系数表
swilk x1 x2 x3 //用Shapiro-Wilk W test对x1、x2、x3进行正太性分析
sktest x1 x2 x3 //对x1、x2、x3进行正太性分析,可以求出峰度和偏度
ttest x1=x2 //对x1、x2的均值是否相等进行T检验
ttest x1,by(x2) unequal //按x2的分组方式对x1进行T检验,假设方差不齐性
sdtest x1=x2 //方差齐性检验
sdtest x1,by(x2) //按x2的分组方式对x1进行方差齐性检验
**聚类分析-----------------------------------------------
cluster kmeans y x1 x2 x3, k(3) //依据y、x1、x2、x3,将样本分为n类,聚类的核为随机选取
cluster kmeans y x1 x2 x3, k(3) measure(L1) start(everykth) //"start"用于确定聚类的核,"everykth"表示将通过构造三组样本获得聚类核:构造方法为将样本id为1、1+3、1+3×2、 1+3×3……分为一组、将样本id为2、2+3、2+3×2、2+3×3……分为第二组,以此类推,将这三组的均值作为聚类的核;"measure"用 于计算相似性和相异性的方法,"L1"表示采用欧式距离的绝对值,也直接可采用欧式距离(L2)和欧式距离的平方(L2squared)。PS:这个方法 所得的结果与SPSS所得结果相同。
sort c1 c2 //对c1和c2两个分类变量排序
by c1 c2:reg y x1 x2 x3 //在c1、c2的各个水平上分别进行回归
bysort c1 c2:reg y x1 x2 x3 if c3=1 //逗号前面相当于将上面两步骤合一,既排序又回归,逗号后面的“if c3=1”表示只有在c3=1的情况下才进行回归
stepwise, pr(.2): reg y x1 x2 x3 //使用Backward selection,去除P值大于0.2时变量
stepwise, pe(.2): reg y x1 x2 x3 //使用forward selection,去除P值小于0.2时变量
stepwise, pr(.2) pe(.01):reg y x1 x2 x3 //使用backward-stepwise selection,取P值在0.01和0.2之间的变量
stepwise, pe(.2) forward: reg y x1 x2 x3 //使用forward-stepwise selection
reg y x1 x2 x3
predict Yhat,xb
predict u,resid
predict ustd,stdr //获得残差的标准误
predict std,stdp //获得y估计值的标准误
predict stdf,stdf //获得y预测值的标准误
predict e,e(1,12) //获得y在1到12之间的估计值
predict p,pr(1,12) //获得y在1到12之间的概率
predict rstu,rstudent //获得student的t值
predict lerg,leverage //获得杠杆值
predict ckd,cooksd //获得cooksd
mvreg Y1 Y2 ……: X1 X2 X3……//多元回归
mvreg y1 y2 y3: x1 x3 x3 //多元回归分析,y1 y2 y3为因变量,x1 x3 x3为自变量
test [y1] //测试对y1的回归系数联合为0
test [y1]: x1 x2 //测试对y1的回归中x1、x2的系数为0
test x1 x2 x3 //测试在所有的回归中,x1、x2、x3的系数均为0
test [y1=y2] //对y1的回归和对y2的回归系数相等
test [y1=y2]: x1 x2 x3, mtest //对y1和y2的回归中,分别测试x1、x2、x3的系数是否相等,若没有mtest这个命令,则测试他们的联和统计
test [y1=y2=y3] //三个回归的系数是否相等,可加mtest以分别测试
test [y1=y2=y3]: x1 x2 //测试三个回归中的x1、x2是否相等,可加mtest
**est命令的用法--------------------
**储存回归结果:
reg y x1 x2 x3 //不限于reg,也可储存ivreg、mvreg、reg3
est store A
**重现回归结果:
est replay A
**对回归结果进行进一步分析:
**画图--------------------------------
茎叶图:
stem x1,line(2) //做x1的茎叶图,每一个十分位的树茎都被拆分成两段来显示,前半段为0~4,后半段为5~9
stem x1,width(2) //做x1的茎叶图,每一个十分位的树茎都被拆分成五段来显示,每个小树茎的组距为2
stem x1,round(100) //将x1除以100后再做x1的茎叶图
直方图:
histogram mpg, discrete frequency normal xlabel(1(1)5) //discrete表示变量不连续,frequency表示显示频数,normal加入正太分布曲线,xlabel设定x轴,1和5为极端值,(1)为单位
histogram price, fraction norm //fraction表示y轴显示小数,除了frequency和fraction这两个选择之外,该命令可替换为“percent”百分比,和“density”密度;未加上discrete就表示将price当作连续变量来绘图)
histogram price, percent by(foreign) //按照变量“foreign”的分类,将不同类样本的“price”绘制出来,两个图分左右排布
histogram mpg, discrete by(foreign, col(1)) //按照变量“foreign”的分类,将不同类样本的“mpg”绘制出来,两个图分上下排布
histogram mpg, discrete percent by(foreign, total) norm //按照变量“foreign”的分类,将不同类样本的“mpg”绘制出来,同时绘出样本整体的“总”直方图
二变量图:
graph twoway lfit price weight || scatter price weight //作出price和weight的回归线图——“lfit”,然后与price和weight的散点图相叠加
twoway scatter price weight,mlabel(make) //做price和weight的散点图,并在每个点上标注“make”,即厂商的取值
twoway scatter price weight || lfit price weight,by(foreign) //按照变量foreign的分类,分别对不同类样本的price和weight做散点图和回归线图的叠加,两图呈左右分布
twoway scatter price weight || lfit price weight,by(foreign,col(1)) //按照变量foreign的分类,分别对不同类样本的price和weight做散点图和回归线图的叠加,两图呈上下分布
twoway scatter price weight [fweight= displacement],msymbol(oh) //画出price和weight的散点图,“msybol(oh)”表示每个点均为中空的圆圈,[fweight= displacement]表示每个点的大小与displacement的取值大小成比例
twoway connected y1 time,yaxis(1) || y2 time,yaxis(2) //画出y1和y2这两个变量的时间点线图,并将它们叠加在一个图中,左边“yaxis(1)”为y1的度量,右边“yaxis(2)”为y2的)
twoway line y1 time,yaxis(1) || y2 time,yaxis(2) //与上图基本相同,就是没有点,只显示曲线
graph twoway scatter var1 var4 || scatter var2 var4 || scatter var3 var4 //做三个点图的叠加
graph twoway line var1 var4 || line var2 var4 || line var3 var4 //做三个线图的叠加
graph twoway connected var1 var4 || connected var2 var4 || connected var3 var4 //叠加三个点线相连图
graph matrix a b c y //画出一个散点图矩阵,显示各变量之间所有可能的两两相互散点图
graph matrix a b c d,half //生成散点图矩阵,只显示下半部分的三角形区域
graph matrix price mpg weight length,half by( foreign,total col(1) ) //根据foreign变量的不同类型绘制price等四个变量的散点图矩阵,要求绘出总图,并上下排列
graph box y,over(x) yline(.22) //对应x的每一个取值构建y的箱型图,并在y轴的0.22处划一条水平线
graph bar (mean) y,over(x) //对应x的每一个取值,显示y的平均数的条形图。括号中的“mean”也可换成median、sum、sd、p25、p75等
graph bar a1 a2,over(b) stack //对应在b的每一个取值,显示a1和a2的条形图,a1和a2是叠放成一根条形柱。若不写入“stack”,则a1和a2显示为两个并排的条形柱
graph dot (median)y,over(x) //画点图,沿着水平刻度,在x的每一个取值水平所对应的y的中位数上打点
qnorm x //画出一幅分位-正态标绘图
rchart a1 a2 a2 //画出质量控制R图,显示a1到a3的取值范围
**静态面板数据(Panel Data)--------------------------------
**基本回归:
xtreg y x1 x2,re
est store re
xtreg y x1 x2,fe
est store fe
hausman re fe //如果hausman检验的结果为显著,则采用固定效应(fe)模型,不显著,则选取随机效应(re)模型
**随机效应的检验:
xtreg y x1 x2,re
xttest0
xttest1 //xttest1是xttest0的扩展,若这xttest0的结果为显著,则采用随机效应(re)模型
**固定效应模型,可采用广义最小二乘法(gls)进行估算,也可采用固定效应方程(fe):
xtserial y x1 x2 //xtserial用于检验固定效应模型中的一阶序列自相关,可通用于xtgls和fe之前
xtgls y x1 x2
xttest2 //xttest2用于检验不同厂商的相似性,若显著则各厂家的截面相似,可通用于xtgls和fe之后
xttest3 //xttest3用于检验固定效应模型中的异方差问题,若显著则有异方差,可通用于xtgls和fe之后
**异方差相关问题---------------------------------------------
**获得稳健性标准误:
reg y x1 x2 x3 if c1==1 //当分类变量c1=1时,进行y和诸x的回归
reg y x1 x2 x3,robust //回归后显示各个自变量的异方差-稳健性标准误
estat vif //回归之后获得VIF
estat hettest,mtest //异方差检验
**异方差检验----------
**Breusch-pagan法:
reg y x1 x2 x3
predict u,resid
gen usq=u^2
reg usq x1 x2 x3
display R/(1-R)*n2/n1 //n1,n2为自由度
display Ftail(……) //求F值
display R*n //n表示总样本量
display chi2tail(……) //求LM值
**white法:
reg y x1 x2 x3
predict u,resid
gen usq=u^2
predict y
gen ysq=y^2
reg usq y ysq
display R/(1-R)*n2/n1 //n1,n2为自由度
display Ftail(……) //求F值
display R*n //n表示总样本量
display chi2tail(……) //求LM值
**F值和LM值转换为P值的命令:
display Ftail(n1,n2,a) //a为F值
display chi2tail(n3,b) //n3表示自由度的损失量,一般等于n1,b为LM值
**异方差的纠正——WLS(weighted least square estimator)---------------
**基本思路:
reg y x1 x2 x3 [aw=x1] //将x1作为异方差的来源,对方程进行修正
reg y/(x1^0.5) 1/(x1^0.5) x1/(x1^0.5) x2/(x1^0.5) x3/(x1^0.5),noconstant //与上式是相同的
**纠正异方差,通过构造h值
reg y x1 x2 x3
predict u,resid
gen usq=u^2
gen logusq=log(usq)
reg logusq x1 x2 x3
predict g
gen h=exp(g)
reg y x1 x2 x3 [aw=1/h]
**异方差hausman检验:
reg y x1 x2 x3
est store A //将上述回归结果储存到A中
reg y x1 x2 x3 [aw=1/h]
est store B
hausman A B
**时间序列回归的自相关检验:
**回归元严格外生时AR(1)序列相关的检验:
reg y x1 x2
predict u,resid
gen u_1=u[_n-1]
reg u u_1,noconstant //回归之后,u_1的序数如果不异于零,则该序列不相关
**用DW检验序列相关:
tsset year //对时间序列回归中代表时间的变量进行定义
reg y x1 x2
dwstat //求出时间序列回归的DW值
durbina //对该回归是否具有序列相关进行检验,H0为无序列相关,可根据chi2值求出P值
durbina,small //small可以根据F值求出P值,以代替chi2值
durbina,force //让检验能在robust、neway之后进行
durbina,small lag(1/10) //lag可以求出更高阶滞后的序列相关,如本例中可求出1到10阶的序列相关
durbina,robust lag(1/10) //robust可进行异方差—稳健性回归,避免未知形式的异方差
bgodfrey //利用Breusch-Godfrey test求出高阶序列相关
bgodfrey,small lag(1/10)
**方差分析----------------------------------------------
**一元方差分析
anova y g1 / g1|g2 //g*表示不同分类变量,计算g1和交互项/ g1|g2 /这两种分类的y值是否存在组内差异
anova y d1 d2 d1*d2//d*表示虚拟变量,计算d1、d2和d1*d2的这三种分类的y值是否有组内差异
anova y d1 d2 x1 d2*x1, continuous(x1) //x*表示连续的控制变量
**多元方差分析
webuse jaw
manova y1 y2 y3 = gender fracture gender*fracture //按性别、是否骨折及二者的交互项对y1、y2和y3进行方差分析
manova y1 = gender fracture gender*fracture //相当于一元方差分析,以y1为因变量
webuse nobetween
gen mycons = 1
manova test1 test2 test3 = mycons, noconstant
mat c = (1,0,-1 \ 0,1,-1)
manovatest mycons, ytransform(c)
**进行多元回归的方法---------------------------------
**方法一
foreach vname in y1 y2 y3 { //确定y变量组vname
reg `vname' x1 x2 x3 //将y变量组中的各个变量与诸x变量进行回归分析,注意vname的标点符号
}
**方法二
mvreg y1 y2 y3 = x1 x2 x3 //
**reg3命令--------------------------------------------
**(1)简单用法:
reg3 (y1 = x1 x2 x3) (y2 = x1 x3 x4) (y3 = x1 x2 x5)
test [y1] //测试y1 coefs = 0
test [y1=y2=y3], common //测试不同回归中相同变量的系数:
test ([y1=y2]) ([y1=y3]), common constant(constant表示包含截距项)
**(2)用reg3进行2SLS:
reg3 (y1 = y2 x1 x2) (y2 = y1 x4),2sls
**(3)用reg3进行OLS:
reg3 (y1 = y2 x1 x2) (y2 = y1 x4),ols
**(4)对两个回归结果进行hausman检验:
reg3 (y1=x1 x2 x3)(y2=y1 x4),2sls
est store twosls
reg3 (y1=x1 x2 x3)(y2=y1 x4),ols
est store ols
hausman twosls ols,equations(1:1)//对两次回归中的方程1,即“y1=x1 x2 x3”进行hausman检验
hausman twosls ols,equations(2:2)//对两次回归中的方程2,即“y2=y1 x4”进行hausman检验
hausman twosls ols,alleqs//对所有方程一起进行检验
**RESET检验遗漏变量:
reg y x1 x2 x3
estat ovtest
2.5年,计量经济圈近1000篇不重类计量文章,
可直接在公众号菜单栏搜索任何计量相关问题,
Econometrics Circle
数据系列:空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 | 夜间灯光 | 官员方言 | 微观数据 | 内部数据计量系列:匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID数据处理:Stata | R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |干货系列:能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI | SSCI查询 | 名家经验计量经济圈组织了一个计量社群,有如下特征:热情互助最多、前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。