我有一個數據集。有很多缺失的值。對於某些列,缺失值被替換為-999,而對於其他列,缺失值被標記為“ NA”。
我們為什麼要使用-999替換缺失值?
我有一個數據集。有很多缺失的值。對於某些列,缺失值被替換為-999,而對於其他列,缺失值被標記為“ NA”。
我們為什麼要使用-999替換缺失值?
這是較早的一種支持,當時計算機軟件將數字向量存儲為數字向量。沒有實數具有“我不見了”的語義。因此,當早期的統計軟件必須區分“真實”數字和缺失值時,他們輸入的“顯然”不是有效數字,例如-999或-9999。
當然,- 999或-9999表示缺少的值根本不是“明顯的”。通常,它肯定是一個有效值。除非您明確地檢查這些值,否則您的分析中可能會出現各種“有趣的”錯誤。
如今,可以包含缺失值的數值向量在內部表示為“富集的”數字矢量,即帶有關於哪些值丟失的附加信息的數字矢量。當然,這要好得多,因為丟失的值將被照這樣處理,而不會被錯誤地視為有效。
不幸的是,某些軟件仍在使用這種約定,也許是出於兼容性考慮。並且一些用戶通過非正式滲透吸收了該約定,即使他們的軟件支持乾淨輸入缺失值,也輸入-999而不是NA。
道德:不編碼缺失值為-999。
此類值適用於數據庫。很久以前,今天很多數據庫都為整數值數據分配了固定數量的數字。像-999這樣的數字是最小的,可以存儲四個字符,-9999可以存儲五個字符,依此類推。
(毫無疑問,根據定義,數字字段不能存儲字母數字字符,例如“ NA”。必須使用一些數字代碼來表示丟失或無效的數據。)
為什麼使用可以存儲的最大負數來表示缺少值? 因為如果您錯誤地將其視為有效數字,則希望結果顯著不正確。您的缺失值代碼越接近實際,您就越安全,因為輸入錯誤嚴重,通常會導致錯誤輸出。 (強大的統計方法是個例外!)
怎麼會發生這樣的錯誤?在系統之間交換數據時,始終會發生這種情況。當您以大多數格式(例如CSV)寫出數據時,假定-9999表示缺少值的系統將自動輸出該值。讀取CSV文件的系統可能不會“知道”(或不會“告訴”)以將這些值視為丟失。
另一個原因是,良好的統計數據和計算平台會識別許多不同類型的丟失值:NaN,真正的缺失值,上溢,下溢,無響應等。通過為這些值分配盡可能多的負值(例如-9999,-9998,-9997等),您可以輕鬆查詢排除任何表或數組中所有缺失的值。
另一個是,此類值通常在圖形顯示中顯示為極端異常值。在您可以選擇在圖形中突出顯示的所有值中,最負數的值表示遠離數據的可能性最大。
有一些有用的含義和概括:
用於浮點字段中丟失數據的一個很好的值是最負的有效數字,對於雙精度浮點數,大約等於$ -10 ^ {303} $。(想像一下平均會產生的效果!)基於同一原理,許多使用單精度浮點數的舊程序都使用一些任意大數,例如1E + 30來表示缺失值。
採用這種標準規則,以便在新情況下(設計自己的數據庫軟件時)輕鬆發明NoData代碼。
設計如果您的軟件和系統完全失敗,則它們將嚴重失敗。最嚴重的錯誤是斷斷續續的,隨機的或很小的錯誤,因為它們可能會被發現而難以發現。
您可以使用任何編碼缺失值。某些軟件(例如R)使用特殊值對丟失的數據進行編碼,但也有一些軟件包,例如SPSS,沒有用於丟失數據的任何特殊代碼。在第二種情況下,您需要為這些值做出任意選擇。您可以選擇任何內容,但是通常最好選擇一個明顯不同於您數據的值(例如,您的數據是0-100範圍內的百分比,因此您選擇999以編碼丟失的數據,或您的數據是人類年齡,並且您使用負值表示缺失的觀察值)。其背後的想法是,通過這樣做,您應該能夠注意到是否出了點問題並且數字沒有累加。
但是,這種編碼的問題是,您實際上無法注意到特殊的編碼並最終導致垃圾結果。
數據集中是否存在計算變量?還是這是來自合併/排序數據的分析數據集?一些軟件使用非常大的負值來表示丟失的數據。但是其他軟件會使用NA或。
創建缺失值。當它們不一致時,通常一些後期處理會導致分歧。
當然,在SPSS中,缺失值999或任何標記為特殊缺失代碼的IS均與其他值分開處理。它可以單獨列出,也可以完全排除。區別在於零除法或log(0)之類的結果。