Tranh chấp các giá trị còn thiếu cho PCA


23

Tôi đã sử dụng prcomp()chức năng để thực hiện PCA (phân tích thành phần chính) trong R. Tuy nhiên, có một lỗi trong chức năng đó khiến na.actiontham số không hoạt động. Tôi đã yêu cầu giúp đỡ về stackoverflow ; Hai người dùng ở đó đưa ra hai cách khác nhau để xử lý NAcác giá trị. Tuy nhiên, vấn đề với cả hai giải pháp là khi có một NAgiá trị, hàng đó bị bỏ và không được xem xét trong phân tích PCA. Tập dữ liệu thực của tôi là ma trận 100 x 100 và tôi không muốn mất toàn bộ hàng chỉ vì nó chứa một NAgiá trị duy nhất .

Ví dụ sau đây cho thấy prcomp()hàm không trả về bất kỳ thành phần chính nào cho hàng 5 vì nó chứa NAgiá trị.

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

Tôi đã tự hỏi nếu tôi có thể thiết lập các NAgiá trị cho một số giá trị cụ thể khi centerscaleđược thiết lập để TRUEsao cho prcomp()công trình chức năng và không loại bỏ hàng chứa NA's, nhưng cũng không ảnh hưởng đến kết quả của việc phân tích PCA.

Tôi đã nghĩ về việc thay thế NAcác giá trị bằng giá trị trung bình trên một cột hoặc với giá trị rất gần với 0. Tuy nhiên, tôi không chắc điều đó ảnh hưởng đến phân tích PCA như thế nào.

Bất cứ ai cũng có thể nghĩ ra một cách tốt để giải quyết vấn đề đó?


8
Vấn đề của bạn không phải là vấn đề PCA mà là vấn đề thiếu giá trị rộng hơn . Nếu bạn không quen thuộc với nó, xin vui lòng đọc một chút về nó. Bạn có nhiều cơ hội: (1) xóa các trường hợp theo cách liệt kê hoặc (2) theo cặp hoặc (3) thay thế các sai sót bằng trung bình hoặc trung bình. Hoặc (4) thay thế bằng cách chọn ngẫu nhiên các giá trị hợp lệ (phương pháp tiếp cận sàn nóng). Hoặc bỏ qua các sai sót bằng cách (5) hồi quy lẫn nhau (có hoặc không có thêm tiếng ồn) hoặc bằng cách tiếp cận EM tốt hơn, (6).
ttnphns

Như các bình luận và câu trả lời đang hiển thị, chìa khóa để có được câu trả lời tốt là giải thích ý nghĩa củaNA các giá trị : nguyên nhân của "sự thiếu" là gì?
whuber

2
Tôi nghĩ rằng gói "pcaMethods" có thể giải quyết vấn đề của bạn ( tại đây )
ToNoY

Câu trả lời:


22

Trên thực tế, có một cách được lập thành tài liệu tốt để đối phó với ma trận vui - bạn có thể phân tách ma trận hiệp phương sai lấy từ dữ liệu của bạn , được chia theo số lượng giá trị được chia sẻ :X n C = 1CXn

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

và sau đó mở rộng các hệ số chính thông qua một bình phương nhỏ nhất phù hợp (như @ user969113 đề cập). Đây là một ví dụ .

Tuy nhiên, có một số vấn đề với phương pháp này liên quan đến thực tế là ma trận hiệp phương sai không còn xác định bán chính xác và các giá trị eigen / số ít có xu hướng bị thổi phồng. Một đánh giá tốt về những vấn đề này có thể được tìm thấy trong Beckers và Rixen (2003) , nơi họ cũng đề xuất một phương pháp nội suy tối ưu các khoảng trống còn thiếu - DINEOF (Hàm nội suy trực giao dữ liệu). Gần đây tôi đã viết một chức năng thực hiện DINEOF , và nó thực sự là một cách tốt hơn để đi. Bạn có thể thực hiện DINEOF trực tiếp trên tập dữ liệu của mình , sau đó sử dụng tập dữ liệu được nội suy làm đầu vào .Xprcomp

Cập nhật

Một tùy chọn khác để tiến hành PCA trên một bộ dữ liệu vui vẻ là "Các hàm trực giao được trừ theo kinh nghiệm" (Taylor et al. 2013). Nó cũng sửa một số vấn đề theo cách tiếp cận bình phương nhỏ nhất và nhanh hơn nhiều so với DINEOF. Bài đăng này so sánh cả ba cách tiếp cận về độ chính xác của việc tái tạo dữ liệu bằng PC.

Tài liệu tham khảo

Beckers, Jean-Marie và M. Rixen. "Tính toán EOF và điền dữ liệu từ bộ dữ liệu hải dương học chưa hoàn chỉnh." Tạp chí Công nghệ Khí quyển và Đại dương 20.12 (2003): 1839-1856.

Taylor, M., Losch, M., Wenzel, M., & Schröter, J. (2013). Về độ nhạy của tái thiết và dự đoán trường bằng cách sử dụng Hàm trực giao theo kinh nghiệm có nguồn gốc từ dữ liệu vui. Tạp chí Khí hậu, 26 (22), 9194-9205.


(+1) Đây có vẻ như là một đóng góp có giá trị đối với tôi, bởi vì nó là một ý tưởng mới lạ. Tôi đã hỏi một câu hỏi tương tự từ lâu rất giống nhau: làm thế nào để bạn ước tính một ma trận hiệp phương sai khi dữ liệu được kiểm duyệt (thay vì mất tích)? Nếu bạn có bất kỳ suy nghĩ về tình huống đó, tôi sẽ rất vui khi được trả lời!
whuber

Cảm ơn @whuber - Tôi tin rằng phương pháp này cũng có rất nhiều công đức. Ngay cả khi bạn không quan tâm đến các giá trị được nội suy, phương pháp này vẫn tốt hơn nhiều khi mô tả EOFs / PC cho tập dữ liệu - ví dụ: lỗi giữa dữ liệu được xây dựng lại và bản gốc được giảm thiểu thông qua thuật toán.
Marc trong hộp

@whuber - Liên quan đến dữ liệu bị kiểm duyệt - Đây là lĩnh vực chuyên môn của tôi và thật thú vị, tôi đã hỏi một câu hỏi theo hướng này vài tuần trước (mà bạn đã nhận xét!) . Linh cảm của tôi là người ta sẽ lấp đầy các số không với các giá trị ngẫu nhiên dưới giới hạn phát hiện, gần đúng với sự phân bố của các giá trị quan sát được. Tôi sẽ xem xét một số tài liệu được trích dẫn từ bài viết của bạn - đây thực sự là một chủ đề rất thú vị.
Marc trong hộp

@whuber - Bạn có thể quan tâm đến bài báo sau đây mô tả một quy trình khớp ma trận hiệp phương sai tương tự với dữ liệu thưa thớt: Biên, Jacob và Robert J. Tibshirani. "Ước lượng thưa thớt của một ma trận hiệp phương sai." Biometrika 98.4 (2011): 807-820.
Marc trong hộp

Cảm ơn @Marc. Thật không may kiểm duyệt và phụ tùng là hai điều khác nhau với mối quan tâm khác nhau.
whuber

6

Đề xuất của tôi phụ thuộc vào lượng dữ liệu bị thiếu và tại sao nó bị thiếu. Nhưng điều này không liên quan gì đến PCA, thực sự. Nếu có rất ít dữ liệu bị thiếu, thì bạn sẽ không làm được gì nhiều. Thay thế bằng trung vị không phải là lý tưởng, nhưng nếu không thiếu nhiều, nó sẽ không khác nhiều so với một giải pháp tốt hơn. Bạn có thể thử thực hiện PCA với cả thay thế trung bình và xóa theo cách nghe và xem liệu có sự khác biệt lớn trong kết quả hay không.

