2012-08-22 39 views
12

Tôi đang sử dụng hàm prcomp để tính toán hai thành phần chính đầu tiên. Tuy nhiên, dữ liệu của tôi có một số giá trị NA và do đó chức năng ném một lỗi. Các na.action định nghĩa dường như không làm việc mặc dù nó được đề cập trong tập tin trợ giúp ?prcompR chức năng prcomp thất bại với các giá trị của NA mặc dù NA được cho phép

Dưới đây là ví dụ của tôi:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10)) 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

d$V1[5] <- NA 
d$V2[7] <- NA 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

Tôi đang sử dụng phiên bản R mới nhất 2.15.1 cho Mac OS X.

Ai có thể xem lý do trong khi prcomp không thành công?

Dưới đây là ví dụ mới của tôi:

d <- data.frame(V1 = sample(1:100, 10), V2 = 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 

là nó có thể giữ lại hàng 5 trong PC1 và PC2? Trong tập dữ liệu thực sự của tôi, tôi có tất nhiên nhiều hơn hai cột của các biến và chỉ một số trong số đó là mất tích và tôi không muốn mất các thông tin còn lại ẩn trong các giá trị khác!

Trả lời

12

Vâng, có vẻ như một "tính năng" (lỗi) mà na.action bị bỏ qua hoàn toàn trừ khi bạn sử dụng giao diện formula. Đây là brought up before on the R Development list.

Tôi nghĩ rằng điều này phải được ghi chép hoặc gắn cờ là lỗi.

Chỉ cần được rõ ràng, điều này sẽ làm việc vì nó truy cập vào giao diện công thức:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit) 
+0

Ok tuyệt vời. Cảm ơn bạn đã tiếp cận công thức! – user969113

+2

Tôi đồng ý rằng nó phải được ghi lại (Tôi là tác giả của truy vấn trong danh sách phát triển R); cách tốt nhất để thúc đẩy điều này, nếu ai đó muốn, sẽ đề xuất một sự thay đổi đối với tài liệu và gửi nó vào danh sách r-devel (và/hoặc trình theo dõi lỗi R). –

8

Một giải pháp nếu bạn không sẵn sàng để sử dụng giao diện công thức là

prcomp(na.omit(d), center = TRUE, scale = TRUE) 

trong đó bao gồm việc áp dụng na.omit trực tiếp vào khung dữ liệu.

+0

Cảm ơn giải pháp của bạn là tốt. Tôi chỉ nhận ra rằng bằng cách sử dụng na.omit kết quả trong ít thành phần chính. Tôi vừa chỉnh sửa ví dụ của tôi ở trên. – user969113

Các vấn đề liên quan