Функция R prcomp не работает со значениями NA, даже если NA разрешены

Я использую функцию prcomp для вычисления первых двух основных компонентов. Однако мои данные имеют некоторые значения NA, и поэтому функция выдает ошибку. Определенный na.action кажется не работает, хотя он упоминается в файле справки ?prcomp

Вот мой пример:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10))

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

d$V1[5] <- NA
d$V2[7] <- NA

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

Я использую последнюю версию R 2.15.1 для Mac OS X.

Кто-нибудь может понять причину отказа prcomp?

Вот мой новый пример:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10))

result <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

result$x

d$V1[5] <- NA

result <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)

result$x

можно ли сохранить строку 5 на ПК1 и ПК2? В моем реальном наборе данных у меня, конечно, более двух столбцов переменных, и только некоторые из них отсутствуют, и я не хочу терять оставшуюся информацию, скрытую в других значениях!


r na pca
person user969113    schedule 22.08.2012    source источник


Ответы (2)


Другое решение, если вы не хотите использовать интерфейс формулы:

prcomp(na.omit(d), center = TRUE, scale = TRUE)

которые состоят в применении na.omit непосредственно к фрейму данных.

person Jilber Urbina    schedule 22.08.2012
comment
Спасибо за ваше решение. Я только что понял, что использование na.omit приводит к меньшему количеству основных компонентов. Я только что отредактировал свой пример выше. - person user969113; 22.08.2012

Да, похоже, что это "особенность" (ошибка), которая na.action полностью игнорируется, если вы не используете formula интерфейс. Это было ранее в R Development список.

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

Чтобы быть ясным, это будет работать, потому что он обращается к интерфейсу формулы:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
person nograpes    schedule 22.08.2012
comment
Хорошо, фантастически. Спасибо за формульный подход! - person user969113; 22.08.2012
comment
Я согласен с тем, что это должно быть задокументировано (я являюсь автором запроса в списке разработчиков R); лучший способ продвинуть это вперед, если кто-то захочет, - это предложить изменение документации и отправить его в список r-devel (и / или средство отслеживания ошибок R). - person Ben Bolker; 22.08.2012