Pontuações de PCA e componente com base em uma combinação de variáveis ​​contínuas e binárias


13

Desejo aplicar um PCA em um conjunto de dados, que consiste em variáveis ​​de tipo misto (contínuo e binário). Para ilustrar o procedimento, colo um exemplo mínimo reproduzível em R abaixo.

# 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)

Agora, pergunto-me como calcular as pontuações dos componentes (ou seja, variáveis ​​brutas ponderadas pelas cargas dos componentes). Quando o conjunto de dados consiste em variáveis ​​contínuas, as pontuações dos componentes são simplesmente obtidas pela multiplicação de dados brutos (em escala) e autovetores armazenados na matriz de carregamento (L no exemplo acima). Qualquer ponteiro seria muito apreciado.


1
Não tenho certeza se entendi sua pergunta. Por que isso seria diferente para uma variável binária?

@ Insanodag: então você sugere que eu possa multiplicar a matriz de dados com a matriz de carregamentos?
Andrej 31/05

Respostas:


9

Eu acho que o Insanodag está certo. Cito a Análise de Componentes Principais da Jollife:

p

Multiplicar a matriz de dados pela matriz de carregamentos fornecerá o resultado desejado. No entanto, tive alguns problemas com a princomp()função, então useiprcomp() .

Um dos valores de retorno da função prcomp()é x, que é ativado usando retx=TRUE. Este x é a multiplicação da matriz de dados pela matriz de cargas, conforme declarado na documentação 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’.

Deixe-me saber se isso foi útil ou se precisa de correções adicionais.

-

TI Jollife. Análise do componente principal. Springer. Segunda edição. 2002. pp 339-343.


@dees_stats: obrigado pela sua resposta. Eu tentei com prcomp () e forneci todas as variáveis ​​as.numeric (); o resultado parece plausível. Você pode fornecer o número da página da Jollife?
Andrej

@Andrej eu editei a resposta. A citação é da seção 13.1, página 339.
deps_stats
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.