Чи має ознака балів чи навантажень в PCA чи FA значення? Чи можу я перевернути знак?


37

Я провів аналіз основних компонентів (PCA) з R, використовуючи дві різні функції ( prcompі princomp), і зауважив, що бали PCA відрізняються за ознакою. Як це може бути?

Врахуйте це:

set.seed(999)
prcomp(data.frame(1:10,rnorm(10)))$x

            PC1        PC2
 [1,] -4.508620 -0.2567655
 [2,] -3.373772 -1.1369417
 [3,] -2.679669  1.0903445
 [4,] -1.615837  0.7108631
 [5,] -0.548879  0.3093389
 [6,]  0.481756  0.1639112
 [7,]  1.656178 -0.9952875
 [8,]  2.560345 -0.2490548
 [9,]  3.508442  0.1874520
[10,]  4.520055  0.1761397

set.seed(999)
princomp(data.frame(1:10,rnorm(10)))$scores
         Comp.1     Comp.2
 [1,]  4.508620  0.2567655
 [2,]  3.373772  1.1369417
 [3,]  2.679669 -1.0903445
 [4,]  1.615837 -0.7108631
 [5,]  0.548879 -0.3093389
 [6,] -0.481756 -0.1639112
 [7,] -1.656178  0.9952875
 [8,] -2.560345  0.2490548
 [9,] -3.508442 -0.1874520
[10,] -4.520055 -0.1761397

Чому ознаки ( +/-) відрізняються для двох аналізів? Якби я тоді використовував основні компоненти PC1і PC2як предиктори в регресії, тобто lm(y ~ PC1 + PC2)це повністю змінило моє розуміння ефекту двох змінних yзалежно від того, який метод я використовував! Як я можу тоді сказати, що PC1має, наприклад, позитивний вплив yі PC2, наприклад, негативний вплив на y?


Крім того: Якщо знак компонентів PCA НЕ має сенсу, це вірно для факторного аналізу (ФА), а? Чи прийнятно перевертати (обернути) знак окремих балів компонентів PCA / FA (або завантажень, як стовпець матриці завантаження)?


10
+1. Це питання задають багато на цьому форумі, в різних варіаціях (іноді про PCA, іноді про факторний аналіз). Ця тема є найпопулярнішою темою, яка висвітлює цю проблему (завдяки чудовій відповіді @ Січня), тому було б зручно позначити інші існуючі та майбутні питання як дублікати цього. Я взяв на себе сміливість зробити ваше запитання трохи більш загальним, змінивши назву та згадавши на завершення факторний аналіз. Сподіваюся, ви не будете проти. Я також надав додаткову відповідь.
амеба каже, що повернеться до Моніки

1
Знак довільний; предметне значення логічно залежить від ознаки. Ви завжди можете змінити знак будь-якого фактора, позначеного "X", на протилежний знак, а потім позначити його "протилежним X". Це вірно для навантажень, для балів. Деякі реалізації - для зручності - змінять знак коефіцієнта так, щоб позитивні значення (у балах чи навантаженнях) у ньому домінували, у сумі. Інші реалізації нічого не роблять і залишають рішення про те, чи потрібно відміняти знак на вас - якщо вам все одно. Статистичне значення (наприклад, сила ефекту) не змінюється, окрім того, що його "напрямок" стає зворотним.
ttnphns

Відповіді:


38

PCA - це просте математичне перетворення. Якщо ви змінюєте знаки компонента (компонентів), ви не змінюєте дисперсію, яка міститься в першому компоненті. Крім того, коли ви змінюєте знаки, ваги ( prcomp( ... )$rotation) також змінюють знак, тому інтерпретація залишається точно такою ж:

set.seed( 999 )
a <- data.frame(1:10,rnorm(10))
pca1 <- prcomp( a )
pca2 <- princomp( a )
pca1$rotation

показує

                 PC1       PC2
X1.10      0.9900908 0.1404287
rnorm.10. -0.1404287 0.9900908

