題:
為什麼有些人使用-999或-9999替換缺失值?
qqqwww
2016-07-23 00:47:48 UTC
view on stackexchange narkive permalink

我有一個數據集。有很多缺失的值。對於某些列,缺失值被替換為-999,而對於其他列,缺失值被標記為“ NA”。

我們為什麼要使用-999替換缺失值?

我自己從未見過-999。到目前為止,我已經看到了空字符串和NA。
因為他們希望為進行膚淺分析並且不認真閱讀文檔的人員搞砸結果!(儘管很認真,@Stephan Kolassa才是真正的答案。)
問提供數據集的人嗎?
更好的是,在測量列中有999個值指示該測量不適用...至少-999或0的語義意味著它不是有效/重要的值。999只是最糟糕的。
我覺得我曾經讀過,這是從在打孔卡上記錄數據的時代開始的慣例。剔除整行9s使得看卡時丟失的數據清晰可見,因為它實際上是“丟失的行”。我找不到支持此操作的參考,因此將其保留為評論。
五 答案:
Stephan Kolassa
2016-07-23 00:55:30 UTC
view on stackexchange narkive permalink

這是較早的一種支持,當時計算機軟件將數字向量存儲為數字向量。沒有實數具有“我不見了”的語義。因此,當早期的統計軟件必須區分“真實”數字和缺失值時,他們輸入的“顯然”不是有效數字,例如-999或-9999。

當然,- 999或-9999表示缺少的值根本不是“明顯的”。通常,它肯定是一個有效值。除非您明確地檢查這些值,否則您的分析中可能會出現各種“有趣的”錯誤。

如今,可以包含缺失值的數值向量在內部表示為“富集的”數字矢量,即帶有關於哪些值丟失的附加信息的數字矢量。當然,這要好得多,因為丟失的值將被照這樣處理,而不會被錯誤地視為有效。

不幸的是,某些軟件仍在使用這種約定,也許是出於兼容性考慮。並且一些用戶通過非正式滲透吸收了該約定,即使他們的軟件支持乾淨輸入缺失值,也輸入-999而不是NA。

道德:編碼缺失值為-999。

