PCA y puntajes de componentes basados ​​en una combinación de variables continuas y binarias

13

Quiero aplicar un PCA en un conjunto de datos, que consiste en variables de tipo mixto (continuo y binario). Para ilustrar el procedimiento, pego un ejemplo mínimo reproducible en R a continuación.

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

Ahora, me pregunto cómo calcular las puntuaciones de los componentes (es decir, las variables sin procesar ponderadas por las cargas de los componentes). Cuando el conjunto de datos consta de variables continuas, las puntuaciones de los componentes se obtienen simplemente multiplicando (sin escalar) datos y vectores propios almacenados en la matriz de carga (L en el ejemplo anterior). Cualquier puntero sería muy apreciado.

Andrej
fuente
1
No estoy seguro si entiendo tu pregunta. ¿Por qué sería diferente para una variable binaria?
@Insanodag: ¿entonces sugiere que puedo multiplicar la matriz de datos con la matriz de cargas?
Andrej

Respuestas:

9

Creo que Insanodag tiene razón. Cito el análisis de componentes principales de Jollife:

Cuando se utiliza PCA como técnica descriptiva, no hay razón para que las variables en el análisis sean de ningún tipo en particular. [...] el objetivo básico de PCA: resumir la mayor parte de la 'variación' que está presente en el conjunto original de variables utilizando un menor número de variables derivadas, se puede lograr independientemente de la naturaleza de las variables originales.p

Multiplicar la matriz de datos con la matriz de cargas dará el resultado deseado. Sin embargo, he tenido algunos problemas con la princomp()función, así que usé en su prcomp()lugar.

Uno de los valores de retorno de la función prcomp()es x, que se activa usando retx=TRUE. Esta x es la multiplicación de la matriz de datos por la matriz de cargas como se indica en la Documentación 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’.

Avíseme si esto fue útil o si necesita más correcciones.

-

IT Jollife. Análisis de componentes principales. Saltador. Segunda edicion. 2002. pp 339-343.

deps_stats
fuente
@dees_stats: gracias por tu respuesta. Intenté con prcomp () y proporcioné todas las variables como.numeric (); El resultado parece plausible. ¿Puede proporcionar el número de página de Jollife?
Andrej
@Andrej Edité la respuesta. La cita es de la sección 13.1, página 339.
deps_stats