Это руководство для всех, кому нужно делиться статистическими данными со специалистами. Я имел в виду следующие целевые группы:
- Научные сотрудники, которым нужно, чтобы статистик проанализировал их данные
- Студенты или профессура по научным дисциплинам, ищущие консультации по поводу данных
- Начинающие студенты-статистики, чья работа -- объединять/чистить наборы данных
Цель этого руководства -- проинструктировать по поводу наилучшего способа обмена данными, который позволяет избежать распространённых ошибок и задержек при переходе от сбора данных к их анализу. Сообщество Leek group объединяет большое количество участников, и состояние входных данных -- это фактор номер один из числа влияющих на скорость получения результатов. Основываясь на моих беседах с другими статистиками могу сказать, что то же наблюдается практически повсеместно.
Я убеждён, что статистик должен быть в состоянии справиться с данными, в каком бы состоянии они ни попали ему в руки. Важно видеть сырые данные, понимать шаги их обработки и уметь инкорпорировать в анализ скрытые источники непостоянства результатов. С другой стороны, для многих типов данных шаги обработки хорошо документированы и стандартизованы. Поэтому работа по преобразованию сырых данных в форму, пригодную для анализа, может быть выполнена без участия специалиста по данным. Это может существенно сократить сроки выполнения анализа, поскольку статистику не придётся самому заниматься препроцессингом.
Для того чтобы максимально ускорить анализ, вам следует передать статистику:
- Сырые данные.
- Аккуратную таблицу данных (tidy data set)
- Справочник к данным, описывающий все переменные и их значения в аккуратной таблице данных.
- Подробный и точный порядок действий, который привёл вас от пункта 1 к пунктам 2, 3.
Давайте рассмотрим подробнее каждую часть этой посылки.
Очень важно, чтобы вы включили самую сырую форму данных, к которым у вас есть доступ. Вот несколько примеров сырых данных:
- Странный двоичный файл (англ.), который выплюнул ваш измерительный прибор
- Неотформатированный файл Excel в 10 листами, который прислала вам компания-заказчик
- Сложный JSON-файл (англ.), который вы получили в результате скрейпинга твиттера через Twitter API
- Числа, написанные от руки, которые вы собрали, глядя в микроскоп
Можно быть увереным, что перед вами сырые данные, если вы:
- Не можете скормить их какой-либо программе
- Не манипулировали их значениями
- Не удаляли данные из набора
- Не агрегировали и не обобщали данные иным образом
Если вы произвели какие-либо манипуляции с данными, это уже не сырая их форма. Выдать изменённые данные за сырые -- верный способ замедлить процесс анализа, поскольку аналитику придётся проводить целое расследование, чтобы выяснить, почему исходные данные выглядят странно.
Общие принципы аккуратных данных сформулированы Хадли Уикхемом Hadley Wickham в этой статье и в этом видео. И статья, и видео фокусируются на пакете для R, с котором вы уже можете быть знакомы. Вне зависимости от этого, стоит обратить внимание на четыре принципа:
- Каждая переменная должна занимать один столбец
- Каждое наблюдение за переменной должно занимать отдельную строку
- Для каждого "типа" переменных должна быть своя таблица
- Если у вас несколько таблиц, они должны включать столбец, по которому их можно связать друг с другом
Кроме этих чётких правил есть ряд других, которые упростят вам работу с данными. Во-первых, включать в заголовок каждой таблицы строку с полными именами столбцов. Так, если вы измеряете возраст, в котором пациентам выставили диагноз, то озаглавите соответствующую колонку AgeAtDiagnosis
вместо чего-то вроде ADx
или другой аббревиатуры, которую будет сложно понять другому человеку.
Вот пример, как это работает, из области геномики. Допустим, для 20 человек вы собрали показатели экспресии генов с помощью секвенирования РНК (англ.). У вас также есть демографическая и клиническая информция о пациентах, включая возраст, лечение и диагноз. В одной таблице будут храниться клинические и демографические данные. Она будет состоять из четырёх столбцов (идентификатор пациента, возраст, лечение, диагноз) и 21 строки (строка заголовка, далее по одной строке на каждого пациента). У вас также будет одна таблица с обобщёнными геномными данными. Обычно данные этого типа обобщают до количества на один экзон. Предположим, у вас 100000 экзонов, тогда получим таблицу в 21 строку (первая для названий генов, далее по строке на пациента) на 100001 столбец (первый для идентификаторов пациентов и по одному для каждого типа данных).
Если вы отправляете данные соавтору в Excel, каждая аккуратная таблица должна лежать в отдельной книге. Книги должны содержать по одному листу, без макросов и без выделения столбцов, строк, отдельных ячеек. Альтернативов Excel являются:
- значения, разделённые запятыми, или формат CSV (англ.)
- значения, разделённые табуляциями, или TSV (англ.).
Практически всегда ваши вычисления требуют более подробного описания, чем те догадки, которые можно сделать по таблице с данными. Эту информацию содержит справочник к данным. Как минимум, в нём должна быть:
- Информация о переменных (включая единицы измерения!) набора данных, которая не включена в аккуратную таблицу
- Информация об агрегировании и обобщении исходных данных, которые вы применили
- Информация о дизайне эксперимента, который вы использовали
В нашем примере с геномом, аналитик захочет знать единицы измерения для каждой клинической/демографической переменной (возраст в годах; наименование и доза лекарственного препарата; диагноз; неоднородность переменной). Также он захочет знать, как вы выбрали экзоны для обобщения геномных данных (UCSC/Ensembl и т.д.). Кроме того, понадобится любая информация о сборе данных и дизайне исследования. Например, это были первые 20 пациентов, которые пришли в больницу? Или 20 пациентов были отобраны по некоей характеристике, такой как возраст? Применялась ли при назначении лечения рандомизация?
Обычно этот документ сохраняется в файле формата Word. В нём должна быть секция под заголовком "Дизайн исследования", которая содаржит подробное описание процесса сбора данных. Секция "Справочник" описывает каждую переменную и её единицы измерения.
Рапределяя переменные по таблицам, вы можете столкнуться с несколькими основными категориями, в зависимости от типа данных (англ.):
- Непрерывные
- Порядковые
- Категориальные (номинальные)
- Пропущенные
- Цензурированные
Нерперывные переменные -- это что угодно, измеренное в количественной шкале и представленное любым дробным числом. Примером может служить масса, измеренная в килограммах. Порядковые данные (англ) -- это данные с ограниченным (<100) набором упорядоченных значений. Например, ответы на опрос с вариантами: низкий, достаточный, высокий. Категориальные данные (англ.) -- это данные с большим числом категорий, причём они не упорядочены. Примером может быть пол: женский или мужской. Пропущенные данные (англ.) -- это данные, которые были упущены, и вы не знаете каким образом. Пропущенные значения нужно кодировать как NA
. В цензурированных данных (англ. механизм пропусков для некоторых уровней известен. Обычные примеры -- это измерения ниже порога чувствительности прибора или пациент, связь с которым потеряна. Такие пропуски также следует кодировать как NA
. Однако кроме этого нужно добавить к аккуратной таблице столбец VariableNameCensored
, в котором TRUE
соответствуют цензурированным наблюдениям, а FALSE
-- всем остальным. В справочнике следует объяснить, почему эти наблюдения пропущены. Абсолютно необходимо сообщить аналитику, почему вы считаете, что некоторые данные пропущены. Не следует заполнять (англ./придумывать/выбрасывать пропущенные наблюдения.
В общем случае, попытайтесь обойтись без перекодирования категориальных переменных в числа. Когда вы вносите значение в столбец "пол" аккуратной таблицы данных, это должно быть "мужской" или "женский". Порядковые значения набора данных должны быть "низкий", "достаточный", "высокий", а не 1, 2, 3. Это поможет избежать потенциальной путаницы по поводу того, в какую сторону направлены воздействия, и поможет идентифицировать ошибки кодирования.
Всегда описывайте всю информацию о данных текстом. Например, если вы храните данные в Excel и используете начертание шрифта, цвет текста или ячейки для выделения информации о наблюдении ("красные значения переменных наблюдались в ходе эксперимента номер один"), эта информация не эспортируется (и будет потеряна!), когда данные будут сохранены как простой текст. Каждая крупица данных должна быть представлена текстом, который можно экспортировать без потерь.
Вы, должно быть, слышали это раньше, но воспроизводимость -- большое дело в науке о вычислениях. Это означает, что когда вы отправляете свою статью, рецензенты и остальной мир должны иметь возможность с точностью повторить анализ от исходных данных до финальных результатов. Если вы пытаетесь работать эффективно, то, скорее всего, предпримете какие-то шаги по обобщению/предварительному анализу данных прежде, чем данные можно будет считать аккуратными.
На этой стадии предварительного обобщения идеально было бы создать скрипт (на R
, Python
или на чём-то ещё), который получает сырые данные и выдаёт аккуратные таблицы, которыми вы поделитесь. Можно попробовать запустить этот скрипт несколько раз чтобы убедиться, что он выдаёт один и тот же результат.
Во многих случаях у человека, собравшего данные, есть стимул сделать их аккуратными для статистика, чтобы ускорить процесс сотрудничества. А языки обработки данных, на которых можно написать скрипт, известны не всем. В этом случае нужно предоставить статистику так называемый псевдокод (англ.). Он выглядит примерно так:
- Шаг 1 -- взять файл с сырыми данными, запустить версию 3.1.2 обобщающей программы с параметрами a=1, b=2, c=3.
- Шаг 2 -- прогнать программу отдельно на каждой выборке
- Шаг 3 -- взять столбец номер три файла
outputfile.out
для каждой выборки, а также соответствующую строку в результирующем наборе данных
Также вам следует включить информацию о том, под какой операционной системой вы запускали программное обеспечение и пробовали ли вы запустить его несколько раз, чтобы убедиться в неизменности результата. В идеале надо поручить это сокурснику/коллеге, чтобы подтвердить, получил ли он тот же файл с результатами, что и вы.
Передавая аналитику правильно обработанную аккуратную таблицу данных, вы сокращаете его нагрузку прямо-таки драматически. И есть надежда, что он ответит намного быстрее. Но наиболее осторожные статистики проверят ваши инструкции, зададут вопросы о предпринятых вами шагах и как минимум выборочно попытаются убедиться, что они получают те же аккуратные данные, что и вы.
Далее вам следует ожидать от статистика:
- Скрипт с анализом для каждой отдельной стадии (не просто инструкции)
- Код на компьютерном языке, реализующий анализ
- Все файлы, которые генерирует скрипт
Это информация, которую вы используете, чтобы доказать к воспроизводимость и точность результатов. Каждый шаг, предпринятый аналитиком, должен сопровождаться объяснениями, и когда какой-то из них непонятен, нужно задавать вопросы. Понимание статистического анализа -- зона ответственности как статистика, так и исследователя. Вы можете не суметь повторить в точности предпринятый специалистом по статистике анализ без его программного кода, но вы должны объяснить, почему статистик предпринял тот или иной шаг своему коллеге/руководителю исследования.
- Jeff Leek - написал первоначальную версию.
- L. Collado-Torres - исправил опечатки, добавил ссылки.
- Nick Reich - добавил советы по хранению данных в виде текста.
- Светлана Аксюк [email protected]
Гиперссылки были обновлены везде, где присутствует русскоязычный аналог исходной веб-страницы. Оригинальные ссылки сохранены под пометкой "англ.".