在Stata课堂有很多学员的提问很具有代表性,老师给予了详细精彩的回答,现计划把一些典型问题+讲师解答汇总作为一个系列帖子发布出来,持续更新,希望对大家有帮助
Q1. Stata12的绿色版本下载A: 从这里(https://bbs.pinggu.org/thread-1151347-1-1.html)下载了Stata12的绿色版本,除了不能在线更新外,别的功能都很正常。Q2. Stata12 的 Manual:(Stata12电子手册)下载:A:从这里( https://bbs.pinggu.org/thread-1147028-1-1.html )下载Stata12 的 Manual:(Stata12电子手册)
Q3.STATA 12 关联帮助文件的方法
A: 下载了软件Stata12软件和Stata12 的 Manual:(Stata12电子手册)后,为了能从stata12内部直接连接到PDF电子手册,需要作如下设定。
处理方法:
1. 将上述连接中提供的doc1.rar和doc2.rar下载到硬盘上,解压后将PDF文档放置于 D:\stata12\docs 目录中;
2. 更改PDF文件的名称,以便Stata12的帮助文件能够直接识别这些PDF文件,更名方法如下:
更改后的文件名 | https://bbs.pinggu.org/thread-1147028-1-1.html 提供的文件名 |
d | STATA DATA-MANAGEMENT REFERENCE MANUAL RELEASE 12 |
g | STATA GRAPHICS REFERENCE MANUAL RELEASE 12 |
gsw | GETTING STARTED WITH STATA FOR WINDOWS RELEASE 12 |
i | STATA QUICK REFERENCE AND INDEX RELEASE 12 |
ig | Stata Release 12 Installation Guide |
m | MATA REFERENCE MANUAL RELEASE 12 |
mi | STATA MULTIPLE IMPUTATION REFERENCE MANUAL RELEASE 12 |
mv | STATA MULTIVARIATE STATISTICS REFERENCE MANUAL RELEASE 12 |
p | STATA PROGRAMMING REFERENCE MANUAL RELEASE 12 |
r | STATA BASE REFERENCE MANUAL RELEASE 12 |
sem | STATA SEM REFERENCE MANUAL RELEASE 12 |
st | STATA SURVIVAL ANALYSIS AND EPIDEMIOLOGICAL TABLES REFERENCE MANUAL RELEASE 12 |
stoc | Combined subject table of contents |
svy | STATA SURVEY DATA REFERENCE MANUAL RELEASE 12 |
ts | STATA TIME SERIES REFERENCE MANUAL RELEASE 12 |
u | STATA USER’S GUIDE RELEASE 12 |
xt | STATA LONGITUDINAL DATA PANEL DATA REFERENCE MANUAL RELEASE 12 |
完成更名后的效果如下:
完成上述设定后,在Stata12命令窗口中输入:
help regress
点击帮助文件中 Title 下方的蓝色链接 [R] regress,即可打开相应的 PDF 电子说明书。
Q4. 英文操作系统 stata完美支持中文的方法
A:这里是针对英文的windowsxp操作系统。
有时候遇到英文操作系统下stata的结果中汉字拷贝会出现乱码的情况,下面是解决方法。
英文操作系统完美支持中文的方法不用担心,除了界面是英文的,其他使用上与中文版的没什么区别,设置好以下几处
就好了: 都在windows的(控制面板)Control Panel -> Regional and Language Options中
1.在Language页中选上Install files for East Asian Languages, 点Apply。
2.Regional Options页上,将Standards and formats选为China(PRC), Location
选为China。
3.Advanced页上,将Language for non-Unicode programs选为Chinese(PRC)
4.重启计算机
5.再在Language页中点击Text service andinput languages的“Detail”,将
Chinese(PRC)-Chinese(Simplified)-US Keyboard设置为默认输入法,再添加你喜欢
的输入法。
其中1,3,5是重要的步骤。如果没有3,绝大部分中文程序都会显示乱码,如果
没有5,在不同程序间拷贝中文就会变成乱码。
这些数字考进stata后
10901000301006000025
10901000301006000035
10901000301006000035
10901000301006000036
全部变成了科学计数法这种了:
1.090e+19
1.090e+19
1.090e+19
1.090e+19
1.090e+19
1.090e+19
求助老师了,怎么样把这个科学计数法变回原来的数字呢?原来的数字(像10901000301006000025这种)可以唯一识别每个观察值,科学计数法则很多观察值都一样了!求助!
说明:
1、在excel里这个数字是用“文本”格式存储的,我就直接从excel往stata里考,考的全都是科学计数法;
2、老师说的xml格式无论如何搞不成;
3、存成csv格式然后insheetusing也还是科学计数法。
请老师指点啊!
A: formatx %20.0f
Q6. stata如何去掉观测值全是缺失值的变量,非drop v一个个的删
A:sysuseauto,clear
*-删除所有观察值缺失的变量(不包括文字变量)
foreachv of varlist _all{
localvtype: type `v'
*dis"`vtype'"
localyesstr = strmatch("`vtype'","str*")
*dis`yesstr'
quisum `v'
if`r(N)'==0&`yesstr'==0{
drop `v'
}
}
*-取出变量的标签 helpextended_fcn
localvlabel: var label make
dis"`vlabel'"
*-取出 abcd 与 bcde 的交集
*settrace on
locala "abcd"
localna = length("`a'")
localb "bcde"
localmatch "" // 存放结果
forvaluesi = 1/`na'{
local a_i = substr("`a'",`i',1)
ifstrpos("`b'","`a_i'")>=1{
local match"`match'""`a_i'"
}
}
dis"`match'"
Q7:OLS 和 PSM 的本质差别何在?我在用倾向得分匹配方法做某一问题研究时,结果发现OLS对差距的T检验非常显著,而PSM却非常不显著,这能说明什么问题呢?
处理效应 | 处理组(补贴组) | 对照组(非补贴组) | 差距 | 标准误 | T检验值 |
OLS | 3.5278 | 3.3832 | 0.1447 | 0.0027 | 51.96 |
ATT | 3.5272 | 3.5275 | -0.0003 | 0.0044 | -0.07 |
A:PSM有两个重要的假设是 OLS 没有考虑的。
一个是共同支撑假设,common support,说的是两组在整体上要有相似的特征。
另一个是平行假设,balancingassumption,说的是两组样本在各个维度上应该相似。
假设有四个人,高考分数如下:
* Q2: 上北大(PK)能获得更高的收入吗?
*----------------------------------------------
* 语文 数学 英语 物理 化学 总分 毕业当年年薪
*----------------------------------------------
* Stu PK: 120 138 130 142 140 = 670 12.0W
*----------------------------------------------
* Stu C1: 110 118 125 117 110 = 580 6.0W
* Stu C2: 95 150 128 147 150 = 670 11.7W
* Stu C3: 119 132 135 139 143 = 668 11.5W
*----------------------------------------------
如果想研究上北大是否能获得更好的收入,通常的做法就是用Stu PK 的收入和其他人比。但实际上我们想要的是“Stu PK 上北大的收入 - 假如 Stu PK 不上北大的收入”。问题在于,“假如 Stu PK 不上北大的收入”是不可观测的,因为“人不能两次踏入同一条河流”。
OLS 回归是把四个人都放进来回归,其实就是比Stu PK 与其他三个人的收入之差异。你的结论很可能是上北大能获得更高的收入。但是,这个结果是有偏的!原因如下:
其一,Stu C1 本身与Stu PK 不具可比性,他的分数只有 580 分,这不满足 CommonSupport;
其二,Stu C2 虽然与Stu PK 的总分相同,但是他们在单科成绩上差别很大,这不满足Balancing Assumption;
正确的做法其实是用 Stu PK 与 Stu C3 作比较,二者在各方面都非常接近,唯一的差异就是一个上了北大,一个没上(这个人的收入可以大体替代前面想要的那个不可观测的东西——“假如 Stu PK 不上北大的收入”),即,12.0-11.5 = 0.5 才是“上北大”这个 Treatment 的真正效果,这就是 PSM 分析的核心思想。
换句话讲,OLS 虽然放了很多控制变量,并声称“在控制了其他变量的情况下,x 变动一单位对 y 的影响……”,但是其实上它只是摆了一个Pose,并不能真正实现这一目标。PSM 做到了!
Q8:如何做propensityscore matching?
比如,
.psmatch2training age gender, out(wage)
然后呢?STATA的网站上好象并没有给出如何interpret 运行结果或者接下来应该怎么做。是不是把得到的propensity score作为一个regressor 带到原模型里面再回归呢, 如
.logit wagetraining age gender _pscore
A:下面是个简单的例子。
* -psmatch2- 命令
global x "size lev prof tobin gpay hhi5"
global xv "_Isicmen* _Igfinal*"
global if56 "if year==2005|year==2006"
*- 比较各变量匹配前后的情况
*- 最近邻匹配
cap drop u
gen u = uniform()
sort u
psmatch2 jili $x $xv $if56,neighbor(3) logit
order id year jili _pscore- _pdif
*- 匹配前后解释变量的差异对比
pstest $x, sum
*===============================
* -ATT- 比较
*===============================
* xx 里包含了带比较的outcome变量。
global xx "roe2 roa cash ac invt salegr tagr"
*- 基本统计量
tabstat $xx if year>2004, ///
stat(mean sd p50 min max)format(%6.3f) c(s)
Q9、请问动态面板数据分析中需要考虑异方差问题吗?我看一些发表的文章中对动态面板数据的分析也很少提及异方差问题。如果需要考虑,我怎么检验呢?又怎么解决呢?
A: 动态面板采用 GMM 估计时,可以附加 robust 选项获得考虑异方差后的稳健性标准误。至于检验问题,其实并不重要。在多数研究中,使用的都是大 N 小 T 型面板数据,此时异方差基本上是必然存在的。理论文献中也基本上很少涉及这方面的检验。
Q10、在静态面板的分析中,您专门分析了异方差问题,但是针对组间异方差检验,也就是针对每个截面;您说前面的固定效应中分析的异方差是针对个体的。那么,针对截面的异方差和针对个体的异方差,检验方法有何差异呢?我们在实证分析中都需要考虑吗?如果需要,怎么检验以及解决?
A: 在 Panel 分析中,通常所谓的个体(individual)其实就是指截面。因此,虽然我在视频中表述不同,但其实涉及的都是同一个问题。在 FE 估计中,文献中基本上是假设存在异方差,直接报告 robust 标准误,很少有人执行相关的检验,原因与第一个问题的回答相似。
Q11:我的数据包括N和T差不多的情况及大T小N的情况。
这种两种情况下,我该用什么命令估计动态面板呢?您讲义中就提了一种适用大T小N的命令xtlsdvc,但其前提太严格(所有解释变量都严格外生),我的数据显然不符合,我数据中的解释变量基本都是内生变量。
A:仍然用课程中介绍的方法进行估计,文献中对于 N 和 T 的大小并没有严格的界定。不过,在这种数据中,工具变量的选择很关键,因为T 比较大,如果按照 xtabond 自己选择的结果,则 L(2/.)y 都会作为工具变量,其中会包含很多很差的工具变量,如 L10.y, L11.y 等等。此时,要采用 help xtabond 命令中的 maxlags(#) 选项来限制工具变量的个数。如maxlags(5),那么就只用 L(2/5).y 作为工具变量,可以有效克服 T 较大时自由选择工具变量导致的弱工具变量问题。
Q12:STATA中如何判断面板数据应选择变截距模型还是变系数模型?
A:webuseinvest2
. xtrcinvest market stock
Random-coefficientsregression Number of obs = 100
Groupvariable: company Number ofgroups = 5
Obs per group: min = 20
avg = 20.0
max = 20
Wald chi2(2) = 17.55
Prob > chi2 = 0.0002
------------------------------------------------------------------------------
invest | Coef. Std.Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
market | .0807646 .0250829 3.22 0.001 .0316031 .1299261
stock | .2839885 .0677899 4.19 0.000 .1511229 .4168542
_cons | -23.58361 34.55547 -0.68 0.495 -91.31108 44.14386
------------------------------------------------------------------------------
Testof parameter constancy: chi2(12) = 603.99 Prob > chi2 = 0.0000最后一行的信息表明系数为常数的原假设被拒绝了。表明需要采用变系数模型。至于变截距模型,其实就是在PooledOLS 基础上增加了N-1个虚拟变量,它所研究的问题与xtrc存在一定的差异。由于两个模型不是嵌套的(nestedineach other),我还真不清楚还如何检验何者更为合适。
Q13. GMM中的hansen检验和sangan检验可以相互替代吗?两者有什么区别?
A:help xtabond2
下面这段话说的很清楚:
xtabond2 also reports tests of over-identifying restrictions--ofwhetherthe instruments, as a group, appearexogenous. Forone-step, non-robust estimation, it reports the Sarganstatistic, which is theminimized value of the one-step GMM criterionfunction. The Sarganstatistic is not robust to heteroskedasticity orautocorellation. Sofor one-step, robust estimation (and for alltwo-step estimation), xtabond2also reports the Hansen J statistic, which is theminimized value of thetwo-step GMM criterion function, and is robust. xtabond2still reports theSargan statistic in these cases because the J test has its ownproblem: it canbe greatly weakened by instrument proliferation.
Q14.stata怎么输出ttest等参数检验结果或者一些非参数检验的结果到word吗,就像输出表格或者回归结果到word或者excel中那样!
A: ret list
然后把这里的返回值写入矩阵,再用logout 输出即可。
Q15. 我在用stata做时间序列分析的时候,用tsset date定义时间变量,结果出现了如下错误提示
repeated time values in sample
r(451);
如果我继续做DF检验的话,就会出现如下错误:
. dfuller ln_szzs
time variable not set, use -tssetvarname ...-
r(111);
不知为何, 期盼您的指点。
A:既然是时间学列,就要求 year 变量能够唯一识别每一个观察值。
那个错误提示是说你的样本中某个年度的观察值可能出现了两次以上,比如,2003 年的观察值可能被重复记录了两次。
可以采用如下命令删除重复值:
duplicates drop year, force
然后,再执行 tsset 命令即可:
tsset year
Q16. PSM、DID、Treatmenteffect model有什么区别呢?我应该如何选择模型呢?
比如,对于0、1内生变量,我选择PSM或Treatmenteffect model,而对于一个能够同时产生时间维度和企业层面维度的事件,我们选择DID,这样理解对吗?谢谢
A:Treatment effect model 主要针对解释变量中包含 0/1 虚拟变量的类型。这通常都源于自选择问题。例如,研究上北大是否有助于提高收入这个问题,上北大与否就是一个虚拟变量 Dum_PK。但问题在于,能上北大的学生本身就是好学生,这些人有较强的能力,即使不上北大,收入仍然可能高于其他同学。此时 Dum_PK 便是一个内生变量。具体而言,模型设定如下:
Income = a + b1*Control_Variables + b2*Dum_PK + e
在这个模型设定中,干扰项 e 中可能会包括一些无法观测的因素,如“能力”。显然,能力与 Dum_PK 是相关的,也就是说,在上述模型设定中,Corr(Dum_PK, e) != 0,即所谓的内生性问题。
此时便需要采用 Treatmenteffect model,基本思想是找到合适的工具变量。stata 命令为 treatreg。
PSM 也可以解决这里提到的内生性问题。基本思路是,找到一些与北大学生各方面特征都相似但没有上北大的同学(他们的能力应该与北大学生相似),用他们的收入来衡量北大学生如果不上北大时的收入。两组人的主要差别仅限于是否上了北大,其他特征相似。
DID 要处理的问题更复杂一些。涉及到时间因素与 Treat 效应的分离问题。例如,广州 2009 年开始限房价,我们想在 2011 年的时候评估限价的效果。然而,在 2009-2011 年期间,假设广州的均价从 15000 涨到了 20000,但二者相差的 5000 块并不能完全归因为限价,因为随着时间的推移,经济在增长,这本身就会促使房价上涨。问题的核心就在于,如何把经济增长导致的房价变化,与限价政策导致的房价变化分离开。
此时可以采用 DID,基本想法是找到一个没有被限价,但各方面特征于广洲相似的城市,用这个城市的房价变动衡量广州房价随时间自然增长的部分,剩下的部分可以归结为限价政策的效果。
但是,想找到一个与广州相似的配对城市并不容易,此时可以采用 PSM。因此,PSM 往往可以与DID 联合使用。
DID 的基本思想图示如下:
*------------------------- ---------
* Group | Pre Post Change
*------------------------- ---------
* Treat | Y0 Y1 (Y1-Y0) 时间效应+处理效应
* -
* Control | C0 C1 (C1-C0) 时间效应+0
*------------------------- ---------
*
* D-in-D (Y1-Y0)-(C1-C0) 处理效应
Q17. HeckmanModel 与Treatment effect Model 在技术层面有什么差异呢?或者说它们两者的适用条件有什么不同?
A: *--------
*-4.4.2.1 Heckman 模型设定
help heckman
shellout Refs\Stata_Heckman.pdf //Bookmark: Themodel
*-Regression equation:
*
* y = xb + u_1
*
*-Selection equation: Z is varlist_s
*
* y observed if Zg + u_2>0 (根据 y 是否缺漏确定 1/0 变量)
*
* where:
* u_1 ~ N(0,sigma^2)
* u_2 ~ N(0, 1)
* corr(u_1,u_2) = rho
*--------
*-4.4.2.2 Heckman 模型估计方法
*-最大似然估计 (MaxlikelihoodEstimation, MLE)
*-基于二元联合正态分布函数
*-两步法 (Two-stepEstimation)
*-Step1: Probit (Treat Equation)-->Prob(Z=1)
* Pr(y_jobserved | z_j) = norm(zg)
* inverseMill's ratio: m = normden(wb)/norm(wb)
*-Step2: reg y xm //regression Equation 中加入 hazard
*-------------------
*-4.4.3处理效应模型 TreatmentEffect Model
*--------
*-4.4.3.1 模型设定
help treatreg // Also see | Manual: [R]treatreg
shelloutRefs\Stata_Treatreg.pdf
*-Primary regression equation:
*
* y_j = X_j*b1+Z_j*b2 + e_j (1) e_j~N(0,sigma^2)
*
*-Treatment equation
*
* Z_j* =W_j*gamma +u_j (2) Latentvariable
* u_j~N(0,1)
*-Decision rule:
*
* { 1 if (Z_j*>0)
* Z_j = { Note:Z_j 是可以观察到的
* { 0 otherwise
*
* Corr(e_j, u_j) = rho //内生性的根源
*------------------------
*-与 Heckman model的差异
*
*- yis[fully] observed in Treat model
*- y is[partly]observed in Heckman model
*
*- D may existornot in Heckman model, but must be there in Treat model
* inHeckman: the Probit estimation aims to observe Y*
* 0/1 is based on whether y is observed
* inTreat: the Probit estimation aims to observe Z*
* 0/1 is based on whether the individual is treated
Q18. excel2013直接导入stata11中文字符出现乱码问题
我采用xmluse命令直接导入excel中的数据到stata11中,但是中文字符出现乱码无法显示,请问老师怎样解决上述问题?
我尝试了以下几种解决方法,问题并未得到解决:
1.将office2013软件更换为office2007;
2.标准化文本、数据格式;
但是我采用以下方法,stata11中文字字符却并未出现乱码:
1.先将excel另存为文本文件(以制表符分隔),用insheetusing命令将文本文件直接导入stata;
2.复制粘贴的方法;
stata11的工作环境:win8;office2013.
A:那就用第二种方法吧。
如果你使用stata 12 软件的话,可以直接从 Excel 中导入数据。
Q19. 请问面板数据分析中对模型的解释,应该用组间(R-squared between),还是R-squared overall呢?
A: 对于 FE 模型,xtreg,fe 估计后应该采用 within-R2.
至于RE模型,则可以采用overall-R2.
Q20:MLE过程中,参数 row 的取值范围是 0-1,而theta 必须为正,但是如何设置参数的取值范围呢?
A:写程序时,可以设定 theta = ln(theta2),得到theta2 的估计值后可以求出 theta = exp(theta2)。
同理,可以设定row = normal(row2),得到 row2 的估计值后,可以求出 row = invnormal(row2)。
Q21. data菜单下面combinedatas,有两个:merge two datasets和from allpairwise combinations from groups有什么区别?
A: help merge
help joinby
Q22. 年份与月份的数据应该如何生成
已有上市公司年月日的一栏数据,想生成一栏年份数据与一栏月份数据,应该如何生成
A:这里有个例子可以看一下
*-eg02:年月日的分离
use tostring2.dta, clear
browse
tostring date_pub, gen(date1)
gen year = substr(date1, 1, 4)
gen month = substr(date1, 5, 2)
gen day = substr(date1, 7, 2)
browse
destring year month day, replace
browse
Q23.有缺漏值的那一行观察值不参与回归,为什么还要单独删除缺漏值呢?这样和直接回归不对缺漏值进行处理的操作有什么区别呢?谢谢
A: 很多论文中会同时报告多种模型设定下的结果,预先删除缺漏值可以保证各个模型中使用的样本数相同,使模型之间具有可比性。
Q24.在输出结果是应当怎样设置,可以让回归结果的系数,不是科学计数法的形式。如:-1.9e+04***
A: 系数的大小与你的量纲有关系,如果把你的解释变量乘以100000,则回归系数应为1.9……。这不会影响标准误的计算。
Q.25.行业代码的处理?
国泰安数据库中行业代码中每个行业都明细的话有几十个,怎样形成只包括制造业明细分类,而其他行业用一级分类的代码共22个行业代码呢?(是不是把行业代码改为数值型,再用replace命令呢?)
这样在后面生成虚拟变量时,可以用 以下进行处理
tab inds,gen(dum_r)
drop dum_r1
A: *-行业划分(制造业细分到次类,其他行业采用门类)
*-定义行业分类方法
*-参见 黄梅,夏新平(2009) 南开管理评论
clonevar sic2 = sicda_str // 行业大类码
order id year sic2
replace sic2 = substr(sic2,1,1) if substr(sic2,1,1)!="C"
replace sic2 = substr(sic2,1,2) if substr(sic2,1,1)=="C"
replace sic2 = "C9" ifsic2=="C2" // 将 C2 并入 C9
*-每年度每个行业至少保留 15 家公司
bysort sic2 year: egen num_sic_year = count(id)
keep if num_sic_year >=15 // Roychowdhury(2006,p.349)