stata做完回归如何预测未来

首页 > 话题作文 > 热点话题 > 正文 2018-09-01

篇一:《stata回归分析完整步骤-吐血推荐》

stata回归分析完整步骤——吐血推荐

****下载连乘函数prod,方法为:findit dm71

sort stkcd date //对公司和日期排序

gen r1=1+r //r为实际公司的股票收益率

gen r2=1+r_yq //r_yq为公司的预期股票收益率

egen r3=prod(r1),by(stkcd date) //求每个公司事件日的累计复合收益率

egen r4=prod(r2),by(stkcd date) //求每个公司事件日的累计预期的复合收益率 gen r=r4-r3

capture clear (清空内存中的数据)

capture log close (关闭所有打开的日志文件)

set mem 128m (设置用于stata使用的内存容量)

set more off (关闭more选项。如果打开该选项,那么结果分屏输出,即一次只输出一屏结果。你按空格键后再输出下一屏,直到全部输完。如果关闭则中间不停,一次全部输出。) set matsize 4000 (设置矩阵的最大阶数。我用的是不是太大了?)

cd D: (进入数据所在的盘符和文件夹。和dos的命令行很相似。)

log using (文件名).log,replace (打开日志文件,并更新。日志文件将记录下所有文件运行后给出的结果,如果你修改了文件内容,replace选项可以将其更新为最近运行的结果。)

use (文件名),clear (打开数据文件。)

(文件内容)

log close (关闭日志文件。)

exit,clear (退出并清空内存中的数据。)

假设你清楚地知道所需的变量,现在要做的是检查数据、生成必要的数据并形成数据库供将来使用。检查数据的重要命令包括codebook,su,ta,des和list。其中,codebook提供的信息最全面,缺点是不能使用if条件限制范围,所以,有时还要用别的帮帮忙。su空格加变量名报告相应变量的非缺失的观察个数,均值,标准差,最小值和最大值。ta空格后面加一个(或两个)变量名是报告某个变量(或两个变量二维)的取值(不含缺失值)的频数,比率和按大小排列的累积比率。des后面可以加任意个变量名,只要数据中有。它报告变量的存储的类型,显示的格式和标签。标签中一般记录这个变量的定义和单位。list报告变量的观察值,可以用if或in来限制范围。所有这些命令都可以后面不加任何变量名,

报告的结果是正在使用的数据库中的所有变量的相应信息。说起来苍白无力,打开stata亲自实验一下吧。

顺带说点儿题外话。除了codebook之外,上述统计类的命令都属于r族命令(又称一般命令)。执行后都可以使用return list报告储存在r()中的统计结果。最典型的r族命令当属summarize。它会把样本量、均值、标准差、方差、最小值、最大值、总和等统计信息储存起来。你在执行su之后,只需敲入return list就可以得到所有这些信息。其实,和一般命令的return命令类似,估计命令(又称e族命令)也有ereturn命令,具有报告,储存信息的功能。在更复杂的编程中,比如对回归分解,计算一些程序中无法直接计算的统计量,这些功能更是必不可少。

检查数据时,先用codebook看一下它的值域和单位。如果有-9,-99这样的取值,查一下问卷中对缺失值的记录方法。确定它们是缺失值后,改为用点记录。命令是replace (变量名)=. if (变量名)==-9。再看一下用点记录的缺失值有多少,作为选用变量的一个依据。 得到可用的数据后,我会给没有标签的变量加上注解。或者统一标签;或者统一变量的命名规则。更改变量名的命令是ren (原变量名)空格(新变量名)。定义标签的命令是label var (变量名)空格”(标签内容)”。整齐划一的变量名有助于记忆,简明的标签有助于明确变量的单位等信息。

如果你需要使用通过原始变量派生出的新变量,那么就需要了解gen,egen和replace这三个命令。gen和replace常常在一起使用。它们的基本语法是gen (或replace)空格(变量名)=(表达式)。二者的不同之处在于gen是生成新变量,replace是重新定义旧变量。 虚拟变量是我们常常需要用到的一类派生变量。如果你需要生成的虚拟变量个数不多,可以有两种方法生成。一种是简明方法:gen空格(变量名)=((限制条件))[这外面的小括弧是命令需要的,里面的小括弧不是命令需要的,只是说明“限制条件”并非命令]。如果某个观察满足限制条件,那么它的这个虚拟变量取值为1,否则为0。另一种要麻烦一点。就是{stata做完回归如何预测未来}.

gen (变量名)=1 if (取值为一限制条件)

