Punteggi PCA e componenti basati su un mix di variabili continue e binarie


13

Voglio applicare un PCA su un set di dati, che consiste in variabili di tipo misto (continue e binarie). Per illustrare la procedura, ho incollato un esempio riproducibile minimo in R sotto.

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

Ora, mi chiedo come calcolare i punteggi dei componenti (ovvero, le variabili non elaborate ponderate dai caricamenti dei componenti). Quando il set di dati è costituito da variabili continue, i punteggi dei componenti vengono semplicemente ottenuti moltiplicando (in scala) i dati grezzi e gli autovettori memorizzati nella matrice di caricamento (L nell'esempio sopra). Qualsiasi suggerimento sarebbe molto apprezzato.


1
Non sono sicuro di aver compreso la tua domanda. Perché questo sarebbe diverso per una variabile binaria?

@Insanodag: quindi mi suggerisci di poter moltiplicare la matrice di dati con la matrice dei caricamenti?
Andrej

Risposte:


9

Penso che Insanodag abbia ragione. Cito l'analisi dei componenti principali di Jollife:

p

Moltiplicando la matrice dei dati con la matrice dei carichi si otterrà il risultato desiderato. Tuttavia, ho avuto alcuni problemi con la princomp()funzione, quindi ho usato prcomp()invece.

Uno dei valori di ritorno della funzione prcomp()è x, che viene attivato utilizzando retx=TRUE. Questa x è la moltiplicazione della matrice di dati per la matrice dei carichi come indicato nella documentazione 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’.

Fammi sapere se questo è stato utile o se necessita di ulteriori correzioni.

-

IT Jollife. Analisi del componente principale. Springer. Seconda edizione. 2002. pp 339-343.


@dees_stats: grazie per la risposta. Ho provato con prcomp () e fornito tutte le variabili as.numeric (); il risultato sembra plausibile. Potete per favore fornire il numero di pagina di Jollife?
Andrej,

@Andrej Ho modificato la risposta. La citazione è tratta dalla sezione 13.1, pagina 339.
deps_stats
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.