Проверка отсутствующих значений в R

У меня есть набор данных временных рядов, в котором есть некоторые недостающие значения. Я хочу вменять недостающие значения, но я не уверен, какой метод является наиболее подходящим, например, линейный, сплайновый или stine из пакета imputeTS.

Для полноты картины я хочу проверить, соответствуют ли мои данные MCAR, MAR, NMAR. Я прекрасно понимаю, что это MCAR, но мне интересно провести тест.

str(wideRawDF)
'data.frame':   1343 obs. of  13 variables:
 $ Period.Start.Time: POSIXct, format: "2017-01-20 16:30:00" "2017-01-20 16:45:00" "2017-01-20 17:00:00" "2017-01-20 17:15:00" ...
 $ DO0182U09A3      : num  -102 -101 -101 -101 -101 ...
 $ DO0182U09B3      : num  -103.4 -102.8 -103.3 -95.9 -103 ...
 $ DO0182U09C3      : num  -103.9 -104.2 -103.9 -99.2 -104.1 ...
 $ DO0182U21A1      : num  -105 -105 -105 -104 -102 ...
 $ DO0182U21A2      : num  -105 -104 -105 -105 -105 ...
 $ DO0182U21A3      : num  -105 -105 -105 -105 -105 ...
 $ DO0182U21B1      : num  -102 -103 -104 -104 -104 ...
 $ DO0182U21B2      : num  -99.4 -102 -104 -101.4 -104.1 ...
 $ DO0182U21B3      : num  -104 -104 -104 -104 -104 ...
 $ DO0182U21C1      : num  -105 -105 -105 -104 -105 ...
 $ DO0182U21C2      : num  -104 -105 -105 -103 -105 ...
 $ DO0182U21C3      : num  -105 -105 -105 -105 -105 ...

md.pattern(wideRawDF)
     Period.Start.Time DO0182U21C1 DO0182U21C2 DO0182U21C3 DO0182U21B1 DO0182U21B2 DO0182U21B3 DO0182U09A3 DO0182U09B3 DO0182U09C3 DO0182U21A1 DO0182U21A2
1327                 1           1           1           1           1           1           1           1           1           1           1           1
   3                 1           1           1           1           1           1           1           0           1           1           1           1
   1                 1           1           1           1           1           1           1           1           0           1           1           1
   2                 1           1           1           1           1           1           1           1           1           0           1           1
   1                 1           1           1           1           1           1           1           0           1           1           0           0
   1                 1           1           1           1           1           1           1           0           0           1           0           0
   3                 1           1           1           1           1           1           1           1           0           0           0           0
   2                 1           1           1           1           1           1           1           0           0           0           0           0
   3                 1           1           1           1           0           0           0           1           0           0           0           0
                     0           0           0           0           3           3           3           7          10          10          10          10
     DO0182U21A3   
1327           1  0
   3           1  1
   1           1  1
   2           1  1
   1           0  4
   1           0  5
   3           0  5
   2           0  6
   3           0  8
              10 66

Как видите, некоторые столбцы в моем DF не имеют значений NA. Я хочу передать функции TestMCARNormality в пакете MissMech только столбцы с NA.

Я пробовал следующее, но все равно получаю ту же ошибку:

> TestMCARNormality(wideRawDF[,3:4])
Warning: 8 Cases with all variables missing have been removed 

          from the data.
Warning: More than one missing data pattern should be present. 

Используя имена столбцов, я получаю индекс столбцов, на которые я ссылаюсь на приведенный выше вывод md.pattern, чтобы быть уверенным, что я использую столбцы со значениями NA.

> colnames(wideRawDF)
 [1] "Period.Start.Time" "DO0182U09A3"       "DO0182U09B3"       "DO0182U09C3"       "DO0182U21A1"       "DO0182U21A2"       "DO0182U21A3"       "DO0182U21B1"      
 [9] "DO0182U21B2"       "DO0182U21B3"       "DO0182U21C1"       "DO0182U21C2"       "DO0182U21C3"

Каков эффективный способ проверки отсутствующих значений и передачи в функцию TestMCARNormality только столбцов с NA?


person TheGoat    schedule 07.02.2017    source источник
comment
Попробуйте передать wideRawDF[sapply(wideRawDF, function(x) any(is.na(x)))] TestMCARNormality(). Следует просто включать столбцы, в которых отсутствуют значения vlaues.   -  person Simon Jackson    schedule 07.02.2017
comment
Привет, Саймон, спасибо за отзыв, пожалуйста, добавьте его в ответ, и я могу отметить его как исправленный. Спасибо   -  person TheGoat    schedule 07.02.2017
comment
Сделанный. Спасибо и рад, что это сработало!   -  person Simon Jackson    schedule 08.02.2017


Ответы (2)


Согласно комментарию, вы можете использовать следующее:

has_na <- sapply(wideRawDF, function(x) any(is.na(x)))
TestMCARNormality(wideRawDF[has_na])

has_na - это логический вектор, соответствующий каждому столбцу wideRawDF. Это будет ИСТИНА для любого столбца, в котором есть хотя бы одно пропущенное значение.

Следовательно, wideRawDF[has_na] - это ваш фрейм данных wideRawDF, но только столбцы, в которых отсутствует значение.

person Simon Jackson    schedule 08.02.2017
comment
Я попробовал приведенный выше код и получил ошибку, когда передал свой has_na в TestMCARNormality. Покопавшись, я обнаружил, что TestMCARNormality требует наличия матрицы или фрейма данных, состоящего как минимум из двух столбцов, поэтому передача логического вектора не сработает. Я попытался передать подмножество wideRawDF (wideRawDF [, 2: 7]), и он ответил Warning: 2 Cases with all variables missing have been removed from the data. Warning: More than one missing data pattern should be present.. Если у вас есть какие-то идеи, я хотел бы их услышать, спасибо. - person TheGoat; 09.02.2017
comment
@ Саймон Джексон, не беспокойтесь об этом, после еще одного рытья я наткнулся на SO сообщение о том, как найти столбцы с NA. Еще раз спасибо за вашу помощь. - person TheGoat; 09.02.2017

Оказывается, проблема связана с настройкой по умолчанию в TestMCARNormality относительно количества случаев, в которых должен быть отсутствующий шаблон, чтобы включить его в анализ. Рассматриваемая опция - «del.lesscases», которая по умолчанию установлена ​​на 6. Это означает, что она удалит любой отсутствующий образец данных, чем имеет 6 или меньше случаев. За исключением первого отсутствующего шаблона в ваших данных, который содержит полные данные, каждый шаблон имеет не более 3 случаев, все из которых по умолчанию отбрасываются. Таким образом, TestMCARNormality выдает ошибку, что вам нужно более 1 отсутствующего шаблона данных, что является правильным. Если вы установите del.lesscases = 2, тогда он сохранит все отсутствующие шаблоны как минимум с 3 случаями, а если установить del.lesscases = 1, он сохранит все шаблоны как минимум с двумя случаями.

person BBJonz    schedule 07.05.2020