Всем привет !!

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

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

«Нет ответа» может не отвечать на определенные вопросы из-за стресса, усталости, недостатка знаний или даже из-за деликатности вопроса. Эти «нет ответов» считаются пропущенными значениями.

Способы обработки отсутствующих значений

Аналитик может оставить данные или произвести i вычисление данных для замены отсутствующих значений. Предположим, что количество случаев пропущенных значений чрезвычайно мало; затем вы можете отбросить или исключить эти значения из анализа. Говоря языком статистики, если количество случаев составляет менее 5% от выборки, аналитик может отказаться от них.

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

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

Например: для проверки недостающих данных мы используем следующие команды в R

  • Следующая команда дает сумму пропущенных значений во всем столбце фрейма данных:

colsums (is.na (фрейм данных))

  • Следующая команда дает сумму пропущенных значений в определенном столбце. Эта команда также может вводить в заблуждение, поскольку отсутствующие значения по существу принимаются как «нулевые значения», а не «NA», а sum (is.na ()) суммирует только те, где вашему значению в наборе данных присвоено «NA». Поэтому вместо этого установите na.string = True при чтении набора данных в R.

сумма (is.na (имя столбца $ фрейма данных)

Пропущенные значения можно исправить следующими способами:

  1. Удаление: метод удаления используется, когда вероятность пропуска переменной одинакова для всех наблюдений.

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

Удаление может быть двух типов: разумное удаление списка и парное удаление.

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

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

  • Нормальное / обобщенное вменение: в этом случае мы вычисляем среднее или медианное значение для всех не пропущенных значений этой переменной, а затем заменяем пропущенное значение средним или медианой. Как и в таблице выше, переменная «Возраст» отсутствует, поэтому мы берем среднее значение из всех не пропущенных значений «Возраст» (24,8), а затем замените им пропущенное значение.
  • Вменение в аналогичном случае. В этом случае мы вычисляем среднее значение для пола «Мужской» (22) и «Женский» (30) отдельно не пропущенные значения, затем замените отсутствующее значение в зависимости от пола. Таким образом, мы заменим отсутствующие значения возраста «Мужской» на 22, а отсутствующие значения «Женский» - на 30.

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

Но, как таковой, у этого подхода могут быть некоторые недостатки, например:

  1. Расчетные значения модели обычно более корректны, чем истинные значения.
  2. Если нет отношений с атрибутами в наборе данных и атрибутом с пропущенными значениями, то модель не будет точной для оценки отсутствующих значений.

4. KNN Imputation: В этом методе вменения отсутствующие значения атрибута вменяются с использованием заданного количества атрибутов, которые наиболее похожи на атрибут, значения которого отсутствуют. Сходство двух атрибутов определяется с помощью функции расстояния. Также известно, что у него есть определенные преимущества и недостатки.

Преимущества:

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

Недостаток:

  • Алгоритм KNN требует очень много времени при анализе больших баз данных. Он просматривает все наборы данных в поисках наиболее похожих экземпляров.
  • Выбор значения k очень важен. Более высокое значение k будет включать атрибуты, которые значительно отличаются от того, что нам нужно, тогда как более низкое значение k просто означает отсутствие некоторых ключевых значимых атрибутов.

Несмотря на вышеупомянутые методы, R имеет различные пакеты для работы с недостающими данными.

Список пакетов R для работы с отсутствующими данными:

  1. МЫШЕЙ
  2. Hmisc
  3. Амелия
  4. missForest
  5. mi

Пакет MICE

MICE (Multivariate Imputation via Chained Equations) - один из наиболее часто используемых пакетов для пользователей R. Создание нескольких вменений по сравнению с одним вменением (например, средним) устраняет неопределенность в пропущенных значениях.

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

Например: Предположим, у нас есть n1, n2… .nk переменных. Если n1 имеет пропущенные значения, тогда он будет регрессировать по другим переменным от n2 до nk. Затем пропущенные значения в n1 будут заменены полученными прогнозными значениями. Точно так же, если n2 имеет пропущенные значения, тогда переменные от n1, n3 до nk будут использоваться в модели прогнозирования как независимые переменные. Позже пропущенные значения будут заменены прогнозируемыми значениями.

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

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

В частности, в этом пакете используются следующие методы:

  1. PMM (Predictive Mean Matching) - для числовых переменных
  2. logreg (логистическая регрессия) - для двоичных переменных (с 2 уровнями)
  3. polyreg (байесовская политомическая регрессия) - для факторных переменных (›= 2 уровня)
  4. Модель пропорциональных шансов (упорядоченная, ›= 2 уровня)

Давайте разберемся практически сейчас.

#Load the dataset
> data <- iris

#Get summary of the dataset
> summary(data)

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

#Installing missForest package

>install.packages("missForest")
>library(missForest)

#Generate 10% missing values at Random
> missing <- prodNA(iris, noNA = 0.1)

#Check missing values introduced in the data
> summary(missing)

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

# Removing categorical data

> missing <- subset(missing, select = -c(Species))
> summary(missing)

# установить мышей
> install.packages("mice")
> library(mice)

Пакет mice имеет функцию, известную как md.pattern (). Он возвращает в табличной форме отсутствующее значение, присутствующее в каждой переменной в наборе данных.

> md.pattern(missing)

Давайте разберемся с этой таблицей. Есть 94 наблюдения без пропущенных значений. В Sepal.Length 18 наблюдений с пропущенными значениями. Точно так же есть 15 пропущенных значений с Sepal.Width и так далее.

Это выглядит некрасиво. Верно ? Мы также можем создать визуал, представляющий отсутствующие значения. Смотрится тоже довольно круто. Давай проверим.

> install.packages("VIM")
> library(VIM)
> mice_plot <- aggr(missing, col=c('red','yellow'),
numbers=TRUE, sortVars=TRUE,
labels=names(missing), cex.axis=.7,
gap=3, ylab=c("Missing values","Pattern"))

Давайте быстро это поймем. В наборе данных 63% значений без пропущенных значений. Отсутствуют 12% значений в Sepal.Length, 10% отсутствующих значений в Sepal.Width и так далее. Вы также можете посмотреть на гистограмму, которая четко показывает влияние пропущенных значений в переменных.

Теперь давайте подставим пропущенные значения.

> imputed_Data <- mice(missing, m=5, maxit = 50, method = 'pmm', seed = 500)
> summary(imputed_Data)

Выход :

Вот объяснение используемых параметров:

  1. m - относится к 5 наборам условно исчисленных данных
  2. maxit - относится к ном. итераций, предпринятых для вменения пропущенных значений
  3. method - относится к методу, используемому при вменении. мы использовали прогнозирующее среднее соответствие.

#check imputed values
> imputed_Data$imp$Sepal.Width

Поскольку существует 5 вмененных наборов данных, вы можете выбрать любой с помощью функции complete ().

#get complete data (3rd out of 5)
> completeData <- complete(imputed_Data,3)

Кроме того, если вы хотите построить модели для всех 5 наборов данных, вы можете сделать это за один раз, используя команду with ().

#build predictive model
> fit <- with(data = data, exp = lm(Sepal.Width ~ Sepal.Length + Petal.Width))

#combine results of all 5 models
> combine <- c(fit)
> summary(combine)

Hmisc

Hmisc - это многоцелевой пакет, полезный для анализа данных, высокоуровневой графики, подстановки пропущенных значений, расширенного построения таблиц, подбора и диагностики моделей (линейная регрессия, логистическая регрессия и регрессия Кокса) и т. Д. Среди множества функций, содержащихся в этом пакет, он предлагает 2 мощные функции для подстановки пропущенных значений. Это impute () и aregImpute (). Хотя он также имеет функцию transcan (), но лучше использовать aregImpute ().

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

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

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

Вот некоторые важные особенности этого пакета:

  1. Он предполагает линейность прогнозируемых переменных.
  2. Метод оптимальной оценки Фишера используется для прогнозирования категориальных переменных.

Давайте разберемся на практике.

#install package and load library
> install.packages("Hmisc")
> library(Hmisc)

#load data
> data <- iris

#seed missing values ( 10% )
> missing <- prodNA(data, noNA = 0.1)
> summary(missing)

# impute with mean value
> missing$imputed_age <- with(missing, impute(Sepal.Length, mean))

# impute with random value
> missing$imputed_age2 <- with(missing, impute(Sepal.Length, 'random'))

#similarly you can use min, max, median to impute missing value

#using argImpute
> impute_arg <- aregImpute(~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width +
Species, data = missing, n.impute = 5)

argImpute () автоматически определяет тип переменной и обрабатывает их соответствующим образом.

> impute_arg

Выходные данные показывают значения R² для прогнозируемых пропущенных значений. Чем выше значение, тем лучше прогнозируемые значения. Вы также можете проверить вмененные значения, используя следующую команду

#check imputed variable Sepal.Length
> impute_arg$imputed$Sepal.Length

Амелия

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

Он делает следующие предположения:

  1. Все переменные в наборе данных имеют многомерное нормальное распределение (MVN). Он использует среднее значение и ковариацию для обобщения данных.
  2. Отсутствующие данные носят случайный характер (отсутствуют случайно)

Так работает. Во-первых, он берет «m» образцов начальной загрузки и применяет алгоритм EMB к каждому образцу. Оценки m среднего и дисперсии будут разными. Наконец, первый набор оценок используется для вменения первого набора пропущенных значений с помощью регрессии, затем второй набор оценок используется для второго набора и так далее.

По сравнению с MICE, MVN отстает по некоторым важным аспектам, таким как:

  1. MICE вменяет данные по каждой переменной, тогда как MVN использует подход совместного моделирования, основанный на многомерном нормальном распределении.
  2. MICE может обрабатывать различные типы переменных, тогда как переменные в MVN должны быть нормально распределены или преобразованы для приблизительной нормальности.
  3. Кроме того, MICE может управлять вменением переменных, определенных для подмножества данных, тогда как MVN не может.

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

Давайте разберемся практически сейчас.

#install package and load library
> install.packages("Amelia")
> library(Amelia)

#load data
> data("iris")

Единственное, о чем нужно быть осторожным, - это классифицировать переменные. Имеет 3 параметра:

  1. idvars - сохраните все переменные идентификатора и другие переменные, которые вы не хотите приписывать
  2. noms - сохраните здесь номинальные переменные

#seed 10% missing values
> missing<- prodNA(data, noNA = 0.1)
> summary(missing)

#specify columns and run amelia
> fit <- amelia(missing, m=5, parallel = "multicore", noms = "Species")

#access imputed outputs
> fit$imputations[[1]]
> fit$imputations[[2]]
> fit$imputations[[3]]

Чтобы проверить конкретный столбец в наборе данных, используйте следующие команды

> fit$imputations[[5]]$Petal.Length

#export the outputs to csv files
> write.amelia(fit, file.stem = "imputed_data_set")

missForest

Как следует из названия, missForest - это реализация алгоритма r andom forest. Это непараметрический метод вменения, применимый к различным типам переменных. Итак, что такое непараметрический метод?

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

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

Он дает оценку ошибки вменения вне пределов упаковки. Более того, он обеспечивает высокий уровень контроля над процессом вменения. У него есть опции для возврата OOB отдельно (для каждой переменной) вместо агрегирования по всей матрице данных. Это помогает более внимательно изучить, насколько точно модель имеет вмененные значения для каждой переменной.

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

#missForest
> install.packages("missForest")
> library(missForest)

#load data
> data("iris")

#seed 10% missing values
> missing <- prodNA(data, noNA = 0.1)
> summary(missing)

#impute missing values, using all parameters as default values
> data.imp <- missForest(missing)

#check imputed values
> data.imp$ximp

#check imputation error
> data.imp$OOBerror

NRMSE PFC
0.13765654 0.03649635

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

#comparing actual data accuracy
> data.err <- mixError(data.imp$ximp, missing, data)
> data.err

NRMSE PFC
0.1510024 0.0000000

Это предполагает, что категориальные переменные рассчитываются с ошибкой 6%, а непрерывные переменные - с ошибкой 15%. Это можно улучшить, настроив значения параметров mtry и ntree. «Mtry» относится к количеству переменных, произвольно выбираемых при каждом разбиении. «Ntree» означает количество деревьев, которые будут расти в лесу.

mi

Пакет mi (Множественное вменение с диагностикой) предоставляет несколько функций для работы с пропущенными значениями. Как и другие пакеты, он также строит несколько моделей вменения для аппроксимации пропущенных значений. И использует метод прогнозирующего среднего соответствия.

Хотя я уже объяснил прогнозирующее среднее соответствие (pmm) выше, но если вы еще не поняли, вот более простая версия: для каждого наблюдения в переменной с отсутствующим значением мы находим наблюдение (из доступных значений) с ближайшим прогнозирующее значение для этой переменной. Наблюдаемое значение из этого «совпадения» затем используется как вмененное значение.

Ниже приведены некоторые уникальные характеристики этого пакета:

  1. Это позволяет графически диагностировать модели вменения и сходимость процесса вменения.
  2. Он использует байесовскую версию регрессионных моделей для решения проблемы разделения.
  3. Спецификация модели вменения аналогична выходным данным регрессии в R
  4. Он автоматически обнаруживает неточности в данных, например высокую коллинеарность переменных.
  5. Кроме того, он добавляет шум в процесс вменения, чтобы решить проблему аддитивных ограничений.

Давайте разберемся на практике.

#install package and load library
> install.packages("mi")
> library(mi)

#load data
> data("iris")

#seed missing values ( 10% )
> missing<- prodNA(data, noNA = 0.1)
> summary(missing)

#imputing missing value with mi
> mi_data <- mi(missing, seed = 335)

> summary(mi_data)

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

Полный код:

Заключение

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

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

Источник: различные

Больше интересует

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