replace(相同的变量名)=0 if (取值为零的限制条件)

两个方法貌似一样,但有一个小小的区别。如果限制条件中使用的变量都没有任何缺失值,那么两种方法的结果一样。如果有缺失值,第一种方法会把是缺失值的观察的虚拟变量都定义为0。而第二种方法可以将虚拟变量的取值分为三种,一是等于1,二是等于0,三是等于缺失值。这样就避免了把本来信息不明的观察错误地纳入到回归中去。下次再讲如何方便地生成成百上千个虚拟变量。

大量的虚拟变量往往是根据某个已知变量的取值生成的。比如,在某个回归中希望控制每个观察所在的社区,即希望控制标记社区的虚拟变量。社区数目可能有成百上千个,如果用上次的所说的方法生成就需要重复成百上千次,这也太笨了。大量生成虚拟变量的命令如下; ta (变量名), gen((变量名))

第一个括号里的变量名是已知的变量,在上面的例子中是社区编码。后一个括号里的变量名是新生成的虚拟变量的共同前缀,后面跟数字表示不同的虚拟变量。如果我在这里填入d,那么,上述命令就会新生成d1,d2,等等,直到所有社区都有一个虚拟变量。

在回归中控制社区变量,只需简单地放入这些变量即可。一个麻烦是虚拟变量太多,怎么简单地加入呢?一个办法是用省略符号,d*表示所有d字母开头的变量,另一法是用破折号,d1-d150表示第一个到第150个社区虚拟变量(假设共有150个社区)。

还有一种方法可以在回归中直接控制虚拟变量,而无需真的去生成这些虚拟变量。使用命令areg可以做到,它的语法是

areg (被解释变量) (解释变量), absorb(变量名)

absorb选项后面的变量名和前面讲的命令中第一个变量名相同。在上面的例子中即为社区编码。回归的结果和在reg中直接加入相应的虚拟变量相同。

生成变量的最后一招是egen。egen和gen都用于生成新变量,但egen的特点是它更强大的函数功能。gen可以支持一些函数,egen支持额外的函数。如果用gen搞不定,就得用egen想办法了。不过我比较懒,到现在为止只用用取平均、加和这些简单的函数。

有的时候数据情况复杂一些,往往生成所需变量不是非常直接,就需要多几个过程。曾经碰到原始数据中记录日期有些怪异的格式。比如,1991年10月23日被记录为19911023。我想使用它年份和月份,并生成虚拟变量。下面是我的做法:

gen yr=int(date)

gen mo=int((data-yr*10000)/100)

ta yr, gen( yd)

ta mo, gen( md)

假设你已经生成了所有需要的变量,现在最重要的就是保存好你的工作。使用的命令是save空格(文件名),replace。和前面介绍的一样,replace选项将更新你对数据库的修改,所以一定要小心使用。最好另存一个新的数据库,如果把原始库改了又变不回去,就叫天不应叫地不灵了。

前面说的都是对单个数据库的简单操作,但有时我们需要改变数据的结构,或者抽取来自不同数据库的信息,因此需要更方便的命令。这一类命令中我用过的有:改变数据的纵横结构的命令reshape,生成退化的数据库collapse,合并数据库的命令append和merge。 纵列(longitudinal)数据通常包括同一个行为者(agent)在不同时期的观察,所以处理这类数据常常需要把数据库从宽表变成长表,或者相反。所谓宽表是以每个行为者为一个观察,不同时期的变量都记录在这个观察下,例如,行为者是厂商,时期有2000、2001年,变量是雇佣人数和所在城市,假设雇佣人数在不同时期不同,所在城市则不变。宽表记录的格式是每个厂商是一个观察,没有时期变量,雇佣人数有两个变量,分别记录2000年和2001年的人数,所在城市只有一个变量。所谓长表是行为者和时期共同定义观察,在上面的

{stata做完回归如何预测未来}.

例子中,每个厂商有两个观察,有时期变量,雇佣人数和所在城市都只有一个,它们和时期变量共同定义相应时期的变量取值。

在上面的例子下,把宽表变成长表的命令格式如下:

reshape long (雇佣人数的变量名), i((标记厂商的变量名)) j((标记时期的变量名)) 因为所在城市不随时期变化,所以在转换格式时不用放在reshape

long后面,转换前后也不改变什么。相反地,如果把长表变成宽表则使用如下命令

reshape wide (雇佣人数的变量名), i((标记厂商的变量名)) j((标记时期的变量名)) 唯一的区别是long换成了wide。

