PCA et scores des composants basés sur un mélange de variables continues et binaires

13

Je veux appliquer une PCA sur un ensemble de données, qui se compose de variables de type mixte (continu et binaire). Pour illustrer la procédure, je colle un exemple reproductible minimal dans R ci-dessous.

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

Maintenant, je me demande comment calculer les scores des composants (c'est-à-dire les variables brutes pondérées par les chargements des composants). Lorsque l'ensemble de données se compose de variables continues, les scores des composants sont simplement obtenus en multipliant les données brutes (mises à l'échelle) et les vecteurs propres stockés dans la matrice de chargement (L dans l'exemple ci-dessus). Tout pointeur serait grandement apprécié.

Andrej
la source
1
Je ne sais pas si je comprends votre question. Pourquoi serait-ce différent pour une variable binaire?
@Insanodag: vous suggérez donc que je peux multiplier la matrice de données par la matrice des chargements?
Andrej

Réponses:

9

Je pense que Insanodag a raison. Je cite l'analyse des principaux composants de Jollife:

Lorsque l'ACP est utilisée comme technique descriptive, il n'y a aucune raison pour que les variables de l'analyse soient d'un type particulier. [...] l'objectif de base de l'ACP - résumer la plupart des «variations» présentes dans l'ensemble original de variables en utilisant un plus petit nombre de variables dérivées - peut être atteint quelle que soit la nature des variables originales.p

La multiplication de la matrice de données par la matrice des chargements donnera le résultat souhaité. Cependant, j'ai eu quelques problèmes avec la princomp()fonction, j'ai donc utilisé à la prcomp()place.

L'une des valeurs de retour de la fonction prcomp()est x, qui est activée à l'aide de retx=TRUE. Ce x est la multiplication de la matrice de données par la matrice de charges comme indiqué dans la documentation 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’.

Faites-moi savoir si cela a été utile ou si cela nécessite des corrections supplémentaires.

-

IT Jollife. Analyse des composants principaux. Springer. Deuxième édition. 2002. pp 339-343.

deps_stats
la source
@dees_stats: merci pour votre réponse. J'ai essayé avec prcomp () et fourni toutes les variables as.numeric (); le résultat semble plausible. Pouvez-vous fournir le numéro de page de Jollife?
Andrej
@Andrej J'ai édité la réponse. La citation est tirée de la section 13.1, page 339.
deps_stats