Чому деякі люди використовують -999 або -9999 для заміни відсутніх значень?


32

У мене є набір даних. Є багато відсутніх значень. Для деяких стовпців відсутнє значення було замінено на -999, а для інших стовпців значення пропущене було позначено як "NA".

Чому б ми використовували -999 для заміни відсутнього значення?


1
Я ніколи не бачив -999. Поки що я бачив порожні рядки та НС.
Ye Tian

12
Тому що вони хочуть жахливо зіпсувати результати людям, які роблять поверхневий аналіз і не читають документально уважно! (Хоча серйозно, але @Stephan Kolassa є справжньою відповіддю.)
Меттью Ганн

1
Запитайте людину, яка надала набір даних ...?
BlueRaja - Danny Pflughoeft

Ще краще 999 значень у стовпчиках вимірювання, щоб вказати, що вимірювання не застосовується ... принаймні -999 або 0 мали б семантичне значення, що це не дійсне / важливе значення. 999 - лише найгірший.
Адам Мартін

Я відчуваю, що колись читав, що це було умовою з часів запису даних на перфокарти. Вибивання повного рядка з 9-х років зробило відсутні дані чітко помітними при погляді на карту, оскільки вона була буквально "відсутнім рядком". Я не можу знайти посилання, щоб підтвердити це, тому я просто залишу це як коментар.
Лукас

Відповіді:


65

Це утриманка з більш ранніх часів, коли програмне забезпечення комп'ютера зберігало числові вектори як числові вектори. Жодне реальне число не має семантики "Я відсутній". Тож коли ранній статистичний програмний апарат мав розмежовувати "справжні" числа та відсутні значення, вони вводили щось, що "очевидно" не було дійсним числом, як -999 чи -9999.

Звичайно, те, що -999 або -9999 означало відсутність значення, зовсім не є "очевидним". Досить часто це, безумовно, може бути дійсним значенням. Якщо ви чітко не перевірите наявність таких значень, у ваших аналізах можуть виникнути всілякі "цікаві" помилки.

В даний час числові вектори, які можуть містити пропущені значення, внутрішньо представлені як "збагачені" числові вектори, тобто числові вектори з додатковою інформацією про те, які значення відсутні. Звичайно, це набагато краще, тому що тоді відсутні значення будуть розглядатися як такі, а помилково не трактуватися як дійсні.

На жаль, деякі програми все ще використовують таку умову, можливо, для сумісності. А деякі користувачі розбавили цю конвенцію через неофіційний осмос і вводять -999 замість NA, навіть якщо їх програмне забезпечення підтримує чисто введення пропущених значень.

Мораль: не кодуйте пропущені значення як -999.


1
Окрім того, що він утримується з більш ранніх часів, є ймовірні люди, які ніколи не дізнавались, що явне представлення пропущених значень існує, і тому, коли їм потрібно вставити пропущене значення, подумайте, що річ, яку потрібно використовувати, - це якась фіктивна число.
Кодіолог

9
Це не просто штучка. Якщо я пишу інструмент для певних маніпуляцій з даними, читання в стовпцях чисел легко про будь-яку мову програмування там. Читання значень у, виявлення нечислових значень та їх розбір відповідно займає набагато більше часу. І якщо ви думаєте -9999 псується зі статистикою, моя група, з якою я працюю, виробила любов до використання 1e32 для недійсних значень. Дозвольте мені розповісти, що відбувається з вашою дисперсією, коли ви це зробите!
Корт Аммон - Відновіть Моніку

1
Чудова, соковита відповідь. Але додавання деяких історичних деталей може зробити це ще кращою відповіддю. Справді, це потребує деяких досліджень. :)
чакраварти

1
Таке кодування може також використовуватися для позначення якоїсь іншої помилки вимірювання; тобто "машина не працювала" проти "нікого не було, щоб зробити вимірювання".
Hao Ye

1
@qqqwww: найкраще було б визначити значення, яке використовується для вказівки на відсутність, і перетворити такі записи в справжню відсутність або NA. Дискретизація числових даних зазвичай не є хорошою ідеєю.
S. Kolassa - Відновіть Моніку

24

Такі значення є для баз даних. Більшість баз даних давно, і багато сьогодні виділили фіксовану кількість цифр для цілочисельних даних. Число на зразок -999 - це найменше, яке можна зберігати в чотири символи, -9999 - в п'ять символів тощо.

(Само собою зрозуміло, що - за визначенням, числове поле не може зберігати буквено-цифрові символи, такі як "NA". Для представлення відсутніх або недійсних даних слід використовувати деякий числовий код.)