collapse的用处是计算某个数据库的一些统计量,再把它存为只含有这些统计量的数据库。用到这个命令的机会不多,我使用它是因为它可以计算中位数和从1到99的百分位数,这些统计量在常规的数据描述命令中没有。如果要计算中位数,其命令的语法如下 collapse (median) ((变量名)), by((变量名))

生成的新数据库中记录了第一个括号中的变量(可以是多个变量)的中位数。右面的by选项是根据某个变量分组计算中位数,没有这个选项则计算全部样本的中位数。

合并数据库有两种方式,一种是增加观察,另一种是增加变量。第一种用append,用在两个数据库的格式一样,但观察不一样,只需用append空格using空格(文件名)就可以狗尾续貂了。简单明了,不会有什么错。另一种就不同了,需要格外小心。如果两个数据库中包含共同的观察,但是变量不同,希望从一个数据库中提取一些变量到另一个数据库中用merge。完整的命令如下:

use

(文件名)

[打开辅助数据库]

sort (变量名)

[根据变量排序,这个变量是两个数据库共有的识别信息]

save (文件名),

replace

[保存辅助数据库]

use

(文件名)

[打开主数据库]

sort (变量名)

[对相同的变量排序]

merge (变量名) using (文件名), keep((变量名))

[第一个变量名即为前面sort后面的变量名,文件名是辅助数据库的名字,后面的变量名是希望提取的变量名]

ta

_merge

[显示_merge的取值情况。_merge等于1的观察是仅主库有的,等于2的是仅辅助库有的,等于3是两个库都有的。]

drop if

_merge==2

[删除仅仅来自辅助库的观察]

drop

merge

[删除_merge]

save (文件名),

replace

[将合并后的文件保存,通常另存]

讲到这里似乎对于数据的生成和处理应该闭嘴了。大家可能更想听听估计、检验这些事情。但我并不想就此止住,因为实际中总是有一些简单套用命令无法轻易办到的特殊要求。此时至少有两条路可以通向罗马:一是找到更高级的命令一步到位;二是利用已知简单命令多绕几个圈子达到目的。

下面讲一个令我刻骨铭心的经历,这也是迄今我所碰到的生成新数据中最繁复的了。原始数据中包含了可以识别属于同一个家庭中所有个人的信息和家庭成员与户主关系的信息。目的是利用这些信息建立亲子关系。初步的构想是新数据库以子辈为观察,找到他们的父母,把父母的变量添加到每个观察上。我的做法如下:

use

a1,clear

[打开全部样本数据库]{stata做完回归如何预测未来}.

keep if

gender==2&agemos>=96&a8~=1&line<10

[保留已婚的一定年龄的女性]

replace a5=1 if

a5==0

篇二:《时间序列模型分析的各种stata命令》

时间序列模型

结构模型虽然有助于人们理解变量之间的影响关系,但模型的预测精度比较低。在一些大规模的联立方程中,情况更是如此。而早期的单变量时间序列模型有较少的参数却可以得到非常精确的预测,因此随着Box and Jenkins(1984)等奠基性的研究,时间序列方法得到迅速发展。从单变量时间序列到多元时间序列模型,从平稳过程到非平稳过程,时间序列分析方法被广泛应用于经济、气象和过程控制等领域。本章将介绍如下时间序列分析方法,ARIMA模型、ARCH族模型、VAR模型、VEC模型、单位根检验及协整检验等。

一、基本命令

1.1时间序列数据的处理

1)声明时间序列:tsset 命令

use gnp96.dta, clear list in 1/20 gen Lgnp = L.gnp

tsset date list in 1/20 gen Lgnp = L.gnp

2)检查是否有断点:tsreport, report

use gnp96.dta, clear tsset date

tsreport, report drop in 10/10 list in 1/12 tsreport, report

tsreport, report list /*列出存在断点的样本信息*/

3)填充缺漏值:tsfill

tsfill

tsreport, report list list in 1/12

4)追加样本:tsappend

use gnp96.dta, clear tsset date list in -10/-1 sum

tsappend , add(5) /*追加5个观察值*/ list in -10/-1 sum

5)应用:样本外预测: predict{stata做完回归如何预测未来}.

reg gnp96 L.gnp96 predict gnp_hat list in -10/-1

6)清除时间标识: tsset, clear

tsset, clear

1.2变量的生成与处理

1)滞后项、超前项和差分项 help tsvarlist

use gnp96.dta, clear tsset date

gen Lgnp = L.gnp96 /*一阶滞后*/ gen L2gnp = L2.gnp96

gen Fgnp = F.gnp96 /*一阶超前*/ gen F2gnp = F2.gnp96

