Основные тесты проверки данных

93

В своей работе я часто работаю с наборами данных других людей, неспециалисты приносят мне клинические данные, и я помогаю им обобщать их и выполнять статистические тесты.

Проблема, с которой я сталкиваюсь, состоит в том, что наборы данных, которые я привожу, почти всегда полны опечаток, несоответствий и других проблем. Мне интересно знать, есть ли у других людей стандартные тесты, которые они делают, чтобы проверить какие-либо входящие наборы данных.

Раньше я рисовал гистограммы для каждой переменной, просто чтобы посмотреть, но теперь я понимаю, что существует множество ужасных ошибок, которые могут пережить этот тест. Например, у меня был набор данных о повторных измерениях на днях, когда для некоторых людей повторное измерение было идентичным во Времени 2, как и во Времени 1. Впоследствии, как и следовало ожидать, это оказалось неверным. В другом наборе данных был человек, который прошел путь от очень серьезного беспорядка (представленного высокой оценкой) до отсутствия проблем, представленный нулями по всем направлениям. Это просто невозможно, хотя я не смог доказать это окончательно.

Итак, какие базовые тесты можно запустить для каждого набора данных, чтобы убедиться, что в них нет опечаток и они не содержат невозможных значений?

Заранее спасибо!

Крис Били
источник
3
Отличный вопрос Я подозреваю, что будет сложно дать общие ответы, потому что проверки будут зависеть от специфики набора данных.
mark999
2
@ mark999 Я согласен. Мне будет интересно прочитать ответы на этот вопрос. Существуют некоторые общие стратегии, но я обнаружил, что большая часть проверок связана с построением ожиданий, специфичных для предметной области, как с точки зрения того, как должны выглядеть данные, так и с некоторыми распространенными ошибками, которые могут возникнуть.
Jeromy Anglim
1
Читателей здесь также будет интересовать следующая тема: Руководство по обеспечению качества и контролю качества (qa / qc) для базы данных .
gung - Восстановить Монику

Ответы:

77

Это помогает понять, как данные были записаны.

Позвольте мне поделиться историей . Когда-то давным-давно многие наборы данных хранились только в распечатанном виде. В те мрачные дни я заключил контракт с организацией (с большой родословной и размерами; многие из вас, вероятно, владеют ее запасами), чтобы компьютеризировать около 10 ^ 5 записей данных мониторинга окружающей среды на одном из ее производственных предприятий. Для этого я лично разметил полку лабораторных отчетов (чтобы показать, где были данные), создал формы ввода данных и заключил контракт с временным агентством для грамотныхработники, чтобы ввести данные в формы. (Да, вам пришлось доплачивать за людей, которые могли читать.) Из-за ценности и чувствительности данных я проводил этот процесс параллельно с двумя работниками одновременно (которые обычно менялись изо дня в день). Прошло пару недель. Я написал программное обеспечение для сравнения двух наборов записей, систематически выявляя и исправляя все обнаруженные ошибки.

