Stata统计分析命令.docx
《Stata统计分析命令.docx》由会员分享,可在线阅读,更多相关《Stata统计分析命令.docx(14页珍藏版)》请在冰豆网上搜索。
![Stata统计分析命令.docx](https://file1.bdocx.com/fileroot1/2023-3/31/d3fe6992-da3f-4dc6-a68b-616fd2802f89/d3fe6992-da3f-4dc6-a68b-616fd2802f891.gif)
Stata统计分析命令
Stata统计分析常用命令汇总
一、winsorize极端值处理
范围:
一般在1%和99%分位做极端值处理,对于小于1%的数用1%的值赋值,对于大于99%的数用99%的值赋值。
1、Stata中的单变量极端值处理:
stata11.0,在命令窗口输入“finditwinsor”后,系统弹出一个窗口,安装winsor模块
安装好模块之后,就可以调用winsor命令,命令格式:
winsorvar1,gen(newvar)p(0.01)
或者在命令窗口中输入:
sscinstallwinsor安装winsor命令。
winsor命令不能进行批量处理。
2、批量进行winsorize极端值处理:
打开链接:
http:
//personal.anderson.ucla.edu/judson.caskey/data.html,找到winsorizeJ,点击右键,另存为到stata中的ado/plus/目录下即可。
命令格式:
winsorizeJvar1var2var3,suffix(w)即可,这样会生成三个新变量,var1wvar2wvar3w,而且默认的是上下1%winsorize。
如果要修改分位点,则写成如下格式:
winsorizeJvar1var2var3,suffix(w)cuts(595)。
3、Excel中的极端值处理:
(略)
winsor2命令使用说明
简介:
winsor2winsorizeortrim(iftrimoptionisspecified)thevariablesinvarlistatparticularpercentilesspecifiedbyoptioncuts(##).Indefult,newvariableswillbegeneratedwithasuffix"_w"or"_tr",whichcanbechangedbyspecifyingsuffix()option.Thereplaceoptionreplacesthevariableswiththeirwinsorizedortrimmedones.
相比于winsor命令的改进:
(1)可以批量处理多个变量;
(2)不仅可以winsor,也可以trimming;
(3)附加了by()选项,可以分组winsor或trimming;
(4)增加了replace选项,可以不必生成新变量,直接替换原变量。
范例:
*-winsorat(p1p99),getnewvariable"wage_w"
.sysusenlsw88,clear
.winsor2wage
*-left-trimmingat2thpercentile
.winsor2wage,cuts(2100)trim
*-winsorvariablesby(industrysouth),overwritetheoldvariables
.winsor2wagehours,replaceby(industrysouth)
使用方法:
1.请将winsor2.ado和winsor2.sthlp放置于stata12\ado\base\w文件夹下;
2.输入helpwinsor2可以查看帮助文件;
二、描述性统计
1、summarize
命令格式:
su、sum或者summarize[varlist][if][in][weight][,options]
如果summarize或sum后不加任何变量,则默认对数据中的所有变量进行描述统计
options选项:
detail表示产生更加详细的统计变量
Separator(n)表示每n个变量画一条分界线,n=0表示禁止使用分界线
Summarize描述统计输出表中包含:
样本容量、平均数、标准差、最小值和最大值
2、tabstat
命令格式:
tabstat[varlist][if][in][weight][,options]
options选项:
stat(statname)表示设定所需要的统计量
col(stat)或c(s)表示将结果报表转置
统计量:
mean:
平均数count/n:
观测值数目sum:
加总
max/min:
最大值/最小值range:
极差sd:
标准差cv:
变异系数semean:
平均标准误差skewness:
偏度var:
方差
kurtosis:
峰度median/p50:
中位数p#:
#%百分位数
例如:
tabstat[varlist],stat(countmeansdmedianminmaxrange)col(stat)
3、描述性统计结果输出到word或Excel
用sum做的描述性统计:
logout,save(miaoshutongji)wordreplace:
sum
用tabstat做的描述性统计:
logout,save(miaoshutongji)wordreplace:
tabstat[varlist],stat(countmeansdmedianminmaxrange)col(stat)
分组描述:
bysortvar:
三、相关性分析
(一)相关性分析
1、Pearson相关系数命令格式:
correlate(简写:
cor或corr)[varlist][if][in][weight][,options]
2、spearman相关系数命令格式:
spearman[varlist],stats(rhop)
3、在Stata中,命令corr用于计算一组变量间的协方差或相关系数矩阵;
4、命令pwcorr可用于计算一组变量中两两变量的相关系数,同时还可以对相关系数的显著性进行检验;option选项中加上sig可显示显著性水平:
pwcorr[varlist],sig
5、命令pcorr用于计算一组变量中两两变量的偏相关系数并进行显著性检验。
6、Spearman和Pearson检验同在一个表的命令:
corrtbl[varlist],corrvars([varlist])
输出结果中,上三角为Spearman相关系数和显著水平,下三角为Pearson系数和显著水平。
(二)输出相关系数表到word或Excel中
例如:
logout,save(mytable)wordreplace:
pwcorr_apricempgrep78headroomtrunk,star1(0.01)star5(0.05)star10(0.1)
四、截面数据单方程线性回归模型的Stata实现
命令格式:
regress(简写:
reg)depvarindepvars[if][in][weigh][option]
(depvar表示因变量,indepvars表示自变量)
五、异方差的检验与处理
1、检验异方差命令格式:
hettest
2、判断异方差的标准:
看P值的大小来判断,如果P值小于0.05,则不能排除异方差的可能,上图中P值等于0.4584>0.05,因此,可以排除异方差的可能性。
3、处理异方差命令格式:
在reg命令后加上“,r”或者“,robust”即可。
经异方差处理后的回归不显示调整后的R2(adj-R2),如果要查看调整后的R2,再输入命令:
die(r2_a)
六、多重共线性(自变量之间高度相关)命令格式:
vif
(一)判断多重共线性的标准(两个标准必须同时满足):
1、最大的vif大于10;
2、平均的vif大于1。
(二)多重共线性的修正
1、采用逐步回归进行修正,命令格式:
swregdepvarindepvar,pr(0.05)
2、对于含二次项的,使用“对中”的方法,既可以保留二次项,又可以在一定程度上克服多重共线性的问题:
先定义两个变量,分别为该变量减去其均值和该变量的平方,命令如下:
sumvar
genvar1=var-r(mean)
genvar2=var^2
再用新变量代替原来的变量进行回归处理
七、内生性的检验与处理(内生性是指自变量与误差项之间有关系)
1、内生性的检验:
ovtest
看P值的大小来判断,如果P值小于0.05,则不能排除内生性的可能,上图中P值等于0.4717>0.05,因此,可以排除内生性的可能。
2、内生性的处理:
使用工具变量法:
ivreg
内生性的三个来源:
测量误差、遗漏变量和双向因果。
1、变量的内生性。
这个是没有办法单独检验的。
当有合适工具变量时候,是可以检验的,就是hausman检验
2、工具变量的外生性。
这个也是没办法检验的。
当有很多工具变量时候,可以检验是否有不是外生的,就是“过度识别”问题
3、工具变量的相关性。
这个可以说成是“弱工具变量”问题,检验可以通过一阶段的F值。
还可以利用PartialR2。
4、估计方法
stata里面有这么几个2sls,2slssmal、liml、gmm,各自适用情况:
small适合小样本;liml适合弱工具变量;gmm适合异方差。
【例子】
webusehsng2
*Fitaregressionvia2SLS,requestingsmall-samplestatistics
ivregress2slsrentpcturban(hsngval=faminciregion),small
*FitaregressionusingtheLIMLestimator
ivregresslimlrentpcturban(hsngval=faminciregion)
*FitaregressionviaGMMusingthedefaultheteroskedasticity-robustweightmatrix
ivregressgmmrentpcturban(hsngval=faminciregion)
*FitaregressionviaGMMusingaheteroskedasticity-robustweightmatrix,requestingnonrobuststandarderrors
ivregressgmmrentpcturban(hsngval=faminciregion),vce(unadjusted)
*检验
estatafirststage,allforcenonrobust\\\可以查看第一阶段F值,已经partialR2
estatoverid\\\查看是否过度识别
estatendogenous\\\查看是否异方差
regress2slsrentpcturbanhsngval
eststorem1
ivregress2slsrentpcturban(hsngval=faminciregion)
eststorem2
hausmanm1m2\\\内生检验
八、线性方程组的回归分析
命令格式:
sureg(depvar1varlist1)(depvar2varlist2)…(depvarNvarlistN)[if][in][weigh]
九、联立方程组
命令格式:
reg3(depvar1varlist1)(depvar2varlist2)…(depvarNvarlistN)[if][in][weigh]
十、面板数据的固定效应和随机效应
Xtset
固定效应命令格式:
xtregdepvarindepvars[if][in],fe[FE_options]
随机效应命令格式:
xtregdepvarindepvars[if][in],re[FE_options]
hausman检验固定效应还是随机效应?
【例子】
xtregyvar1var2var3,fe
eststorefe
xtregyvar1var2var3,re
eststorere
hausmanfere,sigmamore
hausmanfere,sigmaless
*sigmamore利用有效估计量方差,即re
*sigmaless利用一致估计量方差,即fe
十一:
Stata回归结果的导出
1、在命令窗口中输入:
sscinstallesttab,安装命令esttab
2、reg回归
3、esttabusingfilename.rtf将以word形式输出回归结果,后缀改成.xls或者.csv则以Excel格式输出,输出内容为变量名称和相应的回归系数,t值,显著性水平标识。
系统默认显著性水平是0.001,0.01和0.05,若要改成0.01,0.05和0.1,则输出esttabm1m2usingaaa.rtf,star(*0.10**0.05***0.01)。
4、批量输出回归结果:
每运行一个regression,存起来:
eststorem1。
m1是你要改的,第一个model所以我叫m1,第二个的话指令就变成eststorem2,依次类推,最后运行指令:
esttabm1m2...usingtest.rtf。
esttabm11111usingaaaaa.rtf,star(*0.10**0.05***0.01)b(%6.4f)
5、outreg2可以将回归结果导入word、excle、latex等,而且可以根据自己需要改变格式:
sscinstalloutreg2
useauto,clear
[varlist]
eststorem1
outreg2[m1]usingtest.doc,replace
十二、合并样本(将关键词相同的多个样本合并为一个)
命令格式:
duplicatesdropvarlist,force
例如将同一企业在同一天发生的多起并购合为一起,可根据证券代码和公告日期关键词,将其合并,命令:
duplicatesdropcompany_idevent_date,force
十三、均值t检验
命令格式:
ttestCAR1==CAR2,unpaired
十四、中位数Z检验(非参数Wilcoxon秩和检验)
命令格式:
ranksumvar,by(groupvar)
groupvar为分组变量
十五、检验两组均值的显著性差异,在t检验的后面数值上面加星号
可以用ttest命令执行检验,它会直接报告星号。
亦可采用外部命令meantab执行检验,自己根据t值大小标注星号。
helpmeantab//这个最好用
sysusenlsw88,clear
meantabcollgradwagehoursttl_exptenure,///
over(union)tstatdiffnoncells
另有一个李春涛老师编写的命令,可以直接标注星号:
finditttable//多变量,两组差异
十六、删除有缺失值的样本
egenmis=rowmiss(_all)
dropifmis
条件语句:
cond
例如:
cond(missing(x),.,cond(x>2,50,70))returns.ifxismissing,returns50ifx>2,andreturns70ifx<2
十七、中心化处理与标准化处理
1、安装命令:
finditcenter
2、中心化:
centervarlist(注:
生成的新变量默认加前置”c_”,可一次对多个变量进行处理)
或:
centervar,g(newvar)(注:
只能对一个变量进行中心化,并生成给定名称的新变量)
3、标准化:
centervarlist,prefix(z_)standardize(注:
生成的新变量加前置”z_”,可多个,可更改)
十八、恢复数据命令
preserve(处理数据前使用该命令,否则没有数据可恢复)
dropvar1-var100(处理数据)
restore(恢复数据)
十九、genicv产生交叉项
【问题】
有时候,想生成很多交叉项,但是又不愿意一个一个写。
有时候,想看一个交叉项,但是又不愿意生成。
【方法】
genicv可以一键生成很多交叉项
##可以直接表示交叉项。
【例子】
sscinstallgenicv
sysuseauto,clear
genicvlengthweightforeign//会生成4个交叉项,所有可能情况,并且有label
regpricelengthweightlength_weight
*如果不愿意生成,直接用
regpricec.length##c.weight\\\和上面回归一样一样的
二十、用stata统计变量的个数,但是要去掉重复的部分
bysid:
gn=_n
countifn==1
二十一、stata中的主成分分析法
1、首先,需要对变量进行哪些检验?
KMO?
还有什么?
KMO检验结果符合什么条件才能继续进行主成分分析?
答:
首先使用KMO检验和SMC检验。
KMO的判断为,UsingtheKaiser(1974)characterizationofKMOvalues,
0.00to0.49unacceptable
0.50to0.59miserable
0.60to0.69mediocre
0.70to0.79middling
0.80to0.89meritorious
0.90to1.00marvelous
SMC即一个变量与其他所有变量的复相关系数的平方,也就是复回归方程的可决系数。
SMC比较高表明变量的线性关系越强,共性越强,主成分分析就越合适。
命令是
estatkmo
estatsmc
确定是否需要进行主成分分析。
如果有些KMO或者SMC值太小,则要考虑要不要将它们放入主成分中。
然后进行主成分回归。
使用命令为:
pcavarlist(不清楚就helppca)
2、例如,对Y的5各指标执行了命令pcay1y2y3y4y5得出结果方差贡献率(proportion)就是权重吗?
答:
不是。
假如设定方差贡献率为95%,那么,累积方差超过95%的那几个特征值、所对应的特征变量,就是权重。
3、看有的帖子上回复说,需要接着执行predicty1y2y3y4y5,score,这是为了得到每个指标的主成分得分吗?
为什么我执行了一下,只生成了一个y1,别y2、y3、y4、y5都没生成呢
答:
直接“predicty1-y4”就可以。
生成的四个就是得分。
4、不知道你要问什么?
总之,主成分的步骤为
1、先通过KMO检验和SMC检验确定是否需要主成分分析
2、进行主成分分析,通过累计贡献率确定需要的哪几个主成分
3、根据情况看是否需要rotate
4、通过predict进行得分。
或者通过scoreplot看得分分布图。
二十二、将一般的数据转化为面板数据
原数据的形式(excel中)是:
2008一张sheet,2009一张sheet。
。
。
。
。
即:
然后改成这样的数据形式是:
粘贴在stata里就是这样的形式(注意:
变量名字一定要改):
其中Y为因变量,可以是很多个,X1、X2为自变量,也可以是很多个,stata中的变量名依次为:
id、Y2008、Y2009、Y2010、X12008、X12009、X12010、X22008、X22009、X22010
在stata中输入命令:
reshapelongYX1X2,i(id)j(year)回车即可,变为:
二十三、关于数值型转换为字符型的问题
1、股票代码导入STATA后都变成数值型,现想用tostring命令变回字符型,但长度小于6位的代码,在变回字符型后在前面补够不足6位的0。
方法:
formatvariable%06s
这只是在显示上补充了0,没有在值上补充。
以下可以改变x的值:
replacex=substr("000000"+x,-6,6)
2、将一个12位的数值转换为字符,再从字符里提取前五个字符。
转成字符后以科学计数法显示,提取前五位数是提取的科学计数法的前五位,如将110102002016转成字符后显示为1.10e+11,提取时提的是“1.10e”而不是我想要的“11010”
gy=substr(string(x,"%12.0f"),1,5)
3、将字符型转化为数值型命令为:
destringvar,replace(转换后替换原来的值)
若字符型中含其他符号并要生成新变量则用:
destring varlist, gen(newvarlist) ignore(“$ ,%”)
二十四、分组
均分四组:
sortvar
xtileprop=var,nq(x)(括号中的x代表分成的group数)
例如:
sortinsto_ma
xtileprop=insto_ma,nq(4)//以insto_ma的四分位点分成四组
sortpropinsto_msd
egenstdI=xtile(insto_msd),by(prop)nq(4)//按prop,以insto_msd的四分位点分成四组
二十五、估计残差
做完回归后,使用命令predicte,r
排列组合计算
:
dicomb(3,2),dicomb(4,2)
取整:
1.ceil(x),returnstheuniqueintegernsuchthatn-12.floor(x),returnstheuniqueintegernsuchthatn<=x3.int(x),returnstheintegerobtainedbytruncatingxtoward0;thus,int(5.2)=5,int(-5.8)=-5,returnsx(not“.”)ifxismissing,meaningthatint(.a)=.a。
Onewaytoobtaintheclosestintegertoxisint(x+sign(x)/2),whichsimplifiestoint(x+0.5)forx_0.However,useoftheround()functionispreferred