gen Dgnp = D.gnp96 /*一阶差分*/ gen D2gnp = D2.gnp96 list in 1/10 list in -10/-1

2)产生增长率变量: 对数差分

gen lngnp = ln(gnp96) gen growth = D.lngnp

gen growth2 = (gnp96-L.gnp96)/L.gnp96

gen diff = growth - growth2 /*表明对数差分和变量的增长率差别很小*/ list date gnp96 lngnp growth* diff in 1/10

1.3日期的处理

日期的格式 help tsfmt

基本时点:整数数值,如 -3, -2, -1, 0, 1, 2, 3 .... 1960年1月1日,取值为 0;{stata做完回归如何预测未来}.

1)使用 tsset 命令指定显示格式

use B6_tsset.dta, clear tsset t, daily list

use B6_tsset.dta, clear tsset t, weekly list

2)指定起始时点 cap drop month

generate month = m(1990-1) + _n - 1 format month %tm list t month in 1/20

cap drop year

gen year = y(1952) + _n - 1 format year %ty list t year in 1/20

3)自己设定不同的显示格式

日期的显示格式 %d (%td) 定义如下: %[-][t]d<描述特定的显示格式> 具体项目释义:

“<描述特定的显示格式>”中可包含如下字母或字符 c y m l n d j h q w _ . , : - / ' !c C Y M L N D J W 定义如下:

c and C 世纪值(个位数不附加/附加0)

y and Y 不含世纪值的年份(个位数不附加/附加0) m 三个英文字母的月份简写(第一个字母大写) M 英文字母拼写的月份(第一个字母大写) n and N 数字月份(个位数不附加/附加0)

{stata做完回归如何预测未来}.

d and D 一个月中的第几日(个位数不附加/附加0) j and J 一年中的第几日(个位数不附加/附加0) h 一年中的第几半年 (1 or 2){stata做完回归如何预测未来}.

q 一年中的第几季度 (1, 2, 3, or 4) w and W 一年中的第几周(个位数不附加/附加0) _ display a blank (空格) . display a period(句号) , display a comma(逗号) : display a colon(冒号) - display a dash (短线) / display a slash(斜线)

' display a close single quote(右引号) !c display character c (code !! to display an exclamation point){stata做完回归如何预测未来}.

样式1:

Format Sample date in format ----------------------------------- %td 07jul1948 %tdM_d,_CY July 7, 1948 %tdY/M/D 48/07/11 %tdM-D-CY 07-11-1948 %tqCY.q 1999.2 %tqCY:q 1992:2 %twCY,_w 2010, 48

----------------------------------- 样式2:

Format Sample date in format ---------------------------------- %d 11jul1948 %dDlCY 11jul1948 %dDlY 11jul48 %dM_d,_CY July 11, 1948 %dd_M_CY 11 July 1948 %dN/D/Y 07/11/48 %dD/N/Y 11/07/48 %dY/N/D 48/07/11 %dN-D-CY 07-11-1948

----------------------------------

clear

set obs 100

gen t = _n + d(13feb1978) list t in 1/5

format t %dCY-N-D /*1978-02-14*/ list t in 1/5

format t %dcy_n_d /*1978 2 14*/ list t in 1/5

use B6_tsset, clear list

tsset t, format(%twCY-m) list

4)一个实例:生成连续的时间变量 use e1920.dta, clear list year month in 1/30 sort year month gen time = _n tsset time

list year month time in 1/30

generate newmonth = m(1920-1) + time - 1 tsset newmonth, monthly

list year month time newmonth in 1/30

1.4图解时间序列 1)例1: clear

set seed 13579113

sim_arma ar2, ar(0.7 0.2) nobs(200) sim_arma ma2, ma(0.7 0.2) tsset _t

tsline ar2 ma2

* 亦可采用 twoway line 命令绘制,但较为繁琐 twoway line ar2 ma2 _t

2)例2:增加文字标注 sysuse tsline2, clear tsset day

tsline calories, ttick(28nov2002 25dec2002, tpos(in)) /// ttext(3470 28nov2002 "thanks" ///

3470 25dec2002 "x-mas", orient(vert)) 3)例3:增加两条纵向的标示线 sysuse tsline2, clear tsset day

上一篇macbook,air,15款

下一篇乐于助人的好伙伴作文

《stata做完回归如何预测未来.doc》
将本文的Word文档下载,方便收藏和打印
推荐度:
下载文档

热点话题推荐文章

热点话题热门文章

推荐内容

热点话题推荐阅读