PCA- und Komponentenbewertungen basieren auf einer Mischung aus kontinuierlichen und binären Variablen

13

Ich möchte eine PCA auf einen Datensatz anwenden, der aus Variablen gemischten Typs (stetig und binär) besteht. Um die Vorgehensweise zu veranschaulichen, füge ich unten in R ein minimal reproduzierbares Beispiel ein.

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

Nun frage ich mich, wie man Komponentenbewertungen berechnet (dh Rohvariablen, die durch Komponentenladungen gewichtet werden). Wenn der Datensatz aus kontinuierlichen Variablen besteht, werden die Komponentenbewertungen einfach durch Multiplizieren (skalierten) Rohdaten und Eigenvektoren erhalten, die in der Ladematrix gespeichert sind (L im obigen Beispiel). Alle Hinweise wäre sehr dankbar.

Andrej
quelle
1
Ich bin nicht sicher, ob ich Ihre Frage verstehe. Warum sollte dies für eine Binärvariable anders sein?
@Insanodag: Also schlagen Sie vor, ich kann Datenmatrix mit Ladematrix multiplizieren?
Andrej

Antworten:

9

Ich denke Insanodag ist richtig. Ich zitiere Jollifes Hauptkomponentenanalyse:

p

Das Multiplizieren der Datenmatrix mit der Ladematrix ergibt das gewünschte Ergebnis. Ich hatte jedoch einige Probleme mit der princomp()Funktion, also habe ich prcomp()stattdessen verwendet.

Einer der Rückgabewerte der Funktion prcomp()ist x, der mit aktiviert wird retx=TRUE. Dieses x ist die Multiplikation der Datenmatrix mit der Ladematrix, wie in der R-Dokumentation angegeben:

    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’.

Lassen Sie mich wissen, ob dies nützlich war oder ob weitere Korrekturen erforderlich sind.

-

IT Jollife. Hauptkomponentenanalyse. Springer. Zweite Ausgabe. 2002, S. 339-343.

deps_stats
quelle
@dees_stats: danke für deine antwort. Ich habe es mit prcomp () versucht und alle Variablen als.numeric () angegeben. das ergebnis sieht plausibel aus. Können Sie bitte die Seitennummer von Jollife angeben?
Andrej
@Andrej Ich habe die Antwort bearbeitet. Das Zitat stammt aus Abschnitt 13.1, Seite 339.
deps_stats