어떤 변수가 어떤 PCA 구성 요소를 설명합니까?


15

이 데이터를 사용하여 :

head(USArrests)
nrow(USArrests)

다음과 같이 PCA를 수행 할 수 있습니다.

plot(USArrests)
otherPCA <- princomp(USArrests)

나는 새로운 구성 요소를 얻을 수 있습니다

otherPCA$scores

구성 요소가 설명하는 분산 비율

summary(otherPCA)

그러나 어떤 변수가 주로 어떤 주성분으로 설명되는지 알고 싶다면 어떻게해야합니까? 그리고 그 반대의 경우도 마찬가지입니다 : 예를 들어 PC1 또는 PC2는 주로 murder? 어떻게해야합니까?

예를 들어 PC1이 murder또는에 의해 설명 된 80 %라고 말할 수 있습니까 assault?

나는 하중이 여기에 도움이된다고 생각하지만, 내가 이해 한 것처럼 분산이 아닌 방향성을 보여줍니다.

otherPCA$loadings

Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4
Murder                         0.995
Assault  -0.995                     
UrbanPop        -0.977 -0.201       
Rape            -0.201  0.974   

2
하중의 징후는 임의적입니다. 세 가지 범죄 변수는 모두 서로 양의 상관 관계가 있지만 위의로드 표시에서이를 처리하는 것이 현명합니다.
Nick Cox

불행히도, 나는이 질문에 대한 대답이 틀렸다고 생각합니다. 아래에 내 답변을 게시했습니다.
amoeba는 Reinstate Monica가

답변:


11

당신이 옳습니다. 로딩이 여기에서 당신을 도울 수 있습니다. 변수와 주성분 사이의 상관 관계를 계산하는 데 사용할 수 있습니다. 또한 모든 주성분에 대한 하나의 변수의 제곱 적재의 합은 1과 같습니다. 따라서, 제곱 적재는 하나의 주성분에 의해 설명 된 하나의 변수의 분산 비율을 나타냅니다.

princomp의 문제점은 "매우 높은"로딩 만 표시한다는 것입니다. 그러나 하중은 공분산 행렬의 고유 벡터이므로 eigenR 의 명령을 사용하여 모든 하중을 얻을 수 있습니다 .

 loadings <- eigen(cov(USArrests))$vectors
 explvar <- loadings^2

이제 행렬에 원하는 정보가 explvar있습니다.


당신은 임의의 사람이 감사 당신은 아마도 예를 들어 저를 보여줄 수 assault또는 urban pop우리는이 일을 할 수 있습니까? 위한 행렬에서 하나 개의 상관이 존재하기 때문에 부분적으로 혼란assault
user1320502는

1
죄송합니다. 답변을 개선했으며 내 게시물에 이미 댓글을 달았습니다. 공격은 PC1에서 -0.995로로드됩니다. 따라서이 값을 제곱 한 후 PC1은 변수 공격의 분산의 99 %를 설명합니다. 도시 팝의 가치를 제곱 한 후 PC3는 도시 팝의 분산의 4 %와 PC2는 95.5 %를 설명한다고 결론 내릴 수 있습니다.
random_guy

1
OP는 변수에 기인 한 PCA의 양에 대해 묻지 않습니까? 귀하의 답변은 CPA가 설명 할 수있는 변수의 양에 관한 것입니다.
Heisenberg

2
w=(0.3,0.3,...0.3)1109.9w0.1

2
고맙지 만 위의 의견에서 내가 틀렸다고 생각하십니까? 그렇지 않은 경우 잠재적 혼란을 제거하기 위해 답변을 편집 할 수 있습니다. 이는 미래 독자에게 매우 도움이 될 것입니다. 방금 이러한 문제를 더 자세히 설명하려고 답변을 직접 게시했습니다.
amoeba는 Reinstate Monica

9

나는 받아 들여진 대답이 위험하게 오도 될 수 있다고 생각한다 (-1). OP에는 4 가지 이상의 다른 질문이 혼합되어 있습니다. 나는 그들을 차례로 고려할 것입니다.


  • Q1. 주어진 PC의 분산은 주어진 원래 변수에 의해 얼마나 설명됩니까? 주어진 원래 변수의 차이는 주어진 PC에 의해 얼마나 설명됩니까?

r2riVisiLiLi=(si)1/2Vi. 그 요소는이 PC와 각각의 원래 변수와의 상관 관계입니다.

ViLi

또한 PCA가 공분산 (상관이 아닌)에 대해 수행되는 경우로드는 상관이 아닌 공분산도 제공합니다. 상관 관계를 얻으려면 PCA에 따라 수동으로 상관 관계를 계산해야합니다. [현재 받아 들여진 대답은 명확하지 않습니다.]

  • 80%

r2R2

r2R2

  • 80%

r=0.9r=0.9r2R2=0.90.95>1R2

주어진 분산 량을 설명하는 부분 집합을 선택하는 방법은 @FrankHarrell (+1)에 의해 제안되었습니다.


+1, 이것이 정답입니다.
0:01에 생성됨


6

R과 함께 번들로 묶인 미국 체포 데이터는 여기에 대한 예일 뿐이지 만 문제의 하중 계산은 공분산 행렬 의 PCA에서 나온 것입니다 . 변수가 다른 척도로 측정되기 때문에 임의의 것과 무의미한 것입니다.

도시 인구는 백분율처럼 보입니다. 캘리포니아는 91 %가 가장 높습니다.

세 가지 범죄 변수는 인구 규모와 관련하여 표현 된 범죄에 대한 체포 횟수 (아마도 일정 기간) 인 것으로 보입니다. 아마도 그것은 1000 또는 10000 당 체포 여부 또는 어딘가에 문서화되어 있습니다.

주어진 단위에서 폭행 변수의 평균은 약 171이고 평균 살인은 약 8입니다. 따라서 하중에 대한 설명은 대부분 패턴이 인공물이라는 것입니다. 변수의 매우 다른 가변성에 따라 다릅니다.

따라서 데이터에는 살인 사건보다 공격에 대한 체포가 더 많다는 점에서 데이터가 의미가 있지만 알려진 (또는 예상치 못한) 사실이 분석을 지배합니다.

이는 통계의 다른 곳에서와 같이 PCA에서 수행중인 작업에 대해 생각해야 함을 보여줍니다.

더 자세히 살펴보면 :

  1. 나는 도시 비율이 분석에서 제외되는 것이 더 낫다고 주장했다. 도시가되는 것은 범죄가 아닙니다. 물론 범죄에 영향을 미치는 변수를 대리 할 수도 있습니다.

  2. 상관 관계 매트릭스에 기반한 PCA는 제 생각에 더 의미가 있습니다. 또 다른 가능성은 체포 율이 아닌 체포 율의 로그로 작업하는 것입니다 (모든 값은 양입니다. 아래 참조).

참고 : @random_guy의 답변은 공분산 행렬을 의도적으로 사용합니다.

다음은 몇 가지 요약 통계입니다. 나는 Stata를 사용했지만 그것은 중요하지 않습니다.

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
   urban_pop |        50       65.54    14.47476         32         91
      murder |        50       7.788     4.35551         .8       17.4
        rape |        50      21.232    9.366384        7.3         46
     assault |        50      170.76    83.33766         45        337
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.