PCA 또는 FA에서 점수 또는 하중 표시는 의미가 있습니까? 부호를 뒤집을 수 있습니까?


36

두 가지 다른 함수 ( prcompprincomp)를 사용하여 R을 사용하여 주성분 분석 (PCA)을 수행 했으며 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

+/-두 분석 에서 부호 ( )가 다른 이유는 무엇 입니까? 나는 그 주요 구성 요소를 사용하는 경우 PC1PC2회귀의 예측 인자로서, 즉 lm(y ~ PC1 + PC2), 이것은 완전히 내 두 변수의 영향에 대한 이해를 바꿀 것 y내가 사용하는 방법에 따라! 어떻게 그 말을 수 PC1에 예를 들어 긍정적 인 효과를 가지고 yPC2에 부정적인 효과를 예있다 y?


또한 : PCA 구성 요소의 부호가 의미가없는 경우 요인 분석 (FA)에도 적용됩니까? 개별 PCA / FA 구성 요소 점수 (또는 로딩 매트릭스 열로서 로딩)의 부호를 뒤집는 것이 허용됩니까?


10
+1. 이 질문은 이 포럼에서 다른 변형 (때로는 PCA, 때로는 요인 분석에 관한)에서 많이 요구 됩니다. 이 문제는 @January의 탁월한 답변 덕분에 문제를 다루는 가장 인기있는 스레드이므로 기존 및 미래의 다른 질문을이 질문의 복제본으로 표시하는 것이 편리합니다. 제목을 변경하고 마지막에 요인 분석을 언급함으로써 귀하의 질문을 좀 더 일반적으로 만들기 위해 자유를 얻었습니다. 나는 당신이 상관하지 않기를 바랍니다. 또한 추가 답변을 제공했습니다.
amoeba는

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

그렇다면 왜 해석이 동일하게 유지됩니까?

y성분 1에 대한 PCA 회귀 분석을 수행합니다 . 첫 번째 버전 ( prcomp)에서 계수가 양수라고 가정합니다. 성분 1이 클수록 y가 커집니다. 원래 변수와 관련하여 무엇을 의미합니까? 변수 1 ( 1:10a에서) 의 가중치 가 양수이므로 변수 1이 클수록 y가 커짐을 나타냅니다.

이제 두 번째 버전 ( princomp)을 사용하십시오 . 성분의 부호가 바뀌 었으므로 y가 클수록 성분 1이 작아집니다. PC1에 대한 y <계수는 이제 음수입니다. 그러나 변수 1의 로딩도 마찬가지입니다. 즉, 변수 1이 클수록 성분 1이 작을수록 y가 커집니다. 해석이 동일합니다.

아마도 가장 쉬운 방법은 biplot을 사용하는 것입니다.

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

여기에 이미지 설명을 입력하십시오

두 번째 변형에 대한 동일한 biplot은

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

보시다시피 이미지는 180 ° 회전합니다. 그러나 무게 / 하중 (빨간색 화살표)과 데이터 점 (검은 점)의 관계는 정확히 같습니다. 따라서 구성 요소의 해석은 변경되지 않습니다.

여기에 이미지 설명을 입력하십시오


나는 심지어 그림을 추가했다 :-)
January

1
이것은 사실이지만 PCA의 예상은 어떻습니까? PCA를 직접 코딩하고 있으며 내 고유 벡터 중 일부가 MATLAB 내장과 비교하여 뒤집혀 princomp있습니다. 투영하는 동안 투영 된 데이터도 일부 치수에서 뒤집어집니다. 내 목표는 계수를 분류하는 것입니다. 이 표시는 여전히 중요하지 않습니까?
Sibbs Gambling

따라서 단순히 PC를 더 쉽게 이해하기 위해 점수 표시를 바꾸고 싶습니까?

13

이 질문은 이 포럼에서 많이 질문 되므로 @January의 훌륭한 답변을 좀 더 일반적인 고려 사항으로 보완하고 싶습니다.

주성분 분석 (PCA) 및 요인 분석 (FA)에서 원래 변수 를 사용하여 여러 잠재 성분 (또는 잠재 변수) 합니다. 이러한 잠재 구성 요소는 PCA 또는 FA 구성 요소 점수로 제공됩니다. 각각의 원래 변수는 어떤 무게와 이러한 구성 요소의 선형 조합 : 예를 들어 첫 번째 원래 변수 아니라 두 번에 의해 근사 될 수 플러스 세 번 , 그래서 . 점수가 표준화 된 경우 이러한 가중치 ( 및 )를로드라고합니다. 비공식적으로는x1,x2,...xdz1,z2,...zkx1z1z2x12z1+3z223

OriginalvariablesScoresLoadings.

여기에서 과 같은 잠재 구성 요소를 하나 가져 와서 그 점수 하중 의 부호를 뒤집 으면 결과 (또는 해석)에 영향을 미치지 않습니다.1 1 = 1z1

11=1.

결론은 각 PCA 또는 FA 구성 요소에 대해 점수와 하중의 부호는 임의적이고 의미가 없다는 것입니다. 점수와 하중의 부호가 동시에 반전되는 경우에만 뒤집을 수 있습니다.


이것은 사실이지만 PCA의 예상은 어떻습니까? PCA를 직접 코딩하고 있으며 내 고유 벡터 중 일부가 MATLAB 내장과 비교하여 뒤집혀 princomp있습니다. 투영하는 동안 투영 된 데이터도 일부 치수에서 뒤집어집니다. 내 목표는 계수를 분류하는 것입니다. 이 표시는 여전히 중요하지 않습니까?
Sibbs Gambling

1
여전히 중요하지 않습니다. 왜 그런가요? 뒤집힌 데이터는 분류를 포함하여 모든 용도에서 비 플립 데이터와 정확히 동일합니다.
amoeba 말한다 Reinstate Monica

모든 목적을위한 것은 아닙니다. 알고리즘 간 일관성을 위해 실제로 기호를 일치시키고 싶습니다. 그러나 구성 요소를 볼 때 모두 뒤집어지지는 않습니다. R은 어떻게 기호를 선택하여 동일한 작업을 수행 할 수 있습니까?
Myoch

1
@ Myoch 나는 R 이하는 일을 알아 내려고하는 대신 자신의 컨벤션을 발명하고 모든 곳에서 적용하는 것이 좋습니다. 첫 번째 값이 양수이거나 값의 절반 이상이 양수 등의 부호를 선택할 수 있습니다.
amoeba는 Reinstate Monica

1
@user_anon 역수가 없습니다.
amoeba는

7

이것은 위에서 잘 대답했습니다. 추가적인 수학적 관련성을 제공하기 위해 주성분이 작용하는 방향은 시스템의 고유 벡터에 해당합니다. 당신이 긍정적 또는 부정적인 PC를 얻는다면 그것은 단지 한 방향을 가리 키거나 다른 방향으로 떨어진 고유 벡터에 투영하고 있음을 의미합니다 . 어쨌든 해석은 동일하게 유지됩니다! 주성분의 길이는 단순히 고유 값이라는 점도 덧붙여 야합니다.180

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.