Я использовал эту prcomp()
функцию для выполнения PCA (анализа главных компонентов) в R. Однако в этой функции есть ошибка, из-за которой na.action
параметр не работает. Я попросил помощи по stackoverflow ; два пользователя предложили два разных способа работы со NA
значениями. Однако проблема обоих решений заключается в том, что при наличии NA
значения эта строка отбрасывается и не учитывается в анализе PCA. Мой реальный набор данных представляет собой матрицу 100 x 100, и я не хочу терять всю строку только потому, что она содержит одно NA
значение.
В следующем примере показано, что prcomp()
функция не возвращает никаких основных компонентов для строки 5, поскольку она содержит NA
значение.
d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10),
V3 = 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
Мне было интересно, могу ли я установить NA
значения на определенное числовое значение, когда center
и scale
установлены TRUE
так, чтобы prcomp()
функция работала и не удаляла строки, содержащие NA
s, но также не влияла на результат анализа PCA.
Я думал о замене NA
значений медианным значением в одном столбце или значением, очень близким к 0. Однако я не уверен, как это влияет на анализ PCA.
Кто-нибудь может придумать хороший способ решения этой проблемы?
источник
NA
значения : в чем причина «пропущенности»?Ответы:
На самом деле существует хорошо документированный способ работы с gappy-матрицами - вы можете разложить ковариационную матрицу созданную из ваших данных X , которая масштабируется по количеству общих значений n : C = 1С Икс N
а затем расширьте главные коэффициенты с помощью подгонки по методу наименьших квадратов (как упоминает @ user969113). Вот пример .
prcomp
Обновить
Другой вариант проведения PCA для набора данных с gappy - это «Рекурсивно вычтенные эмпирические ортогональные функции» (Taylor et al. 2013). Это также исправляет некоторые проблемы в методе наименьших квадратов и в вычислительном отношении намного быстрее, чем DINEOF. В этом посте сравниваются все три подхода с точки зрения точности восстановления данных с использованием ПК.
Ссылки
Беккерс, Жан-Мари и М. Риксен. «Расчеты EOF и заполнение данных из неполных наборов океанографических данных». Журнал атмосферных и океанических технологий 20.12 (2003): 1839-1856.
Тейлор М., Лош М., Венцель М. & Шрётер Дж. (2013). О чувствительности реконструкции и прогнозирования поля с использованием эмпирических ортогональных функций, полученных на основе данных gappy. Журнал Климата, 26 (22), 9194-9205.
источник
Мое предложение зависит от того, сколько данных не хватает и почему они отсутствуют. Но это никак не связано с PCA. Если пропущено очень мало данных, то не имеет большого значения, что вы делаете. Замена на медиану не идеальна, но если ее не так много, она не будет сильно отличаться от лучшего решения. Вы можете попробовать сделать PCA с медианной заменой и списочным удалением и посмотреть, есть ли существенные различия в результатах.
Далее, если пропущено больше данных, вы должны подумать о том, отсутствует ли оно полностью случайно, случайно или нет. Я бы предложил множественное вменение в первых двух случаях и некоторое время в третьем случае - если данные сильно не искажены состоянием NMAR, я думаю, что множественное вменение будет лучше, чем удаление по списку (Джо Шафер из Penn State сделал много работы над отсутствующими данными - я вспоминаю некоторые его работы, показывающие, что множественное вменение работало довольно хорошо даже в некоторых случаях NMAR). Однако, если данные MCAR или MAR, свойства множественного вменения могут быть доказаны.
Если вы решите пойти с MI, следует обратить особое внимание на то, что знаки компонентов в PCA являются произвольными, и небольшое изменение в данных может поменять знак. Тогда, когда вы делаете PCA, вы получите ерунду. Давным-давно я разработал решение в SAS - это не сложно, но с этим нужно быть осторожным.
источник
Нет правильного решения проблемы. Каждая координата в векторе должна быть указана, чтобы получить правильный набор главных компонентов. Если координата отсутствует и заменена каким-либо вмененным значением, вы получите результат, но он будет зависеть от вмененного значения. поэтому, если есть два разумных варианта вмененного значения, разные варианты дадут разные ответы.
источник
Недавний документ, в котором рассматриваются подходы к работе с пропущенными значениями в анализах PCA, называется «Анализ основных компонентов с пропущенными значениями: сравнительный обзор методов» Dray & Josse (2015) . Двумя наиболее известными методами методов PCA, которые допускают пропущенные значения, являются алгоритм NIPALS, реализованный в
nipals
функцииade4
пакета, и итеративный PCA (Ipca или EM-PCA), реализованный вimputePCA
функцииmissMDA
пакета. В работе сделан вывод, что метод Ипка лучше всего работает в самых разных условиях.Для вашего примера синтаксис:
Для НИПАЛОВ:
Для Ipca:
источник