Тестирование на пропущенные значения в R
У меня есть набор данных временного ряда, в котором есть некоторые пропущенные значения. Я хочу вменять пропущенные значения, но я не уверен, какой метод является наиболее подходящим, например, линейный, сплайн или линейный от 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. Я хочу передать только столбцы, которые имеют NA TestMCARNormality
функция в пакете MissMech.
Я пробовал следующее, но я продолжаю получать ту же ошибку:
> 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"
Каков разумный способ проверить пропущенные значения и передать только столбцы с NA? TestMCARNormality
функционировать?
1 ответ
Согласно комментарию, вы можете использовать следующее:
has_na <- sapply(wideRawDF, function(x) any(is.na(x)))
TestMCARNormality(wideRawDF[has_na])
has_na
является логическим вектором, соответствующим каждому столбцу wideRawDF
, Это будет ИСТИНА для любого столбца, в котором есть хотя бы одно пропущенное значение.
Следовательно, wideRawDF[has_na]
это ваш фрейм данных wideRawDF
, но только столбцы, которые имеют пропущенное значение.
Оказывается, проблема заключается в настройке по умолчанию в TestMCARNormality относительно количества случаев, в которых должен быть отсутствующий шаблон, чтобы включить его в анализ. Рассматриваемая опция - "del.lesscases", которая по умолчанию установлена на 6. Это означает, что она удалит любой отсутствующий шаблон данных, чем имеет 6 или меньше случаев. За исключением первого отсутствующего шаблона в ваших данных, который содержит полные данные, каждый шаблон имеет не более 3 случаев, все из которых по умолчанию отбрасываются. Таким образом, TestMCARNormality выдает ошибку, что вам нужно более 1 шаблона отсутствующих данных, что является правильным. Если вы установите del.lesscases = 2, тогда он сохранит все отсутствующие шаблоны как минимум с 3 случаями, а если установить del.lesscases = 1, он сохранит все шаблоны как минимум с двумя случаями.