Імпутація пропущених значень для PCA


23

Я використовував цю prcomp()функцію для виконання PCA (аналіз основних компонентів) в Р. Однак у цій функції є помилка, така що na.actionпараметр не працює. Я попросив допомоги щодо stackoverflow ; двоє користувачів там запропонували два різні способи поводження з NAцінностями. Однак проблема обох рішень полягає в тому, що коли є NAзначення, цей рядок випадає і не враховується в аналізі PCA. Мій реальний набір даних - це матриця розміром 100 х 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()функція працює і не видаляє рядки, що містять NAs, але також не впливає на результат аналізу PCA.

Я думав про заміну NAзначень середнім значенням в одному стовпчику або зі значенням, близьким до 0. Однак я не впевнений, як це впливає на аналіз PCA.

Чи може хтось придумати хороший спосіб вирішення цієї проблеми?


8
Ваша проблема - це не проблема PCA, а ширша проблема тренування відсутніх значень . Якщо ви не знайомі з цим, будь ласка, прочитайте його трохи. У вас є багато можливостей: (1) видалити випадки впорядковано або (2) попарно або (3) замінити пропуски середнім або середнім. Або (4) замінити випадковим вибором дійсних значень (підхід гарячої колоди). Або призначати пропуски шляхом (5) взаємної регресії (з або без додавання шуму) або кращого (6) ЕМ підходу.
ttnphns

Як показують коментарі та відповіді, ключовим для отримання хорошої відповіді є пояснення того, що означаютьNA значення : що є причиною "відсутності"?
whuber

2
Я думаю, що пакет "pcaMethods" може вирішити вашу проблему ( тут )
ToNoY

Відповіді:


22

Насправді існує добре задокументований спосіб поводження з гапрі матрицями - ви можете розкласти коваріаційну матрицю сформовану з ваших даних X , яка масштабується за кількістю спільних значень n : C = 1СХн

С=1нХТХ,                Сjл=Х.jY.л¯

а потім розгорніть основні коефіцієнти за допомогою принаймні квадратів (як @ user969113 згадує). Ось приклад .

Хprcomp

Оновлення

Іншим варіантом проведення PCA на Gappy наборі даних є "Рекурсивно віднімані емпіричні ортогональні функції" (Taylor et al., 2013). Він також виправляє деякі проблеми в підході до найменших квадратів і обчислюється набагато швидше, ніж DINEOF. У цій публікації порівнюються всі три підходи щодо точності відновлення даних за допомогою ПК.

Список літератури

Беккерс, Жан-Марі та М. Ріксен. "Розрахунки EOF та заповнення даних з неповних наборів океанографічних даних." Журнал атмосферних та океанічних технологій 20.12 (2003): 1839-1856.

Тейлор, М., Лош, М., Венцель, М., Шретер, Дж. (2013). Про чутливість реконструкції поля та прогнозування з використанням емпіричних ортогональних функцій, отриманих із неодноразових даних. Журнал клімату, 26 (22), 9194-9205.


(+1) Це виглядає як цінний внесок для мене, тому що це нова ідея. Я давно задав подібне запитання, яке надзвичайно схоже: як ви оцінюєте коваріаційну матрицю, коли дані цензуруються (замість відсутніх)? Якщо у вас є якісь думки з приводу цієї ситуації, я би радий відповіді!
whuber

Дякую @whuber - я вважаю, що цей метод має також багато заслуг. Навіть якщо ви не зацікавлені в інтерпольованих значеннях, метод набагато кращий, як опис EOF / ПК для набору даних - наприклад, помилка між реконструйованими даними та оригіналом зводиться до мінімуму за допомогою алгоритму.
Марк у коробці

@whuber - Щодо цензурованих даних - Це не в моїй області експертизи, і що цікаво, я задав питання в цьому напрямку кілька тижнів тому (яке ви прокоментували!) . Моя думка полягає в тому, що слід заповнити нулі випадковими значеннями нижче межі виявлення, які наближають розподіл спостережуваних значень. Я перегляну частину цитованої літератури з вашого допису - це справді дуже цікава тема.
Марк у коробці

