Обработка отсутствия/неполных данных в R - является там функцией к маске, но не удаляют NAS?

Поскольку Вы ожидали бы от DSL, нацеленного на анализ данных, R отсутствие/неполные данные дескрипторов очень хорошо, например:

Много функций R имеют флаг na.rm, что, когда установлено на ПРАВДА, удалите NAS:

>>> v = mean( c(5, NA, 6, 12, NA, 87, 9, NA, 43, 67), na.rm=T)
>>> v
      (5, 6, 12, 87, 9, 43, 67)

Но если Вы хотите иметь дело с NAS перед вызовом функции, необходимо сделать что-то вроде этого:

удалить каждый 'NA' из вектора:

vx = vx[!is.na(a)]

удалить каждый 'NA' из вектора и заменить его w/'0':

ifelse(is.na(vx), 0, vx)

для удаления цельный каждая строка, которая содержит 'NA' от кадра данных:

dfx = dfx[complete.cases(dfx),]

Все эти функции постоянно удаляют 'NA' или строки с 'NA' в них.

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

чтобы быть максимально ясным о том, что я ищу: python/numpy имеет класс, замаскированный массив, с методом маски, который позволяет Вам скрыть - но не удалить - NAS во время вызова функции. В R существует ли аналогичная функция?

26
задан Brian Tompsett - 汤莱恩 3 December 2015 в 19:00
поделиться

2 ответа

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

Для примера, связанного с временными рядами, где вы можете захотеть пропустить, или заполнить, или интерполировать, или интерполировать по-другому, ... just (очень полезный и популярный) zoo имеет все эти функции, связанные с обработкой NA:

zoo::na.approx  zoo::na.locf    
zoo::na.spline  zoo::na.trim    

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

Другим примером могут служить многочисленные пакеты для вменения пропущенных данных на CRAN - часто предоставляющие решения, специфичные для конкретной области. [ Итак, если вы называете R DSL, что это такое? "Поддоменно-специфические решения для доменно-специфических языков" или SDSSFDSL? Довольно многословно :) ]

Но что касается вашего конкретного вопроса: нет, я не знаю о битовом флаге в базовом R, который позволяет помечать наблюдения как "подлежащие исключению". Я полагаю, что большинство пользователей R прибегают к функциям типа na.omit() и др. или используют упомянутую вами опцию na.rm=TRUE.

19
ответ дан 28 November 2019 в 07:22
поделиться

Хорошей практикой является изучение данных, из которых можно сделать вывод о типе пропущенных значений: MCAR (полное и случайное отсутствие), MAR (случайное отсутствие) или MNAR (неслучайное отсутствие)? На основе этих трех типов можно изучить базовую структуру пропущенных значений и сделать вывод о том, применима ли вообще интерполяция (вам повезет, если это не MNAR, потому что в этом случае пропущенные значения считаются неискоренимыми и связаны с каким-то неизвестным базовым влиянием, фактором, процессом, переменной... чем угодно).

Глава 3 в "Интерактивная и динамическая графика для аналитика данных с R и GGobi" авторов Ди Кука и Деборы Суэйн является отличной ссылкой по этой теме.

В этой главе вы увидите пакет norm в действии, но пакет Hmisc содержит процедуры интерполяции данных. См. также Amelia, cat (для вменения категориальных пропусков), mi, mitools, VIM, vmv (для визуализации отсутствующих данных).

Честно говоря, я все еще не совсем понимаю, ваш вопрос о статистике или о возможностях R по вменению пропущенных данных? Я считаю, что дал хорошие ссылки по второму вопросу, а по первому: вы можете заменить ваши NA либо на центральную тенденцию (среднее, медиану, или подобное), что уменьшит вариабельность, либо на случайную константу, "вытащенную" из наблюдаемых (зарегистрированных) случаев, либо вы можете применить регрессионный анализ с переменной, содержащей NA в качестве критерия, и другими переменными в качестве предикторов, затем присвоить остатки NA. ... это элегантный способ работы с NA, но довольно часто он не будет простым для вашего процессора (у меня Celeron на 1.1GHz, так что я должен быть нежным).

Это проблема оптимизации... здесь нет однозначного ответа, вы должны решить, что/почему вы придерживаетесь того или иного метода. Но посмотреть на данные - это всегда хорошая практика! =) Обязательно посмотрите Cook & Swayne - это отличное, умело написанное руководство. "Linear Models with R" by Faraway также содержит главу о пропущенных значениях.

Вот так.

Удачи! =)

15
ответ дан 28 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: