PCA에 대한 결 측값 대치


23

prcomp()함수를 사용하여 R에서 PCA (주성분 분석)를 수행했습니다. 그러나 해당 함수에 na.action매개 변수가 작동하지 않는 버그 가 있습니다. 나는 stackoverflow에 대한 도움을 요청했다 . 두 명의 사용자가 두 가지 방법으로 NA가치 를 처리했습니다 . 그러나 두 솔루션의 문제점은 NA값 이있을 때 해당 행이 삭제되고 PCA 분석에서 고려되지 않는다는 것입니다. 내 실제 데이터 세트는 100 x 100의 행렬이며 단일 NA값을 포함하기 때문에 전체 행을 잃고 싶지 않습니다 .

다음 예제는 prcomp()함수가 NA값을 포함하므로 행 5의 기본 구성 요소를 리턴하지 않음을 보여줍니다 .

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특정 수치 값을 때 centerscale로 설정되어 TRUE있으므로 그 prcomp()기능이 작동하고 포함 된 행을 제거하지 않습니다 NAPCA에 분석의 결과에 영향을 미치지도의, 그러나.

NA단일 열에서 값을 중간 값으로 바꾸 거나 0에 매우 가까운 값으로 바꾸는 것에 대해 생각했습니다. 그러나 그것이 PCA 분석에 어떤 영향을 미치는지 잘 모르겠습니다.

아무도 그 문제를 해결하는 좋은 방법을 생각할 수 있습니까?


8
문제는 PCA 문제가 아니라 더 넓은 결 측값 처리 문제입니다. 익숙하지 않은 경우 조금 읽어보십시오 . (1) 사례를 목록별로 삭제하거나 (2) 쌍별로 또는 (3) 누락 된 항목을 평균 또는 중앙값으로 대체 할 수 있습니다. 또는 (4) 무작위로 선택된 유효한 값으로 대체하십시오 (핫 데크 방식). 또는 (5) 상호 회귀 (노이즈 추가 유무에 관계없이) 접근 방식 또는보다 나은 (6) EM 접근 방식으로 누락을 대치하십시오.
ttnphns 2018 년

의견과 답변이 보여 주듯이, 좋은 답변을 얻는 열쇠는 그 NA가치 가 무엇을 의미 하는지 설명하는 것입니다 : "누락"의 원인은 무엇입니까?
whuber

2
"pcaMethods"패키지가 문제를 해결할 수 있다고 생각합니다 ( 여기 )
ToNoY

답변:


22

실제로 갭피 행렬을 처리하는 잘 문서화 된 방법 이 있습니다. 데이터 X로 구성된 공분산 행렬 분해 할 수 있습니다. 이 값은 공유 값의 수 n으로 스케일됩니다 . : C = 1CXn

C=1nXTX,                Cjl=X.jY.l¯

그리고 @ user969113에서 언급 한 것처럼 최소 제곱 피팅을 통해 주 계수를 확장합니다. 다음은 예 입니다.

Xprcomp

최신 정보

빈약 한 데이터 세트에서 PCA를 수행하는 또 다른 옵션은 "재귀 적으로 빼는 경험적 직교 함수"입니다 (Taylor et al. 2013). 또한 최소 제곱 방식의 일부 문제를 해결하며 DINEOF보다 계산 속도가 훨씬 빠릅니다. 이 게시물 은 PC를 사용한 데이터 재구성의 정확성 측면에서 세 가지 접근 방식을 모두 비교합니다.

참고 문헌

Beckers, Jean-Marie 및 M. Rixen. "불완전한 해양 데이터 세트에서 EOF 계산 및 데이터 채우기." 대기 및 해양 기술 저널 20.12 (2003) : 1839-1856.

Taylor, M., Losch, M., Wenzel, M., & Schröter, J. (2013). 허술한 데이터에서 파생 된 경험적 직교 함수를 사용한 필드 재구성 및 예측의 민감도 기후 저널, 26 (22), 9194-9205.


(+1) 이것은 참신한 아이디어이기 때문에 나에게 귀중한 기여로 보입니다. 내가 물어 비슷한 질문을 현저하게 유사하다는 것을 오래 전에 : 데이터를 할 때 당신은 공분산 행렬을 추정 어떻게 검열 (대신 실종의)? 당신이 그 상황에 대해 생각이 있다면, 나는 대답에 기뻐할 것입니다!
whuber

감사합니다 @ whuber-이 방법에는 많은 장점이 있다고 생각합니다. 보간 된 값에 관심이 없더라도 데이터 세트에 대한 EOF / PC를 설명하는 방법이 훨씬 좋습니다. 예를 들어 재구성 된 데이터와 원본 간의 오류는 알고리즘을 통해 최소화됩니다.
Marc in the box

@whuber-검열 된 데이터와 관련하여-이것은 내 전문 분야가 아니며, 흥미롭게도 몇 주 전에이 방향으로 질문했습니다. (당신이 주석하는!) . 제 직감은 탐지 한계 이하의 임의의 값으로 0을 채워야한다는 것입니다.이 값은 관찰 된 값의 분포와 비슷합니다. 나는 당신의 게시물에서 인용 된 문헌 중 일부를 살펴볼 것입니다-이것은 실제로 매우 흥미로운 주제입니다.
Marc in the box

@whuber-Bien, Jacob 및 Robert J. Tibshirani와 같이 데이터를 희소하게 만드는 유사한 반복 공분산 행렬 피팅 절차를 설명하는 다음 백서에 관심이있을 수 있습니다. "공분산 행렬의 희소 추정" Biometrika 98.4 (2011) : 807-820.
Marc in the box

감사합니다 @Marc. 불행히도 검열과 여분은 우려가 다른 두 가지입니다.
whuber

6

내 제안은 누락 된 데이터의 양과 누락 된 이유에 달려 있습니다. 그러나 이것은 실제로 PCA와 관련이 없습니다. 누락 된 데이터가 거의 없으면 수행하는 작업이 중요하지 않습니다. 중간 값으로 바꾸는 것이 이상적이지는 않지만 그리 많지 않은 경우 더 나은 솔루션과 크게 다르지 않습니다. 중간 값 대체 및 목록 별 삭제로 PCA를 시도하여 결과에 큰 차이가 있는지 확인할 수 있습니다.

다음으로 누락 된 데이터가 더 있으면 무작위로 누락되거나 무작위로 누락되거나 무작위로 누락되지 않는지 고려해야합니다. 데이터가 NMAR 상태에 의해 크게 왜곡되지 않는 한, 다중 대치가 목록 삭제보다 더 좋을 것이라고 생각합니다 (펜 스테이트의 조 샤퍼는 누락 된 데이터에 대한 많은 작업-여러 대치가 일부 NMAR 사례에서도 잘 작동했음을 보여주는 그의 작업을 회상합니다. 그러나 데이터가 MCAR 또는 MAR 인 경우 다중 대치 특성이 입증 될 수 있습니다.

MI를 사용하기로 결정한 경우 PCA의 구성 요소 표시는 임의적이며 데이터의 작은 변경으로 부호가 뒤집힐 수 있으므로주의해야합니다. 그런 다음 PCA를 수행하면 말도 안됩니다. 오래 전에 SAS에서 솔루션을 개발했습니다. 어렵지는 않지만 조심해야 할 부분입니다.


1

문제에 대한 올바른 해결책이 없습니다. 정확한 주성분 세트를 얻으려면 벡터의 모든 좌표를 지정해야합니다. 좌표가 누락되어 일부 대치 된 값으로 대체되면 결과가 표시되지만 대치 된 값에 따라 달라집니다. 따라서 전가 된 가치에 대해 두 가지 합리적인 선택이 있다면 다른 선택은 다른 대답을 줄 것입니다.


3
방금 PCA와 누락 된 데이터를 검색했으며 다음을 발견했습니다. 4.2 SIMCA는 누락 된 데이터를 어떻게 처리합니까? 간단히 말해 NIPALS 알고리즘은 최소 제곱 피팅을 사용하여 결 측점을 보간하지만 결측 데이터는 모델에 영향을주지 않습니다. 연속적인 반복은 단순히 점수와 해당 지점의 하중을 곱하여 결 측값을 세분화합니다. 누락 된 데이터 (예 : 추정)에는 여러 가지 방법이 있지만 일반적으로 동일한 솔루션으로 수렴됩니다. 누락 된 데이터는 무작위로 배포 된 경우 허용됩니다. 누락 된 데이터의 체계적인 블록은 문제가 있습니다.
user969113

1
모델에 아무런 영향을 미치지 않는다는 것이 무슨 의미인지 모르겠습니다. 좌표에 대해 결 측값을 선택하면 주성분에 영향을 미칩니다.
마이클 R. 체닉

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