日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Stata:虛擬變量專題-生成與使用

 liyu_sun 2021-04-05

New! lianxh 命令發(fā)布了:   GIF 動圖介紹
隨時搜索 Stata 推文、教程、手冊、論壇,安裝命令如下:
? . ssc install lianxh

圖片

作者:冷萱(西南財經(jīng)大學)
郵箱:lx@smail.swufe.edu.cn

溫馨提示: 文中鏈接在微信中無法生效。請點擊底部「閱讀原文」。

編者按:本文主要摘譯自下文,特此致謝!
Source:Cox N J, Schechter C B. Speaking Stata: How best to generate indicator or dummy variables[J]. The Stata Journal, 2019, 19(1): 246-259. -PDF-


目錄

  • 1. 引言

  • 2. 分類變量生成虛擬變量

  • 3. 連續(xù)變量生成虛擬變量

  • 4. 生成虛擬變量的進階做法

    • 4.1 根據(jù)多個變量生成虛擬變量

    • 4.2 借助 inlist() 命令生成虛擬變量

    • 4.3 借助 inrange() 命令生成虛擬變量

  • 5. 總結

  • 6. 相關推文


1. 引言

在實證分析中,虛擬變量應用較為廣泛,例如可以作為被解釋變量 (是否創(chuàng)業(yè)、是否上大學等),解釋變量 (DID 中經(jīng)常用到),控制變量 (是否城鎮(zhèn)、是否老年人、是否黨員等),并且相對簡單。即便如此,生成虛擬變量仍有諸多細節(jié)需要注意,否則會導致虛擬變量存在偏差。

為此,本文將對 Cox 和 Schechter (2019) 關于如何生成虛擬變量的文章進行簡要介紹,以幫助大家對  Stata 生成虛擬變量的要點及注意事項有更好的理解。

2. 分類變量生成虛擬變量

對于分類變量,我們是無法直接放入模型中進行回歸的,例如微觀調(diào)查數(shù)據(jù)中,個體的受教育程度 (小學、初中、高中等)。此時,一般會有兩種處理方法:

  • 一是將受教育程度轉換為受教育年限,即連續(xù)變量;
  • 二是將受教育程度轉換為不同類別的虛擬變量。

下面是基于 CFPS2018 個人問卷中的受教育水平生成虛擬變量的具體命令。其中,CFPS2018 個人問卷數(shù)據(jù)需到「中國家庭追蹤調(diào)查」官網(wǎng)申請下載。

. use cfps2018person_201911.dta, clear

. tab cfps2018edu, gen(edu)

CFPS2018個人問 |
卷受訪者已完 |
成的最高學歷 | Freq. Percent Cum.
--------------------+-----------------------------------
文盲/半文盲 | 7,661 23.45 23.45
小學 | 7,194 22.02 45.47
初中 | 9,202 28.17 73.64
高中/中專/技校/職高 | 4,915 15.05 88.69
大專 | 2,041 6.25 94.94
大學本科 | 1,529 4.68 99.62
碩士 | 118 0.36 99.98
博士 | 7 0.02 100.00
--------------------+-----------------------------------
Total | 32,667 100.00

上述命令執(zhí)行后,會生成教育水平對應的虛擬變量,分別為 edu1、edu2edu3、edu4、edu5、edu6edu7、edu8,對應原始教育水平的 8 個類別。具體來看,當個體受教育水平為文盲/半文盲時,edu1=1,否則 edu1=0,以此類推。

. sum edu1-edu8

Variable | Obs Mean Std. Dev. Min Max
----------+-------------------------------------------
edu1 | 32,667 .234518 .4237037 0 1
edu2 | 32,667 .2202222 .4144028 0 1
edu3 | 32,667 .281691 .4498304 0 1
edu4 | 32,667 .1504576 .3575249 0 1
edu5 | 32,667 .062479 .2420271 0 1
----------+-------------------------------------------
edu6 | 32,667 .0468056 .2112256 0 1
edu7 | 32,667 .0036122 .0599939 0 1
edu8 | 32,667 .0002143 .0146371 0 1

注意事項

  • 使用 tab 生成虛擬變量時,要注意異常值對結果的影響。例如,某些受訪者拒絕回答自己受教育程度,數(shù)據(jù)對應編碼可能為 -2 或其他。因此,在正式生成虛擬變量前要檢查相關變量的類別是否有異常值。如果有異常值,可以選擇進行填補或定義為缺失值 (recode cfps2018edu (-2==.));
  • 以上生成的 8 個虛擬變量不能同時放入回歸方程中進行分析,因為需要選擇一組作為對照組。如果全部納入回歸,Stata 則會自動剔除一類作為對照組;
  • 將以上 7 個教育程度的虛擬變量納入回歸方程時,對于虛擬變量系數(shù)的解讀需要尤其注意。這里每一組的參照組均為未納入回歸方程的那一組。例如,未將 edu1 (文盲/半文盲) 納入方程,那么 edu2 (小學) 的系數(shù)解讀應該為,相對于文盲或半文盲,上過小學對被解釋變量有多大影響,其他以此類推。