і pca2$loadingsпоказувати

Loadings:
          Comp.1 Comp.2
X1.10     -0.99  -0.14 
rnorm.10.  0.14  -0.99 

               Comp.1 Comp.2
SS loadings       1.0    1.0
Proportion Var    0.5    0.5
Cumulative Var    0.5    1.0

Отже, чому інтерпретація залишається однаковою?

Ви робите регресію PCA для yкомпонента 1. У першій версії ( prcomp) скажіть, що коефіцієнт позитивний: чим більший компонент 1, тим більший y. Що це означає, коли мова йде про вихідні змінні? Оскільки вага змінної 1 ( 1:10в а) додатна, то видно, що чим більша змінна 1, тим більша y.

Тепер використовуйте другу версію ( princomp). Оскільки компонент змінив знак, чим більший y, тим менший компонент 1 - коефіцієнт y <над PC1 тепер від'ємний. Але так само відбувається завантаження змінної 1; це означає, що чим більша змінна 1, тим менша складова 1, тим більша y - інтерпретація однакова.

Можливо, найпростіший спосіб це побачити - використовувати біплот.

library( pca3d )
pca2d( pca1, biplot= TRUE, shape= 19, col= "black"  )

показує

введіть тут опис зображення

Той же біплот для другого варіанту показує

pca2d( pca2$scores, biplot= pca2$loadings[,], shape= 19, col= "black" )

Як бачите, зображення обертаються на 180 °. Однак співвідношення між вагами / навантаженнями (червоні стрілки) та точками даних (чорні точки) точно однакове; таким чином, інтерпретація компонентів не змінюється.

введіть тут опис зображення


Я навіть додав фотографії зараз :-)
січня

1
Це правда, але як бути з прогнозами в PCA? Я сам кодую PCA, і деякі мої власні вектори перевернуті порівняно з вбудованим MATLAB princomp. Тож під час проекції мої прогнозовані дані також перетворюються на знак у деяких вимірах. Моя мета - зробити класифікацію за коефіцієнтами. Знак все ще не має значення?
Сіббс азартні ігри

Отже, якщо просто з метою легшого розуміння моїх ПК я хотів би поміняти знаки балів, чи правда це?

13

На цьому форумі задають багато запитань на цьому форумі, тому я хотів би доповнити відмінну відповідь @ January трохи більш загальними міркуваннями.

х1,х2,...хгz1,z2,...zкх1z1z2х12z1+3z223

ОriгiналvаriаблесScоrесLоагiнгс.

z1

-1-1=1.

Висновок полягає в тому, що для кожного компонента PCA або FA, знак його балів і його навантажень є довільним і безглуздим. Він може бути перевернутий, але лише в тому випадку, якщо знак обох балів і навантажень одночасно перевернутий.


Це правда, але як бути з прогнозами в PCA? Я сам кодую PCA, і деякі мої власні вектори перевернуті порівняно з вбудованим MATLAB princomp. Тому під час проекції мої прогнозовані дані також перетворюються на знак у деяких вимірах. Моя мета - зробити класифікацію за коефіцієнтами. Знак все ще не має значення?
Сіббс азартні ігри

1
Ще не має значення. Навіщо це? Перевернуті дані точно еквівалентні неперевернутим даним для всіх цілей, включаючи класифікацію.
Амеба каже: Відновити Моніку

Ну, не для всіх цілей. Для узгодженості між алгоритмом я теж дуже хотів би відповідати знакам. Однак, не все перевернуто, дивлячись на компоненти. Як R обирає знак, щоб я міг зробити те саме?
Myoch

1
@Myoch Я рекомендував би винайти власну конвенцію і застосовувати її всюди, на відміну від спроб з'ясувати, що робить R. Ви можете вибрати знак таким чином, що перше значення є позитивним, або , що більш ніж половина з значень позитивні, і т.д.
амеба говорить відновило Моніка

1
@user_anon Не існує зворотного.
Амеба каже: Відновити Моніку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.