Мальчик был там ошибки! Что может пойти не так? Хороший способ описать и измерить ошибки - на уровне базовой записи, которая в этой ситуации представляла собой описание одного аналитического результата (часто концентрации некоторого химического вещества) для конкретного образца, полученного в данной точке мониторинга на данная дата. Сравнивая два набора данных, я обнаружил:

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

  • Очевидные ошибки упущения , которые действительно были ошибками ввода данных. Запись идентифицируется по имени точки мониторинга, дате и «аналиту» (обычно химическое название). Если какой-либо из них имеет типографскую ошибку, он не будет сопоставлен с другими записями, с которыми он связан. В результате правильная запись исчезает и появляется неправильная запись.

  • Поддельное дублирование . Одни и те же результаты могут появляться в нескольких источниках, могут быть расшифрованы несколько раз и кажутся истинными повторными измерениями, когда их нет. Дубликаты легко обнаружить, но решение, являются ли они ошибочными, зависит от того, должны ли дубликаты появляться в наборе данных. Иногда ты просто не можешь знать.

  • Откровенные ошибки ввода данных . «Хороших» легко поймать, потому что они меняют тип датума: например, использование буквы «О» для цифры «0» превращает число в не число. Другие хорошие ошибки меняют значение настолько, что его легко обнаружить с помощью статистических тестов. (В одном случае начальная цифра в «1 000 010 мг / кг» была обрезана, оставив значение 10. Это огромное изменение, когда вы говорите о концентрации пестицидов!) Плохие ошибки трудно уловить, поскольку они меняются значение в единицу, которое (вроде) соответствует остальным данным, например, набрав «80» для «50». (Такая ошибка постоянно происходит с программным обеспечением OCR.)

  • Транспозиции . Правильные значения могут быть введены, но связаны с неправильными ключами записи. Это коварно, потому что глобальные статистические характеристики набора данных могут остаться неизменными, но между группами могут возникать ложные различия. Вероятно, только такой механизм, как двойная запись, способен обнаруживать эти ошибки.

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

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

  1. По возможности создавайте избыточность в процедурах ввода и транскрипции данных: контрольные суммы, итоги, повторные записи: все, что поддерживает автоматические внутренние проверки согласованности.

  2. Если возможно, создайте и используйте другую базу данных, которая описывает, как должны выглядеть данные: это компьютерно-читаемые метаданные. Например, в эксперименте с наркотиками вы можете заранее знать, что каждого пациента будут видеть три раза. Это позволяет вам создать базу данных со всеми правильными записями и их идентификаторами со значениями, которые только что ожидали быть заполненными. Заполните их данными, данными вам, а затем проверьте на наличие дубликатов, пропусков и непредвиденных данных.

  3. Всегда нормализуйте свои данные (в частности, введите их как минимум в четвертую нормальную форму ), независимо от того, как вы планируете форматировать набор данных для анализа. Это заставляет вас создавать таблицы для каждой концептуально отличной сущности, которую вы моделируете. (В случае окружающей среды это будет включать таблицы мест мониторинга, образцы, химикаты (свойства, типичные диапазоны и т. Д.), Тесты этих образцов (тест обычно охватывает набор химических веществ) и отдельные результаты этих тестов. При этом вы создаете множество эффективных проверок качества и согласованности данных и выявляете множество потенциально отсутствующих, дублирующих или противоречивых значений.

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

  4. Всегда выполняйте столько «глупых» проверок, сколько сможете . Это автоматическая проверка очевидных вещей, таких как даты попадают в ожидаемые периоды, количество пациентов (или химикатов или чего-либо еще) всегда складывается правильно, значения всегда разумны (например, pH должен быть между 0 и 14 и, возможно, в гораздо более узкий диапазон, скажем, для показаний pH крови) и т. д. Именно в этом может помочь экспертиза предметной области: статистик может безбоязненно задавать глупые вопросы экспертам и использовать ответы для проверки данных.

Конечно, можно сказать гораздо больше - предмет стоит книги - но этого должно быть достаточно, чтобы стимулировать идеи.

Whuber
источник
5
отличное приложение к вашей базе данных Рекомендации по обеспечению /
контролю
2
Один дополнительный вопрос - предмет стоит книги - есть ли книга?
Крис Били
5
+1 - чудесный ответ на вопрос. Я хотел бы, чтобы у вас был блог :) (Я бы хотел добавить ваше письмо на r-bloggers.com)
Тал Галили
2
Вы должны написать книгу, что предмет стоит!
Зак
1
Это настолько сложно, что многие консалтинговые фирмы специализируются на «поиске / очистке / хранении данных».
Лукас Рейс
25

@whuber делает отличные предложения; Я бы только добавил это: участки, участки, участки, участки. Диаграммы рассеяния, гистограммы, коробочные диаграммы, линейные диаграммы, тепловые карты и все, что вы можете придумать. Конечно, как вы обнаружили, есть ошибки, которые не будут очевидны ни на одном из графиков, но они являются хорошим началом. Просто убедитесь, что вы понимаете, как ваше программное обеспечение обрабатывает недостающие данные и т. Д.

