Имеет ли значение знак оценок или нагрузок в 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 не имеет смысла, верно ли это и для факторного анализа (FA)? Допустимо ли переворачивать (переворачивать) знак отдельных баллов компонентов PCA / FA (или нагрузок, как столбец матрицы нагрузки)?


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

1
Знак произвольный; Материальное значение логически зависит от знака. Вы всегда можете поменять знак любого фактора, помеченного «X», на противоположный знак, а затем пометить его как «противоположный X». Это верно для нагрузок, для баллов. Некоторые реализации для удобства меняют знак фактора так, что положительные значения (в баллах или нагрузках) в нем будут доминировать, в сумме. Другие реализации ничего не делают и оставляют решение о том, стоит ли менять знак на вас - если вам все равно. Статистическое значение (например, сила эффекта) не меняется, за исключением того, что его «направление» меняется на противоположное.
ttnphns

Ответы:


38

PCA - это простое математическое преобразование. Если вы измените знаки компонента (ов), вы не измените дисперсию, которая содержится в первом компоненте. Более того, когда вы меняете знаки, weights ( 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в a) положительный, это показывает, что чем больше переменная 1, тем больше y.

Теперь используйте вторую версию ( princomp). Поскольку у компонента изменился знак, чем больше y, тем меньше компонента 1 - коэффициент y <для PC1 теперь отрицателен. Но так же и загрузка переменной 1; это означает, что чем больше переменная 1, тем меньше компонент 1, тем больше у - интерпретация одинакова.

Возможно, самый простой способ увидеть это - использовать биплот.

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. Поэтому во время проецирования мои проецируемые данные также отображаются в некоторых измерениях. Моя цель - сделать классификацию по коэффициентам. Знак все еще не имеет значения здесь?
Sibbs Gambling

Итак, если бы просто из-за более легкого понимания моих компьютеров, я хотел бы поменять местами оценки, это действительно ли так?

13

Этот вопрос спрашивает много на этом форуме, так что я хотел бы дополнить @ отличный ответ в январе с немного более общими соображениями.

Как в анализе главных компонентов (PCA), так и в факторном анализе (FA) мы используем исходные переменные для оценки нескольких скрытых компонентов (или скрытых переменных) . Эти скрытые компоненты приведены в баллах PCA или FA. Каждая исходная переменная представляет собой линейную комбинацию этих компонентов с некоторыми весами: например, первая исходная переменная может быть хорошо аппроксимирована дважды плюс три раза , так что . Если оценки стандартизированы, то эти веса ( и ) известны как нагрузки. Итак, неофициально можно сказать, чтоИкс1,Икс2,,,,ИксdZ1,Z2,,,,ZКИкс1Z1Z2Икс12Z1+3Z223

ОрягяNaLvaряaбLеsSсореsLоadяNгs,

Отсюда мы можем видеть, что если мы возьмем один скрытый компонент, например , и перевернем знак его оценок и нагрузок, то это не окажет влияния на результат (или интерпретацию), потому что - 1 - 1 = 1.Z1

-1-1знак равно1.

Вывод состоит в том, что для каждого компонента PCA или FA знак его оценок и нагрузок является произвольным и бессмысленным. Он может быть перевернут, но только если знак обоих баллов и нагрузок поменялся местами одновременно.


Это правда, но как насчет прогнозов в PCA? Я сам кодирую PCA, и некоторые из моих собственных векторов перевернуты по сравнению со встроенным MATLAB princomp. Поэтому во время проецирования мои проецируемые данные также отображаются в некоторых измерениях. Моя цель - сделать классификацию по коэффициентам. Знак все еще не имеет значения здесь?
Sibbs Gambling

1
Все еще не имеет значения. С чего бы это? Перевернутые данные в точности эквивалентны не перевернутым данным для всех целей, включая классификацию.
говорит амеба: восстанови Монику

Ну, не для всех целей. Для согласованности алгоритма мне тоже очень хотелось бы сопоставить знаки. Тем не менее, это не все перевернуто, глядя на компоненты. Как R выбирает знак, чтобы я мог сделать то же самое?
Миох

1
@Myoch Я бы порекомендовал придумать ваше собственное соглашение и применять его везде, а не пытаться выяснить, что делает R. Вы можете выбрать знак так, чтобы первое значение было положительным, или чтобы более половины значений были положительными и т. Д.,
говорит амеба. Восстановите Монику

1
@user_anon Обратного нет.
говорит амеба, восстанови монику

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.