Почему некоторые люди используют -999 или -9999 для замены пропущенных значений?


32

У меня есть набор данных. Есть много пропущенных значений. Для некоторых столбцов отсутствующее значение было заменено на -999, но для других столбцов отсутствующее значение было отмечено как «NA».

Почему мы используем -999 для замены отсутствующего значения?


1
Я никогда не видел -999 сам. До сих пор я видел пустые строки и NA.
Йе Тянь

12
Потому что они хотят ужасно испортить результаты для людей, которые делают поверхностный анализ и не читают документацию внимательно! (Будучи серьезным, у @Stephan Kolassa есть реальный ответ.)
Мэтью Ганн

1
Спросите человека, который предоставил набор данных ...?
BlueRaja - Дэнни Пфлугхофт

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

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

Ответы:


65

Это воздержание от более ранних времен, когда компьютерное программное обеспечение сохраняло числовые векторы как числовые векторы. Ни у одного действительного числа нет семантики "Я скучаю". Поэтому, когда раннему статистическому программному обеспечению приходилось различать «истинные» числа и пропущенные значения, они вводили что-то, что было «явно» недопустимым числом, например -999 или -9999.

Конечно, то, что -999 или -9999 обозначали пропущенное значение, вовсе не «очевидно». Довольно часто это может быть допустимым значением. Если вы явно не проверите для таких значений, вы можете иметь все виды «интересных» ошибок в ваших анализах.

В настоящее время числовые векторы, которые могут содержать отсутствующие значения, внутренне представляются как «обогащенные» числовые векторы, то есть числовые векторы с дополнительной информацией о том, какие значения отсутствуют. Это, конечно, намного лучше, потому что тогда пропущенные значения будут рассматриваться как таковые, а не ошибочно рассматриваться как действительные.

К сожалению, некоторые программы все еще используют такое соглашение, возможно, для совместимости. И некоторые пользователи впитали это соглашение с помощью неформального осмоса и вводят -999 вместо NA, даже если их программное обеспечение поддерживает чистый ввод пропущенных значений.

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


1
В дополнение к тому, что это было воздержание от более ранних времен, есть люди, которые никогда не узнали, что существует явное представление пропущенных значений, и поэтому, когда им нужно вставить пропущенное значение, представьте, что вещь, которую нужно использовать, является неким фальшивым количество.
Кодиолог

9
Это не просто вещь, которая мешает. Если я пишу инструмент для манипулирования данными, чтение по столбцам чисел легко практически на любом языке программирования. Считывание значений, обнаружение нечисловых значений и их разбор соответственно занимают гораздо больше времени. И если вы думаете, что -9999 плохо со статистикой, моя группа, с которой я работаю, развила любовь к использованию 1e32 для недопустимых значений. Позвольте мне рассказать вам, что происходит с вашей дисперсией, когда вы делаете это!
Корт Аммон - Восстановить Монику

1
Отличный, лаконичный ответ. Но добавление некоторых исторических деталей может сделать его еще лучшим ответом. По общему признанию, это заняло бы некоторое исследование. :)
чакраварти

1
Такое кодирование может также использоваться для обозначения некоторого другого вида ошибки измерения; то есть "машина не работала" против "никто не был там, чтобы сделать измерение".
Хао Е,

1
@qqqwww: было бы лучше определить значение, используемое для указания отсутствия, и преобразовать такие записи в истинное отсутствие или NA. Дискретность числовых данных обычно не очень хорошая идея.
С. Коласса - Восстановить Монику

24

Такие значения для баз данных. Многие базы данных давно и многие сегодня выделяют фиксированное количество цифр для целочисленных данных. Число, подобное -999, является наименьшим из четырех символов, -9999 - из пяти символов и т. Д.

(Само собой разумеется, что - по определению - числовое поле не может хранить буквенно-цифровые символы, такие как «NA». Некоторый числовой код должен использоваться для представления отсутствующих или недействительных данных.)

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

Как могла произойти такая ошибка? Это происходит все время, когда данные обмениваются между системами. Система, которая предполагает, что -9999 представляет пропущенное значение, будет беспечно выводить это значение, когда вы записываете данные в большинстве форматов, таких как CSV. Система, которая считывает этот CSV-файл, может не «знать» (или не «говорить»), чтобы рассматривать такие значения как отсутствующие.

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

Еще одним является то, что такие значения обычно отображаются на графических дисплеях как экстремальные выбросы. Из всех значений, которые вы могли бы выделить на графике, наиболее отрицательное из всех возможных дает наибольший шанс оказаться далеко от ваших данных.


Есть полезные последствия и обобщения:

  • Хорошее значение для использования для пропущенных данных в полях с плавающей запятой - это наиболее отрицательное действительное число, примерно равное -10303для поплавков двойной точности. (Представьте себе эффект, который будет иметь место для любого среднего значения!). По тому же принципу многие старые программы, которые использовали числа с плавающей запятой одинарной точности, использовали несколько произвольных больших чисел, таких как 1E + 30, для пропущенных значений.

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

  • Спроектируйте свое программное обеспечение и системы, чтобы резко потерпеть неудачу, если они вообще терпят неудачу. Худшие ошибки - это случайные, случайные или крошечные ошибки, потому что они могут остаться незамеченными и их трудно выследить.


2
Конечно, если вы используете float, вы можете просто использовать NaNдля пропущенных значений. Это не имеет никакой двусмысленности относительно того, является ли это действительное числовое значение или нет, и (учитывая, что большинство стандартных операций с плавающей запятой распространяются на NaN), все вычисления, которые ошибочно воспринимают его как действительную точку данных, даже более надежно и очевидно, чем, сказать,-10303было бы.
Ильмари Каронен

NaN не является числом, NA нет в наличии , по крайней мере в R
ЛОП

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

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

@Joshua Это может быть правильно для некоторых баз данных, но определенно не так для многих других, особенно на ранних стадиях разработки. В любом случае, любая база данных, использующая десятичные закодированные значения, не могла бы использовать предложенный вами механизм. Примером ранней и широко используемой базы данных ПК, которая работает так, как я описал, является dBase, в конечном итоге предлагаемый в качестве продуктов dBase III, Clipper и FoxPro (приобретенный Microsoft, а затем заброшенный в пользу Access). Для форматов обмена данными с фиксированной шириной поля знак минус всегда занимает символ.
whuber

13

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

Однако проблема с такой кодировкой заключается в том, что вы фактически не можете заметить специальную кодировку и в итоге получите результаты с мусором.


2

Есть ли вычисленные переменные в наборе данных? Или это аналитический набор данных, который поступает из объединенных / отсортированных данных? Некоторые программы используют очень большие отрицательные значения для обозначения пропущенных данных. Но другое программное обеспечение создает недостающие значения с помощью NA или .. Когда они не совпадают, обычно некоторая последующая обработка приводит к разногласиям.


2

Of course, in SPSS, the missing value(s) 999 or whatever IS tagged as a special missing code and handled separately from other values. It may be tabulated separately or excluded entirely. A distinction is made from the result of things like zero division or log(0).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.