@whuber - Вас може зацікавити наступний документ, що описує подібну ітераційну процедуру підгонки матриці коваріації для розріджених даних: Біен, Якоб та Роберт Дж. Тібшірані. "Рідка оцінка коваріаційної матриці." Біометріка 98.4 (2011): 807-820.
Марк у коробці

Дякую @Marc. На жаль, цензура та простота - це дві різні речі з різними проблемами.
whuber

6

Моя пропозиція залежить від того, скільки даних бракує та чому вони відсутні. Але це не має нічого спільного з PCA, насправді. Якщо бракує дуже мало даних, то це буде неважливо, що ви робите. Заміна медіаною не є ідеальною, але якщо бракує не багато, вона не сильно відрізнятиметься від кращого рішення. Ви можете спробувати зробити PCA як середньою заміною, так і списком видаленням і побачити, чи є основні відмінності в результатах.

Далі, якщо більше даних не вистачає, слід розглянути, чи вона відсутня повністю випадково, відсутня навмання, чи не пропущена навмання. Я б запропонував багаторазову імпутацію в перших двох випадках і деякий час у третьому випадку - якщо дані не сильно спотворені своїм статусом NMAR, я думаю, що багаторазова імпутація буде кращою, ніж видалення за списком (Джо Шафер з штату Пенн зробив багато роботи над відсутніми даними - я пригадую певну роботу з його показу, що багаторазова імпутація спрацювала досить добре навіть у деяких випадках НМАР). Однак якщо дані MCAR або MAR, властивості множинної імпутації можна довести.

Якщо ви все-таки вирішите піти з ІМ, слід зазначити, що ознаки компонентів у PCA є довільними, і невелика зміна даних може перевернути знак. Тоді, коли ви зробите PCA, ви отримаєте нісенітницю. Дуже давно я розробляв рішення в SAS - це не важко, але варто бути обережним.


1

Правильного рішення проблеми немає. Кожна координата у векторі повинна бути вказана для отримання правильного набору основних компонентів. Якщо координата відсутня і замінена деяким імпутованим значенням, ви отримаєте результат, але це буде залежати від введеного значення. тому, якщо для вписаного значення є два розумні варіанти, різні варіанти дадуть різні відповіді.


3
Я просто поглянув на PCA та відсутні дані та встановив, що: 4.2. Як SIMCA справляється з відсутніми даними? Простіше кажучи, алгоритм NIPALS інтерполює пропущену точку, використовуючи принаймні квадратики, але відсутні дані не впливають на модель. Послідовні ітерації уточнюють пропущене значення шляхом простого множення балу та завантаження для цієї точки. Існує багато різних методів для відсутніх даних, таких як оцінка, але вони, як правило, сходяться до одного рішення. Відсутні дані є прийнятними, якщо вони розподілені випадковим чином. Систематичні блоки відсутніх даних є проблематичними.
user969113

1
Я не знаю, що ви маєте на увазі під впливом моделі. Будь-який вибір відсутнього значення для координати вплине на основні компоненти.
Майкл Р. Черник

1

Нещодавній документ, в якому розглядається підхід до поводження з відсутніми значеннями в аналізах PCA, є "Аналіз основних компонентів з відсутніми значеннями: порівняльне опитування методів" від Dray & Josse (2015) . Два найвідоміші методи методів PCA, які дозволяють пропустити значення, - це алгоритм NIPALS, реалізований у nipalsфункціїade4 пакету, та ітеративна PCA (Ipca або EM-PCA), реалізована у imputePCAфункції missMDAпакету. У роботі було зроблено висновок, що метод Ipca найкраще працює в широкому діапазоні умов.

Для вашого прикладу синтаксис:

Для NIPALS:

library(ade4)
nipals(d[,c(1,2)])

Для Ipca:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.