3. 連續(xù)變量生成虛擬變量

對于一些連續(xù)變量,我們可能會按照取值是否大于均值將其分為高低兩類。例如,當收入水平 (連續(xù)變量) 超過全樣本均值時,虛擬變量取值為 1 (高收入人群),反之取值為 0 (低收入人群)。

. sum income

Variable | Obs Mean Std. Dev. Min Max
---------+--------------------------------------------
income | 32,669 14043.73 29701.14 -8 840000

. gen high_income = (income> `r(mean)')

上述生成虛擬變量的方式主要是借助了一個邏輯判斷,即當 = 后面為真時,取值為1,否則為 0。當然,我們也可以使用類似的命令生成一個中等收入 (收入介于 6-20 萬) 虛擬變量。

. gen middle_income = (income >= 60000) & (income <= 200000)

注意事項

  • 這里依然需要注意數(shù)據(jù)的異常值。較為細心的讀者可能已經(jīng)發(fā)現(xiàn),在sum income 呈現(xiàn)的結果中,最小值為-8,這是一個不好的信號。建議在清理每一個變量時,先使用 tab 查閱一下數(shù)值分布,是否有異常。如果有異常值,則需要先對異常值進行處理。
  • 缺失值在 Stata 中默認為最大的數(shù)值。直接使用 tab varname 時,結果并不會呈現(xiàn)缺失值的分布。但是,在使用連續(xù)變量生成虛擬變量時,如果遺漏了缺失值就可能造成結果錯誤。例如,個體還沒參加工作,對應個體收入水平可能定義為缺失值 '.',但 Stata 默認 '.' 為無窮大。正確的做法是在命令后面加上 if !missing(income)。
. sum income

Variable | Obs Mean Std. Dev. Min Max
----------+---------------------------------------------
income | 32,669 14043.73 29701.14 -8 840000

. gen high_income = (income > `r(mean)') if !missing(income)

4. 生成虛擬變量的進階做法

4.1 根據(jù)多個變量生成虛擬變量

上文都是基于某一個變量生成虛擬變量,在處理數(shù)據(jù)過程中,可能需要借助多個變量來生成虛擬變量。例如,生成一個家庭是否有未成年人的虛擬變量時,我們需要結合年齡 age 和家庭編碼 fid18 來進行處理。

. egen any_children = max(age < 18), by(fid18)

上述命令的具體含義為,生成一個虛擬變量 any_children,并以家庭編碼 fid18 作為分組依據(jù),以 max(age < 18) 為判斷條件。其中,max(age < 18) 可以理解為 max(1 if age < 18; 0 otherwise),這里 max 為取 0 和 1 較大值。之所以如此,是考慮到家庭成員不止一個,但是只要家里有小于 18 歲的個體,any_children 就取值為 1,否則為 0。

4.2 借助 inlist() 命令生成虛擬變量

inlist() 命令語法為 inlist(z, var1, var2,...)。該命令具體含義是 var1,var2,...中任意一個變量取值為 z,則虛擬變量取值為 1,否則為 0。

具體來看,前文已經(jīng)生成了 edu1、edu2edu3、edu4、edu5edu6、edu7、edu8 等 8 個虛擬變量,現(xiàn)在我們想在上述變量基礎上生成一個新的虛擬變量,即個體是否完成初中及以上教育 (edu3 對應是否完成初中教育)。實現(xiàn)上述過程的兩種方法如下:

*-方法1
. generate middle_school_1 = ///
(edu3 == 1) | (edu4 == 1) | ///
(edu5 == 1) | (edu6 == 1) | ///
(edu7 == 1) | (edu8 == 1)

*-方法2
. generate middle_school_2 = inlist(1, edu1, edu2, edu3, edu4, edu5, edu6, edu7, edu8)

4.3 借助 inrange() 命令生成虛擬變量

inrange() 命令語法為 inrange(var, a, b)。該命令具體含義為,當變量 var 的取值介于 [a, b] 之間時,虛擬變量取值為 1,否則為 0。與上文類似,我們生成中等收入 (收入介于 6-20 萬) 虛擬變量為例。inrange() 命令實現(xiàn)如下:

. gen middle_income = inrange(income, 60000, 200000)

5. 總結

虛擬變量的生成方式有很多,并且不同的命令的便捷程度也不一樣。但是,無論使用哪種方式,在生成虛擬變量之前都需要對相關變量進行檢查,以確保無異常值或缺失值。否則,按照以下方式處理:

  • 如果有異常值則需要處理 (填補) 為正常值或缺失值;
  • 如果存在缺失值,要注意 Stata 會將其識別為最大的數(shù)字。在生成虛擬變量時候要格外小心。

若需實操本文介紹的命令,也可以使用 sysuse 'nlsw88.dta', clear 調(diào)入 Stata 自帶數(shù)據(jù)文件 nlsw88.dta 進行練習。

6. 相關推文

Note:產(chǎn)生如下推文列表的 Stata 命令為:
? lianxh 虛擬變量 缺失值 補漏 egen, m
安裝最新版 lianxh 命令:
? ssc install lianxh, replace 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多