一、數據的邏輯清理
在數據清理時,我們會根據常識及專業知識對連續變量間的關係進行核對,以識別可能的錯誤。如調查對象的出生日期應小於或等於調查日期(常識),婦女的生育年齡肯定不能小於月經初潮年齡(專業知識)。還有一些具有經濟意義的數據,如個人年消費總額肯定不能為負,數據樣本中我國省級行政單位數目肯定不能超過34等等。這些需要學術研究者認真研究和比對,可以採用list命令列舉的方式,或者scatter命令看散點圖等簡單處理後運用專業知識或者常識來判別。
二、缺失值的識別與處理
對於調查數據來說,缺失值是司空見慣的。缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。機械原因是由於機械原因導致的數據收集或保存的失敗造成的數據缺失,比如數據存儲的失敗,存儲器損壞,機械故障導致某段時間數據未能收集(對於定時數據採集而言)。人為原因是由於人的主觀失誤、歷史局限或有意隱瞞造成的數據缺失,比如,在市場調查中被訪人拒絕透露相關問題的答案,或者回答的問題是無效的,數據錄入人員失誤漏錄了數據每種缺失都會對統計分析產生不同的影響,數據清理時需要對每種缺失值採用不同的處理方式。那麼,Stata中有哪些命令可以快速查看數據的缺失值呢?這裡為大家簡單介紹幾個與查看缺失值相關的命令。
命令1:misstable
命令misstable可以快速查看變量的缺失值,它會以表格的形式呈現數據缺失的樣本量,該命令的語法結構為:
misstable summarize[varlist][if][in][, summarize_options]
運行命令misstable和選項all可以直接輸出指定變量串中所有變量的缺失情況。如果變量本身沒有缺失值,表格結果顯示為空;由於misstable只能識別數值型變量的缺失值,無法識別字符型變量的缺失值,所以,對於字符型變量來說,表格結果顯示為「(string variable)」。
命令2:nmissing
nmissing是第三方用戶寫的命令,該命令的語法結構為:
nmissing [varlist] [if exp] [in range] [, min(#) obs piasm trim]
運行命令nmissing不僅可以給出指定變量串中的數值型變量的缺失值的個數,還可以給出字符型變量的缺失值的個數。選項min(#)可以顯示缺失值個數超過#的變量及其缺失值情況。
命令3:mdesc
命令mdesc也是一個查看變量缺失情況的第三方命令,它的語法結構為:
mdescvarlist [if] [in] [, abbreviate(#) any all none]
該命令可以識別數值型變量和字符型變量,它不僅可以查看變量缺失值的樣本量,還可以看其分布。
對於數據中的異常值,我們通常的處理方式有以下幾種:
方法一:直接刪除----適合缺失值數量較小,並且是隨機出現的,刪除它們對整體數據影響不大的情況。
方法二:使用一個全局常量填充---譬如將缺失值用「Unknown」等填充,但是效果不一定好,因為算法可能會把它識別為一個新的類別,一般很少用。
方法三:使用均值或中位數代替----優點:不會減少樣本信息,處理簡單。缺點:當缺失數據不是隨機數據時會產生偏差.對於正常分布的數據可以使用均值代替,如果數據是傾斜的,使用中位數可能更好。
方法四:插補法
隨機插補法----從總體中隨機抽取某個樣本代替缺失樣本
多重插補法----通過變量之間的關係對缺失數據進行預測,利用蒙特卡洛方法生成多個完整的數據集,在對這些數據集進行分析,最後對分析結果進行匯總處理
熱平臺插補----指在非缺失數據集中找到一個與缺失值所在樣本相似的樣本(匹配樣本),利用其中的觀測值對缺失值進行插補。
這樣做的優點是:簡單易行,準去率較高。缺點:變量數量較多時,通常很難找到與需要插補樣本完全相同的樣本。但我們可以按照某些變量將數據分層,在層中對缺失值實用均值插補
拉格朗日差值法和牛頓插值法(簡單高效,數值分析裡的內容)
方法五:建模法可以用回歸、使用貝葉斯形式化方法的基於推理的工具或決策樹歸納確定。例如,利用數據集中其他數據的屬性,可以構造一棵判定樹,來預測缺失值的值。
以上方法各有優缺點,具體情況要根據實際數據分分布情況、傾斜程度、缺失值所佔比例等等來選擇方法。一般而言,建模法是比較常用的方法,它根據已有的值來預測缺失值,準確率更高
三、異常值的識別與處理
異常值(outlier)是指一組測定值中與平均值的偏差超過兩倍標準差的測定值,與平均值的偏差超過三倍標準差的測定值,稱為高度異常的異常值。通常面對樣本時需要做整體數據觀察,以確認樣本數量、均值、極值、方差、標準差以及數據範圍等。其中的極值很可能是異常值,此時如何處理異常值會直接影響數據結果。那麼我們在Stata中應該如何識別異常值呢?、
方法一:簡單的統計分析
拿到數據後可以對數據進行一個簡單的描述性統計分析,譬如最大最小值可以用來判斷這個變量的取值是否超過了合理的範圍,如客戶的年齡為-20歲或200歲,顯然是不合常理的,為異常值。這種方法我們可以在Stata中summarize命令來實現。summarize命令用來計算及展示一組單變量的概要統計,若後面不指定變量,則計算當前數據集中所有變量的概要統計。若覺得某個變量的極值不符合常識,可選擇detail選項,則顯示變量的額外統計量,包括skewness、kurtosis、4個最小值、4個最大值,以及各種百分比。這就很容易以查看極值找到異常值。
方法二:簡單畫圖
我們也可以在Stata中採用scatter命令,通過畫散點圖的方法,直接觀察是否存在異常值。
方法三:箱形圖