Wyniki PCA i składników oparte na kombinacji zmiennych ciągłych i binarnych

13

Chcę zastosować PCA do zestawu danych, który składa się ze zmiennych typu mieszanego (ciągłego i binarnego). Aby zilustrować tę procedurę, wklejam minimalny odtwarzalny przykład w R poniżej.

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

Teraz zastanawiam się, jak obliczyć wyniki komponentów (tj. Zmienne surowe ważone ładunkami komponentów). Gdy zestaw danych składa się ze zmiennych ciągłych, wyniki składowe są po prostu uzyskiwane przez pomnożenie (skalowane) surowych danych i wektorów własnych przechowywanych w macierzy ładowania (L w powyższym przykładzie). Wszelkie wskazówki będą mile widziane.

Andrej
źródło
1
Nie jestem pewien, czy rozumiem twoje pytanie. Dlaczego miałoby być inaczej w przypadku zmiennej binarnej?
@Insanodag: więc sugerujesz, że mogę pomnożyć macierz danych przez macierz obciążeń?
Andrej

Odpowiedzi:

9

Myślę, że Insanodag ma rację. Cytuję główną analizę Jollife:

p

Pomnożenie macierzy danych przez macierz obciążeń da pożądany rezultat. Jednak miałem pewne problemy z princomp()funkcją, więc użyłem prcomp()zamiast tego.

Jedną z wartości zwracanych przez funkcję prcomp()jest x, która jest aktywowana za pomocą retx=TRUE. To x jest mnożeniem macierzy danych przez macierz obciążeń, jak podano w dokumentacji 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’.

Daj mi znać, czy było to przydatne, czy też wymaga dalszych poprawek.

-

IT Jollife. Analiza głównych składowych. Skoczek. Druga edycja. 2002. s. 339–343.

deps_stats
źródło
@dees_stats: dzięki za odpowiedź. Próbowałem z prcomp () i podałem wszystkie zmienne as.numeric (); wynik wydaje się wiarygodny. Czy możesz podać numer strony Jollife?
Andrej
@Andrej Zredagowałem odpowiedź. Cytat pochodzi z sekcji 13.1, strona 339.
deps_stats