Điểm PCA và thành phần dựa trên sự kết hợp của các biến nhị phân và biến nhị phân


13

Tôi muốn áp dụng PCA trên tập dữ liệu, bao gồm các biến loại hỗn hợp (liên tục và nhị phân). Để minh họa thủ tục, tôi dán một ví dụ có thể lặp lại tối thiểu trong R bên dưới.

# Generate synthetic dataset
set.seed(12345)
n <- 100
x1 <- rnorm(n)
x2 <- runif(n, -2, 2)
x3 <- x1 + x2 + rnorm(n)
x4 <- rbinom(n, 1, 0.5)
x5 <- rbinom(n, 1, 0.6)
data <- data.frame(x1, x2, x3, x4, x5)

# Correlation matrix with appropriate coefficients
# Pearson product-moment: 2 continuous variables
# Point-biserial: 1 continuous and 1 binary variable
# Phi: 2 binary variables
# For testing purposes use hetcor function
library(polycor)
C <- as.matrix(hetcor(data=data))

# Run PCA
pca <- princomp(covmat=C)
L <- loadings(pca)

Bây giờ, tôi tự hỏi làm thế nào để tính điểm thành phần (nghĩa là các biến thô có trọng số theo tải trọng thành phần). Khi tập dữ liệu bao gồm các biến liên tục, điểm thành phần chỉ đơn giản thu được bằng cách nhân dữ liệu thô (tỷ lệ) và hàm riêng được lưu trữ trong ma trận tải (L trong ví dụ trên). Bât cư thông tin được cung câp nao cung được la sự suât hiện tuyệt vơi.


1
Tôi không chắc chắn nếu tôi hiểu câu hỏi của bạn. Tại sao điều này sẽ khác với biến nhị phân?

@Insanodag: vậy bạn có gợi ý tôi có thể nhân ma trận dữ liệu với ma trận tải không?
Andrej

Câu trả lời:


9

Tôi nghĩ Insanodag là đúng. Tôi trích dẫn Phân tích thành phần chính của Jollife:

p

Nhân ma trận dữ liệu với ma trận tải sẽ cho kết quả mong muốn. Tuy nhiên, tôi đã gặp một số vấn đề với princomp()chức năng nên tôi đã sử dụng prcomp()thay thế.

Một trong những giá trị trả về của hàm prcomp()x, được kích hoạt bằng cách sử dụng retx=TRUE. X này là phép nhân của ma trận dữ liệu với ma trận tải như đã nêu trong Tài liệu R:

    rotation: the matrix of variable
              loadings (i.e., a matrix whose columns
              contain the eigenvectors).  The function princomp returns
              this in the element loadings’.

           x: if retx is true the value of the rotated data (the centred
              (and scaled if requested) data multiplied by the rotation
              matrix) is returned.  Hence, cov(x)’ is the diagonal matrix
              diag(sdev^2)’.  For the formula method, napredict()’ is
              applied to handle the treatment of values omitted by the
              na.action’.

Hãy cho tôi biết nếu điều này là hữu ích, hoặc nếu nó cần sửa chữa thêm.

-

Jollife CNTT. Phân tích thành phần chính. Mùa xuân. Phiên bản thứ hai. 2002. Trang 339-343.


@dees_stats: cảm ơn câu trả lời của bạn. Tôi đã thử với prcomp () và cung cấp tất cả các biến as.numeric (); kết quả có vẻ hợp lý Bạn có thể vui lòng cung cấp số trang từ Jollife không?
Andrej

@Andrej Tôi đã chỉnh sửa câu trả lời. Trích dẫn từ phần 13.1, trang 339.
deps_stats
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.