Tiếp theo, nếu thiếu nhiều dữ liệu hơn, bạn nên xem xét liệu nó bị thiếu hoàn toàn một cách ngẫu nhiên, thiếu ngẫu nhiên hay không bị thiếu một cách ngẫu nhiên. Tôi sẽ đề xuất nhiều lần cắt bỏ trong hai trường hợp đầu tiên và đôi khi trong trường hợp thứ ba - trừ khi dữ liệu bị biến dạng nhiều bởi trạng thái NMAR của nó, tôi nghĩ rằng việc cắt bỏ nhiều lần sẽ tốt hơn xóa theo cách nghe (Joe Schafer của bang Pennsylvania đã thực hiện rất nhiều công việc về dữ liệu bị thiếu - Tôi nhớ lại một số công việc của anh ấy cho thấy rằng nhiều lần cắt bỏ hoạt động khá tốt ngay cả trong một số trường hợp NMAR). Tuy nhiên, nếu dữ liệu là MCAR hoặc MAR, các thuộc tính của nhiều mức độ có thể được chứng minh.

Nếu bạn quyết định sử dụng MI, một lưu ý là hãy cẩn thận vì các dấu hiệu của các thành phần trong PCA là tùy ý và một thay đổi nhỏ trong dữ liệu có thể lật một dấu hiệu. Sau đó, khi bạn làm PCA, bạn sẽ nhận được vô nghĩa. Cách đây rất lâu, tôi đã tìm ra một giải pháp trong SAS - nó không khó, nhưng đó là điều cần phải cẩn thận.


1

Không có giải pháp chính xác cho vấn đề. Mỗi tọa độ trong vectơ phải được chỉ định để có được bộ thành phần chính. Nếu một tọa độ bị thiếu và được thay thế bằng một số giá trị được liệt kê, bạn sẽ nhận được một kết quả nhưng nó sẽ phụ thuộc vào giá trị được liệt kê. Vì vậy, nếu có hai lựa chọn hợp lý cho giá trị được liệt kê, các lựa chọn khác nhau sẽ đưa ra các câu trả lời khác nhau.


3
Tôi vừa googled cho PCA và thiếu dữ liệu và thấy rằng: 4.2 SIMCA đối phó với dữ liệu bị thiếu như thế nào? Đặt đơn giản là thuật toán NIPALS nội suy điểm thiếu bằng cách sử dụng bình phương tối thiểu phù hợp nhưng cung cấp dữ liệu bị thiếu không ảnh hưởng đến mô hình. Lặp lại liên tiếp tinh chỉnh giá trị còn thiếu bằng cách nhân số điểm và tải cho điểm đó. Nhiều phương pháp khác nhau tồn tại cho dữ liệu bị thiếu, chẳng hạn như ước tính nhưng chúng thường hội tụ vào cùng một giải pháp. Thiếu dữ liệu được chấp nhận nếu chúng được phân phối ngẫu nhiên. Các khối hệ thống của dữ liệu bị thiếu là có vấn đề.
dùng969113

1
Tôi không biết ý của bạn là gì khi không ảnh hưởng đến mô hình. Bất kỳ lựa chọn giá trị thiếu cho tọa độ sẽ ảnh hưởng đến các thành phần chính.
Michael R. Chernick

1

Một bài báo gần đây xem xét các cách tiếp cận để xử lý các giá trị còn thiếu trong phân tích PCA là "Phân tích thành phần chính với các giá trị bị thiếu: một khảo sát so sánh các phương pháp" của Dray & Josse (2015) . Hai trong số các phương thức PCA được biết đến nhiều nhất cho phép thiếu các giá trị là thuật toán NIPALS, được triển khai trong nipalschức năng của ade4gói và PCA lặp (Ipca hoặc EM-PCA), được triển khai trong imputePCAchức năng của missMDAgói. Bài viết kết luận rằng phương pháp Ipca thực hiện tốt nhất trong phạm vi điều kiện rộng nhất.

Đối với cú pháp ví dụ của bạn là:

Đối với NIPALS:

library(ade4)
nipals(d[,c(1,2)])

Đối với Ipca:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.