Навіщо використовувати найнегативніше число, яке можна зберегти для позначення відсутнього значення? Тому що якщо ви помилково трактуєте це як дійсне число, ви хочете, щоб результати були різко неправильними. Чим далі ваші коди для пропущених значень стають реалістичними, тим безпечнішими ви є, оскільки сильно неправильний ввід зазвичай викручує вихід. (Надійні статистичні методи - помітні винятки!)

Як могла статися така помилка? Це відбувається весь час, коли обмінюються даними між системами. Система, яка передбачає, що -9999 являє собою відсутнє значення, буде блискавично виводити це значення, коли ви записуєте дані в більшість форматів, таких як CSV. Система, яка читає, що файл CSV, можливо, не "знає" (або не буде "сказано"), щоб вважати такі значення як відсутні.

Ще одна причина полягає в тому, що хороші статистичні дані та обчислювальні платформи розпізнають багато різних видів пропущених значень: NaNs, справді відсутні значення, переливи, підтоки, невідповіді тощо, тощо. Виділяючи найбільш негативні можливі значення (наприклад, -9999, - 9998, -9997 і т. Д.) Ви спрощуєте запит на всі пропущені значення з будь-якої таблиці або масиву.

Ще одне полягає в тому, що такі значення зазвичай відображаються на графічних екранах як екстремальні люди. З усіх значень, які ви могли виділити на графіці, найбільш негативним є найбільший шанс бути далеко від ваших даних.


Є корисні наслідки та узагальнення:

  • -10303

  • Прийміть стандартне правило такого типу, щоб полегшити винахід кодів NoData в нових обставинах (коли ви розробляєте власне програмне забезпечення бази даних).

  • Створіть, щоб ваше програмне забезпечення та системи різко вийшли з ладу, якщо вони взагалі вийшли з ладу. Найгірші помилки - це переривчасті, випадкові чи крихітні, тому що вони можуть залишатися непоміченими та важко полювати.


2
NaN-10303

NaN - це не номер, NA не доступний принаймні в R
llrs

1
Теоретично IEEE поплавці підтримують різні види NaN, які добре працюватимуть як теги для різних видів відсутніх / недійсних даних. На практиці більшість мов програмування не мають належної підтримки для розрізнення таких NaN та схильні до втрати додаткової інформації.
CodesInChaos

Дуже добре, за винятком бітових знаків, не займає місця в схемі, яка фактично використовується базами даних. Вони розбиваються на розрядні пари 00-99 і розглядають їх як числа; але якщо число було негативним, вони зберігатимуть 255 - # замість числа. Також 127 і 128 використовували для +/- інф.
Джошуа

@Joshua Це може бути правильним для деяких баз даних, але, безумовно, це було не так для багатьох інших, особливо на початку розробки. Будь-яка база даних, що використовує десяткові закодовані значення, не могла б використовувати механізм, який ви пропонуєте. Приклад ранньої та широко використовуваної бази даних ПК, яка працює так, як я описав, - це dBase, зрештою пропонуються як продукти dBase III, Clipper та FoxPro (придбані Microsoft і пізніше відмовлені на користь доступу). Для форматів обміну даними з фіксованою шириною поля знак мінус завжди займає символ.
whuber

13

Ви можете використовувати що- небудь для кодування відсутніх значень. Деякі програми, як-от R, використовують спеціальні значення для кодування відсутніх даних, але існують також програмні пакети, наприклад, SPSS, які не мають спеціальних кодів для відсутніх даних. У другому випадку для таких значень потрібно зробити довільний вибір. Ви можете вибрати що завгодно , але, як правило, корисно вибрати якесь значення, яке помітно відрізняється від ваших даних (наприклад, ваші дані - це відсотки в діапазоні 0-100, тому ви вибираєте 999 для кодування відсутніх даних, або ваші дані є віком людини і ви використовуєте негативні значення для пропущених спостережень). Ідея цього полягає в тому, що, роблячи це, ви повинні мати можливість помітити, якщо щось пішло не так, а цифри не збігаються.

Проблема такого кодування полягає в тому, що ви насправді не можете помітити спеціальне кодування і закінчитись результатами сміття.


2

Чи є в наборі даних обчислені змінні? Або це аналітичний набір даних, який надходить у форму об'єднаних / відсортованих даних? Деякі програми використовують дуже великі негативні значення для позначення відсутніх даних. Але інше програмне забезпечення створює пропущені значення з NA або .. Якщо вони відмовляються, зазвичай деяка постійна обробка призводить до розбіжностей.


2

Звичайно, у SPSS відсутнє значення (и) 999 або будь-яке інше IS позначено як спеціальний відсутній код і обробляється окремо від інших значень. Він може бути поданий у таблицю окремо або повністю виключений. Розрізняють результат таких речей, як нульовий поділ або журнал (0).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.