В зависимости от контекста вы можете проявить творческий подход. Одна вещь, которую мне нравится делать с многомерными данными, - это подходить к какой-то факторной модели / вероятностному PCA (то, что будет делать множественное вложение для отсутствующих данных) и смотреть на оценки как можно большего числа компонентов. Точки данных, которые получают высокие оценки по менее важным компонентам / факторам, часто являются выбросами, которые вы могли бы не увидеть иначе.

JMS
источник
5
+1 Заговор для статистики, что голосование за Чикаго: то, что все делают рано и часто. ;-)
whuber
15

Большие вещи, которые я склонен проверять:

  1. Тип переменной - чтобы увидеть, что число является числовым, а не множителем / символом (может указывать на некоторую проблему с введенными данными)
  2. Согласованные уровни значений - чтобы увидеть, что переменная с именем "t1" не нашла себя снова с именем "t1" или "t 1"
  3. Выбросы - видят, что диапазоны значений имеют смысл. (Вы получили значение кровяного давления 0? или минус?). Здесь мы иногда обнаруживаем, что кто-то закодировал -5 как пропущенное значение или что-то в этом роде.
  4. Линейные ограничения. Я не использую это, но некоторые находят, что они хотят иметь реструктуризацию зависимостей некоторых столбцов (столбцы A, B должны добавить к C, или что-то в этом роде). Для этого вы можете взглянуть на дедуктивный пакет (я встречался с докладчиком Марком ван дер Лоо на последней конференции useR - и был очень впечатлен его пакетом)
  5. слишком мало случайности Иногда значения должны быть округлены до некоторых значений или усечены в некоторой точке. Подобные вещи часто более понятны на точечных графиках.
  6. Пропущенные значения - убедитесь, что пропущенное не связано с какой-либо другой переменной (пропущено случайно). Но у меня нет большого правила, чтобы дать здесь.
  7. Пустые строки или строки с большей частью без значений. Они должны быть (обычно) найдены и опущены.

Отличный вопрос Кстати, я надеюсь прочитать опыт других людей по этому вопросу.

Таль Галили
источник
10

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

Робин Жирар
источник
7

Несколько я всегда прохожу:

  1. Есть ли количество записей, которые должны быть? Например, если вы извлекли свои данные из другого источника или из подмножества чужих данных, ваши цифры выглядят разумно. Вы могли бы подумать, что это будет покрыто, но вы ... будете удивлены.
  2. Все ваши переменные там? Имеют ли значения эти переменные смысл? Например, если переменная Да / Нет / Отсутствует кодируется «1,2,3» - что это значит?
  3. Где ваши пропущенные значения? Есть ли переменные, которые кажутся перегруженными отсутствующей информацией? Есть определенные предметы с огромным количеством пропущенных значений.

Это первые шаги, которые я прошёл, чтобы убедиться, что набор данных даже готов для чего-то вроде исследовательского анализа данных. Просто сижу, бродя по данным, некоторые говорят: "Это ... кажется правильным?"

фомиты
источник
1

Я бы использовал метод приемочной выборки для каждого столбца (он дает номер отсечения, где вы можете провести границу между высоким качеством и низким качеством), для этого есть онлайн-калькулятор.

Тарек Шахван
источник
3
это лучше подходит как комментарий, чем как ответ в его нынешнем виде. пожалуйста, уточните немного, предоставьте ссылки на ресурсы или ссылки и т. д.
Антуан
1
Трудно увидеть многие обстоятельства, в которых это было бы эффективно, и легко найти множество, для которых оно либо не работает вообще (например, строки или другие номинальные данные), либо ужасно (потому что оно полностью игнорирует все многомерные отношения). Это также кажется произвольным, поскольку, за исключением временных рядов (и некоторых связанных данных), в записях таблицы данных нет внутреннего порядка, в то время как многие (если не все) методы приемочной выборки зависят от последовательности.
whuber
Хорошо, вот калькулятор для использования: sqconline.com/… Пока вы используете рандомизацию, можно использовать приемочную выборку. Если вы хотите усложнить это, вы можете использовать метод систематической выборки, а затем использовать приемную выборку для каждого сегмента
Тарек Шахван