好答案。謝謝。我知道某些軟件仍將其作為有效值,因為-999仍然是數字。那麼我們應該如何處理這種數據集呢?恢復為空或什麼?例如,年齡,是否可以將所有空值或-999用作類別,並將剩餘的年齡數據存儲到0-10、11-20等中,這意味著將數字變量轉換為類別變量?有道理嗎?謝謝。
這是人們不理解為什麼會錯誤遵循的傳統之一,僅僅是因為它是以前做過的,並不意味著它是正確的開始。
除了作為早期的堅持之外,可能還有一些人從未聽說過存在缺失值的顯式表示,因此,當他們需要插入缺失值時,會認為使用的東西是某種偽造的數。
這不僅僅是一個堅持的事情。如果我正在編寫用於處理數據的工具,那麼使用幾乎所有編程語言都可以很容易地讀取數字列。讀入值,檢測非數值並相應地解析它們會花費更多的時間。並且,如果您認為-9999與統計數字混為一談,則與我一起工作的小組非常喜歡將1e32用於無效值。讓我告訴你當您這樣做時方差會發生什麼!
簡潔的答案。但是添加一些歷史細節可能會使它成為一個更好的答案。誠然,這需要一些研究。:)
這種編碼也可以用來表示其他類型的測量誤差。即“機器不工作”與“沒有人進行測量”。
對於@qqqwww:,最好是檢測用於指示缺失的值並將此類條目轉換為真實缺失或NA。[數字數據的離散化通常不是一個好主意。](http://biostat.mc.vanderbilt.edu/wiki/Main/CatContinuous)
-1
@CortAmmon許多數值庫都有表示NaN的標準方法,也許您有可以使用的類似方法?特別是,numpy放置nans而不是不能解析為數字的任何東西。
我已經看到了丟失數據表示為-99,-999、99、999或-99.99的情況。在同一個文件中。這是一團糟。
-1
whuber
2016-07-23 02:29:35 UTC
view on stackexchange narkive permalink

此類值適用於數據庫。很久以前,今天很多數據庫都為整數值數據分配了固定數量的數字。像-999這樣的數字是最小的,可以存儲四個字符,-9999可以存儲五個字符,依此類推。

(毫無疑問,根據定義,數字字段不能存儲字母數字字符,例如“ NA”。必須使用一些數字代碼來表示丟失或無效的數據。)

為什麼使用可以存儲的最大負數來表示缺少值? 因為如果您錯誤地將其視為有效數字,則希望結果顯著不正確。您的缺失值代碼越接近實際,您就越安全,因為輸入錯誤嚴重,通常會導致錯誤輸出。 (強大的統計方法是個例外!)

怎麼會發生這樣的錯誤?在系統之間交換數據時,始終會發生這種情況。當您以大多數格式(例如CSV)寫出數據時,假定-9999表示缺少值的系統將自動輸出該值。讀取CSV文件的系統可能不會“知道”(或不會“告訴”)以將這些值視為丟失。

另一個原因是,良好的統計數據和計算平台會識別許多不同類型的丟失值:NaN,真正的缺失值,上溢,下溢,無響應等。通過為這些值分配盡可能多的負值(例如-9999,-9998,-9997等),您可以輕鬆查詢排除任何表或數組中所有缺失的值。

另一個是,此類值通常在圖形顯示中顯示為極端異常值。在您可以選擇在圖形中突出顯示的所有值中,最負數的值表示遠離數據的可能性最大。


有一些有用的含義和概括:

  • 用於浮點字段中丟失數據的一個很好的值是最負的有效數字,對於雙精度浮點數,大約等於$ -10 ^ {303} $。(想像一下平均會產生的效果!)基於同一原理,許多使用單精度浮點數的舊程序都使用一些任意大數,例如1E + 30來表示缺失值。

  • 採用這種標準規則,以便在新情況下(設計自己的數據庫軟件時)輕鬆發明NoData代碼。

  • 設計如果您的軟件和系統完全失敗,則它們將嚴重失敗。最嚴重的錯誤是斷斷續續的,隨機的或很小的錯誤,因為它們可能會被發現而難以發現。

當然,如果您使用的是浮點數,則可以使用`NaN`表示缺失值。毫無疑問,它是否是一個有效的數值,而且(鑑於大多數標準浮點運算是NaN傳播的),比任何情況都更加確定和明顯地弄錯了將其錯誤地視為有效數據點的所有計算,例如,$-10 ^ {303} $會。
NaN不是數字,NA至少在R中不可用
從理論上講,IEEE浮動支持不同種類的NaN,它們可以用作不同種類的丟失/無效數據的標籤。在實踐中,大多數編程語言都缺乏適當的支持來區分此類NaN,並且容易丟失這些額外信息。
很好,除了符號位沒有佔用數據庫實際使用的方案中的任何空間。他們將分成00-99的數字對,並將它們視為數字。但是如果數字為負,則將存儲255-#而不是數字。127和128也用於+/- inf。
-1
Tim
2016-07-23 00:53:24 UTC
view on stackexchange narkive permalink

您可以使用任何編碼缺失值。某些軟件(例如R)使用特殊值對丟失的數據進行編碼,但也有一些軟件包,例如SPSS,沒有用於丟失數據的任何特殊代碼。在第二種情況下,您需要為這些值做出任意選擇。您可以選擇任何內容,但是通常最好選擇一個明顯不同於您數據的值(例如,您的數據是0-100範圍內的百分比,因此您選擇999以編碼丟失的數據,或您的數據是人類年齡,並且您使用負值表示缺失的觀察值)。其背後的想法是,通過這樣做,您應該能夠注意到是否出了點問題並且數字沒有累加。

但是,這種編碼的問題是,您實際上無法注意到特殊的編碼並最終導致垃圾結果。

AdamO
2016-07-23 00:55:13 UTC
view on stackexchange narkive permalink

數據集中是否存在計算變量?還是這是來自合併/排序數據的分析數據集?一些軟件使用非常大的負值來表示丟失的數據。但是其他軟件會使用NA或創建缺失值。當它們不一致時,通常一些後期處理會導致分歧。

JKP
2016-07-29 20:28:58 UTC
view on stackexchange narkive permalink

當然,在SPSS中,缺失值999或任何標記為特殊缺失代碼的IS均與其他值分開處理。它可以單獨列出,也可以完全排除。區別在於零除法或log(0)之類的結果。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...