stata做完回歸如何預(yù)測(cè)未來
篇一:《stata回歸分析完整步驟-吐血推薦》
stata回歸分析完整步驟——吐血推薦
****下載連乘函數(shù)prod,方法為:findit dm71
sort stkcd date //對(duì)公司和日期排序
gen r1=1+r //r為實(shí)際公司的股票收益率
gen r2=1+r_yq //r_yq為公司的預(yù)期股票收益率
egen r3=prod(r1),by(stkcd date) //求每個(gè)公司事件日的累計(jì)復(fù)合收益率
egen r4=prod(r2),by(stkcd date) //求每個(gè)公司事件日的累計(jì)預(yù)期的復(fù)合收益率 gen r=r4-r3
capture clear (清空內(nèi)存中的數(shù)據(jù))
capture log close (關(guān)閉所有打開的日志文件)
set mem 128m (設(shè)置用于stata使用的內(nèi)存容量)
set more off (關(guān)閉more選項(xiàng)。如果打開該選項(xiàng),那么結(jié)果分屏輸出,即一次只輸出一屏結(jié)果。你按空格鍵后再輸出下一屏,直到全部輸完。如果關(guān)閉則中間不停,一次全部輸出。) set matsize 4000 (設(shè)置矩陣的最大階數(shù)。我用的是不是太大了?)
cd D: (進(jìn)入數(shù)據(jù)所在的盤符和文件夾。和dos的命令行很相似。)
log using (文件名).log,replace (打開日志文件,并更新。日志文件將記錄下所有文件運(yùn)行后給出的結(jié)果,如果你修改了文件內(nèi)容,replace選項(xiàng)可以將其更新為最近運(yùn)行的結(jié)果。)
use (文件名),clear (打開數(shù)據(jù)文件。)
(文件內(nèi)容)
log close (關(guān)閉日志文件。)
exit,clear (退出并清空內(nèi)存中的數(shù)據(jù)。)
假設(shè)你清楚地知道所需的變量,現(xiàn)在要做的是檢查數(shù)據(jù)、生成必要的數(shù)據(jù)并形成數(shù)據(jù)庫(kù)供將來使用。檢查數(shù)據(jù)的重要命令包括codebook,su,ta,des和list。其中,codebook提供的信息最全面,缺點(diǎn)是不能使用if條件限制范圍,所以,有時(shí)還要用別的幫幫忙。su空格加變量名報(bào)告相應(yīng)變量的非缺失的觀察個(gè)數(shù),均值,標(biāo)準(zhǔn)差,最小值和最大值。ta空格后面加一個(gè)(或兩個(gè))變量名是報(bào)告某個(gè)變量(或兩個(gè)變量二維)的取值(不含缺失值)的頻數(shù),比率和按大小排列的累積比率。des后面可以加任意個(gè)變量名,只要數(shù)據(jù)中有。它報(bào)告變量的存儲(chǔ)的類型,顯示的格式和標(biāo)簽。標(biāo)簽中一般記錄這個(gè)變量的定義和單位。list報(bào)告變量的觀察值,可以用if或in來限制范圍。所有這些命令都可以后面不加任何變量名,
報(bào)告的結(jié)果是正在使用的數(shù)據(jù)庫(kù)中的所有變量的相應(yīng)信息。說起來蒼白無力,打開stata親自實(shí)驗(yàn)一下吧。
順帶說點(diǎn)兒題外話。除了codebook之外,上述統(tǒng)計(jì)類的命令都屬于r族命令(又稱一般命令)。執(zhí)行后都可以使用return list報(bào)告儲(chǔ)存在r()中的統(tǒng)計(jì)結(jié)果。最典型的r族命令當(dāng)屬summarize。它會(huì)把樣本量、均值、標(biāo)準(zhǔn)差、方差、最小值、最大值、總和等統(tǒng)計(jì)信息儲(chǔ)存起來。你在執(zhí)行su之后,只需敲入return list就可以得到所有這些信息。其實(shí),和一般命令的return命令類似,估計(jì)命令(又稱e族命令)也有ereturn命令,具有報(bào)告,儲(chǔ)存信息的功能。在更復(fù)雜的編程中,比如對(duì)回歸分解,計(jì)算一些程序中無法直接計(jì)算的統(tǒng)計(jì)量,這些功能更是必不可少。
檢查數(shù)據(jù)時(shí),先用codebook看一下它的值域和單位。如果有-9,-99這樣的取值,查一下問卷中對(duì)缺失值的記錄方法。確定它們是缺失值后,改為用點(diǎn)記錄。命令是replace (變量名)=. if (變量名)==-9。再看一下用點(diǎn)記錄的缺失值有多少,作為選用變量的一個(gè)依據(jù)。 得到可用的數(shù)據(jù)后,我會(huì)給沒有標(biāo)簽的變量加上注解。或者統(tǒng)一標(biāo)簽;或者統(tǒng)一變量的命名規(guī)則。更改變量名的命令是ren (原變量名)空格(新變量名)。定義標(biāo)簽的命令是label var (變量名)空格”(標(biāo)簽內(nèi)容)”。整齊劃一的變量名有助于記憶,簡(jiǎn)明的標(biāo)簽有助于明確變量的單位等信息。
如果你需要使用通過原始變量派生出的新變量,那么就需要了解gen,egen和replace這三個(gè)命令。gen和replace常常在一起使用。它們的基本語法是gen (或replace)空格(變量名)=(表達(dá)式)。二者的不同之處在于gen是生成新變量,replace是重新定義舊變量。 虛擬變量是我們常常需要用到的一類派生變量。如果你需要生成的虛擬變量個(gè)數(shù)不多,可以有兩種方法生成。一種是簡(jiǎn)明方法:gen空格(變量名)=((限制條件))[這外面的小括弧是命令需要的,里面的小括弧不是命令需要的,只是說明“限制條件”并非命令]。如果某個(gè)觀察滿足限制條件,那么它的這個(gè)虛擬變量取值為1,否則為0。另一種要麻煩一點(diǎn)。就是{stata做完回歸如何預(yù)測(cè)未來}.
gen (變量名)=1 if (取值為一限制條件)
replace(相同的變量名)=0 if (取值為零的限制條件)
兩個(gè)方法貌似一樣,但有一個(gè)小小的區(qū)別。如果限制條件中使用的變量都沒有任何缺失值,那么兩種方法的結(jié)果一樣。如果有缺失值,第一種方法會(huì)把是缺失值的觀察的虛擬變量都定義為0。而第二種方法可以將虛擬變量的取值分為三種,一是等于1,二是等于0,三是等于缺失值。這樣就避免了把本來信息不明的觀察錯(cuò)誤地納入到回歸中去。下次再講如何方便地生成成百上千個(gè)虛擬變量。
大量的虛擬變量往往是根據(jù)某個(gè)已知變量的取值生成的。比如,在某個(gè)回歸中希望控制每個(gè)觀察所在的社區(qū),即希望控制標(biāo)記社區(qū)的虛擬變量。社區(qū)數(shù)目可能有成百上千個(gè),如果用上次的所說的方法生成就需要重復(fù)成百上千次,這也太笨了。大量生成虛擬變量的命令如下; ta (變量名), gen((變量名))
第一個(gè)括號(hào)里的變量名是已知的變量,在上面的例子中是社區(qū)編碼。后一個(gè)括號(hào)里的變量名是新生成的虛擬變量的共同前綴,后面跟數(shù)字表示不同的虛擬變量。如果我在這里填入d,那么,上述命令就會(huì)新生成d1,d2,等等,直到所有社區(qū)都有一個(gè)虛擬變量。
在回歸中控制社區(qū)變量,只需簡(jiǎn)單地放入這些變量即可。一個(gè)麻煩是虛擬變量太多,怎么簡(jiǎn)單地加入呢?一個(gè)辦法是用省略符號(hào),d*表示所有d字母開頭的變量,另一法是用破折號(hào),d1-d150表示第一個(gè)到第150個(gè)社區(qū)虛擬變量(假設(shè)共有150個(gè)社區(qū))。
還有一種方法可以在回歸中直接控制虛擬變量,而無需真的去生成這些虛擬變量。使用命令areg可以做到,它的語法是
areg (被解釋變量) (解釋變量), absorb(變量名)
absorb選項(xiàng)后面的變量名和前面講的命令中第一個(gè)變量名相同。在上面的例子中即為社區(qū)編碼;貧w的結(jié)果和在reg中直接加入相應(yīng)的虛擬變量相同。
生成變量的最后一招是egen。egen和gen都用于生成新變量,但egen的特點(diǎn)是它更強(qiáng)大的函數(shù)功能。gen可以支持一些函數(shù),egen支持額外的函數(shù)。如果用gen搞不定,就得用egen想辦法了。不過我比較懶,到現(xiàn)在為止只用用取平均、加和這些簡(jiǎn)單的函數(shù)。
有的時(shí)候數(shù)據(jù)情況復(fù)雜一些,往往生成所需變量不是非常直接,就需要多幾個(gè)過程。曾經(jīng)碰到原始數(shù)據(jù)中記錄日期有些怪異的格式。比如,1991年10月23日被記錄為19911023。我想使用它年份和月份,并生成虛擬變量。下面是我的做法:
gen yr=int(date)
gen mo=int((data-yr*10000)/100)
ta yr, gen( yd)
ta mo, gen( md)
假設(shè)你已經(jīng)生成了所有需要的變量,現(xiàn)在最重要的就是保存好你的工作。使用的命令是save空格(文件名),replace。和前面介紹的一樣,replace選項(xiàng)將更新你對(duì)數(shù)據(jù)庫(kù)的修改,所以一定要小心使用。最好另存一個(gè)新的數(shù)據(jù)庫(kù),如果把原始庫(kù)改了又變不回去,就叫天不應(yīng)叫地不靈了。
前面說的都是對(duì)單個(gè)數(shù)據(jù)庫(kù)的簡(jiǎn)單操作,但有時(shí)我們需要改變數(shù)據(jù)的結(jié)構(gòu),或者抽取來自不同數(shù)據(jù)庫(kù)的信息,因此需要更方便的命令。這一類命令中我用過的有:改變數(shù)據(jù)的縱橫結(jié)構(gòu)的命令reshape,生成退化的數(shù)據(jù)庫(kù)collapse,合并數(shù)據(jù)庫(kù)的命令append和merge。 縱列(longitudinal)數(shù)據(jù)通常包括同一個(gè)行為者(agent)在不同時(shí)期的觀察,所以處理這類數(shù)據(jù)常常需要把數(shù)據(jù)庫(kù)從寬表變成長(zhǎng)表,或者相反。所謂寬表是以每個(gè)行為者為一個(gè)觀察,不同時(shí)期的變量都記錄在這個(gè)觀察下,例如,行為者是廠商,時(shí)期有2000、2001年,變量是雇傭人數(shù)和所在城市,假設(shè)雇傭人數(shù)在不同時(shí)期不同,所在城市則不變。寬表記錄的格式是每個(gè)廠商是一個(gè)觀察,沒有時(shí)期變量,雇傭人數(shù)有兩個(gè)變量,分別記錄2000年和2001年的人數(shù),所在城市只有一個(gè)變量。所謂長(zhǎng)表是行為者和時(shí)期共同定義觀察,在上面的
例子中,每個(gè)廠商有兩個(gè)觀察,有時(shí)期變量,雇傭人數(shù)和所在城市都只有一個(gè),它們和時(shí)期變量共同定義相應(yīng)時(shí)期的變量取值。
在上面的例子下,把寬表變成長(zhǎng)表的命令格式如下:
reshape long (雇傭人數(shù)的變量名), i((標(biāo)記廠商的變量名)) j((標(biāo)記時(shí)期的變量名)) 因?yàn)樗诔鞘胁浑S時(shí)期變化,所以在轉(zhuǎn)換格式時(shí)不用放在reshape
long后面,轉(zhuǎn)換前后也不改變什么。相反地,如果把長(zhǎng)表變成寬表則使用如下命令
reshape wide (雇傭人數(shù)的變量名), i((標(biāo)記廠商的變量名)) j((標(biāo)記時(shí)期的變量名)) 唯一的區(qū)別是long換成了wide。
collapse的用處是計(jì)算某個(gè)數(shù)據(jù)庫(kù)的一些統(tǒng)計(jì)量,再把它存為只含有這些統(tǒng)計(jì)量的數(shù)據(jù)庫(kù)。用到這個(gè)命令的機(jī)會(huì)不多,我使用它是因?yàn)樗梢杂?jì)算中位數(shù)和從1到99的百分位數(shù),這些統(tǒng)計(jì)量在常規(guī)的數(shù)據(jù)描述命令中沒有。如果要計(jì)算中位數(shù),其命令的語法如下 collapse (median) ((變量名)), by((變量名))
生成的新數(shù)據(jù)庫(kù)中記錄了第一個(gè)括號(hào)中的變量(可以是多個(gè)變量)的中位數(shù)。右面的by選項(xiàng)是根據(jù)某個(gè)變量分組計(jì)算中位數(shù),沒有這個(gè)選項(xiàng)則計(jì)算全部樣本的中位數(shù)。
合并數(shù)據(jù)庫(kù)有兩種方式,一種是增加觀察,另一種是增加變量。第一種用append,用在兩個(gè)數(shù)據(jù)庫(kù)的格式一樣,但觀察不一樣,只需用append空格using空格(文件名)就可以狗尾續(xù)貂了。簡(jiǎn)單明了,不會(huì)有什么錯(cuò)。另一種就不同了,需要格外小心。如果兩個(gè)數(shù)據(jù)庫(kù)中包含共同的觀察,但是變量不同,希望從一個(gè)數(shù)據(jù)庫(kù)中提取一些變量到另一個(gè)數(shù)據(jù)庫(kù)中用merge。完整的命令如下:
use
(文件名)
[打開輔助數(shù)據(jù)庫(kù)]
sort (變量名)
[根據(jù)變量排序,這個(gè)變量是兩個(gè)數(shù)據(jù)庫(kù)共有的識(shí)別信息]
save (文件名),
replace
[保存輔助數(shù)據(jù)庫(kù)]
use
(文件名)
[打開主數(shù)據(jù)庫(kù)]
sort (變量名)
[對(duì)相同的變量排序]
merge (變量名) using (文件名), keep((變量名))
[第一個(gè)變量名即為前面sort后面的變量名,文件名是輔助數(shù)據(jù)庫(kù)的名字,后面的變量名是希望提取的變量名]
ta
_merge
[顯示_merge的取值情況。_merge等于1的觀察是僅主庫(kù)有的,等于2的是僅輔助庫(kù)有的,等于3是兩個(gè)庫(kù)都有的。]
drop if
_merge==2
[刪除僅僅來自輔助庫(kù)的觀察]
drop
merge
[刪除_merge]
save (文件名),
replace
[將合并后的文件保存,通常另存]
講到這里似乎對(duì)于數(shù)據(jù)的生成和處理應(yīng)該閉嘴了。大家可能更想聽聽估計(jì)、檢驗(yàn)這些事情。但我并不想就此止住,因?yàn)閷?shí)際中總是有一些簡(jiǎn)單套用命令無法輕易辦到的特殊要求。此時(shí)至少有兩條路可以通向羅馬:一是找到更高級(jí)的命令一步到位;二是利用已知簡(jiǎn)單命令多繞幾個(gè)圈子達(dá)到目的。
下面講一個(gè)令我刻骨銘心的經(jīng)歷,這也是迄今我所碰到的生成新數(shù)據(jù)中最繁復(fù)的了。原始數(shù)據(jù)中包含了可以識(shí)別屬于同一個(gè)家庭中所有個(gè)人的信息和家庭成員與戶主關(guān)系的信息。目的是利用這些信息建立親子關(guān)系。初步的構(gòu)想是新數(shù)據(jù)庫(kù)以子輩為觀察,找到他們的父母,把父母的變量添加到每個(gè)觀察上。我的做法如下:
use
a1,clear
[打開全部樣本數(shù)據(jù)庫(kù)]{stata做完回歸如何預(yù)測(cè)未來}.
keep if
gender==2&agemos>=96&a8~=1&line<10
[保留已婚的一定年齡的女性]
replace a5=1 if
a5==0
時(shí)間序列模型
結(jié)構(gòu)模型雖然有助于人們理解變量之間的影響關(guān)系,但模型的預(yù)測(cè)精度比較低。在一些大規(guī)模的聯(lián)立方程中,情況更是如此。而早期的單變量時(shí)間序列模型有較少的參數(shù)卻可以得到非常精確的預(yù)測(cè),因此隨著Box and Jenkins(1984)等奠基性的研究,時(shí)間序列方法得到迅速發(fā)展。從單變量時(shí)間序列到多元時(shí)間序列模型,從平穩(wěn)過程到非平穩(wěn)過程,時(shí)間序列分析方法被廣泛應(yīng)用于經(jīng)濟(jì)、氣象和過程控制等領(lǐng)域。本章將介紹如下時(shí)間序列分析方法,ARIMA模型、ARCH族模型、VAR模型、VEC模型、單位根檢驗(yàn)及協(xié)整檢驗(yàn)等。
一、基本命令
1.1時(shí)間序列數(shù)據(jù)的處理
1)聲明時(shí)間序列:tsset 命令
use gnp96.dta, clear list in 1/20 gen Lgnp = L.gnp
tsset date list in 1/20 gen Lgnp = L.gnp
2)檢查是否有斷點(diǎn):tsreport, report
use gnp96.dta, clear tsset date
tsreport, report drop in 10/10 list in 1/12 tsreport, report
tsreport, report list /*列出存在斷點(diǎn)的樣本信息*/
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個(gè)觀察值*/ list in -10/-1 sum
5)應(yīng)用:樣本外預(yù)測(cè): predict{stata做完回歸如何預(yù)測(cè)未來}.
reg gnp96 L.gnp96 predict gnp_hat list in -10/-1
6)清除時(shí)間標(biāo)識(shí): tsset, clear
tsset, clear
1.2變量的生成與處理
1)滯后項(xiàng)、超前項(xiàng)和差分項(xiàng) 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)產(chǎn)生增長(zhǎng)率變量: 對(duì)數(shù)差分
gen lngnp = ln(gnp96) gen growth = D.lngnp
gen growth2 = (gnp96-L.gnp96)/L.gnp96
gen diff = growth - growth2 /*表明對(duì)數(shù)差分和變量的增長(zhǎng)率差別很小*/ list date gnp96 lngnp growth* diff in 1/10
1.3日期的處理
日期的格式 help tsfmt
基本時(shí)點(diǎn):整數(shù)數(shù)值,如 -3, -2, -1, 0, 1, 2, 3 .... 1960年1月1日,取值為 0;{stata做完回歸如何預(yù)測(cè)未來}.
1)使用 tsset 命令指定顯示格式
use B6_tsset.dta, clear tsset t, daily list
use B6_tsset.dta, clear tsset t, weekly list
2)指定起始時(shí)點(diǎn) 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)自己設(shè)定不同的顯示格式
日期的顯示格式 %d (%td) 定義如下: %[-][t]d<描述特定的顯示格式> 具體項(xiàng)目釋義:
“<描述特定的顯示格式>”中可包含如下字母或字符 c y m l n d j h q w _ . , : - / ' !c C Y M L N D J W 定義如下:
c and C 世紀(jì)值(個(gè)位數(shù)不附加/附加0)
y and Y 不含世紀(jì)值的年份(個(gè)位數(shù)不附加/附加0) m 三個(gè)英文字母的月份簡(jiǎn)寫(第一個(gè)字母大寫) M 英文字母拼寫的月份(第一個(gè)字母大寫) n and N 數(shù)字月份(個(gè)位數(shù)不附加/附加0)
d and D 一個(gè)月中的第幾日(個(gè)位數(shù)不附加/附加0) j and J 一年中的第幾日(個(gè)位數(shù)不附加/附加0) h 一年中的第幾半年 (1 or 2){stata做完回歸如何預(yù)測(cè)未來}.
q 一年中的第幾季度 (1, 2, 3, or 4) w and W 一年中的第幾周(個(gè)位數(shù)不附加/附加0) _ display a blank (空格) . display a period(句號(hào)) , display a comma(逗號(hào)) : display a colon(冒號(hào)) - display a dash (短線) / display a slash(斜線)
' display a close single quote(右引號(hào)) !c display character c (code !! to display an exclamation point){stata做完回歸如何預(yù)測(cè)未來}.
樣式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 2023, 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)一個(gè)實(shí)例:生成連續(xù)的時(shí)間變量 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圖解時(shí)間序列 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:增加文字標(biāo)注 sysuse tsline2, clear tsset day
tsline calories, ttick(28nov2002 25dec2002, tpos(in)) /// ttext(3470 28nov2002 "thanks" ///
3470 25dec2002 "x-mas", orient(vert)) 3)例3:增加兩條縱向的標(biāo)示線 sysuse tsline2, clear tsset day
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 yyfangchan@163.com (舉報(bào)時(shí)請(qǐng)帶上具體的網(wǎng)址) 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除