Оцінки PCA та компонентів на основі суміші безперервних та бінарних змінних


13

Я хочу застосувати PCA до набору даних, який складається із змінних типів змішаного типу (безперервної та двійкової). Щоб проілюструвати процедуру, я вставляю мінімальний відтворюваний приклад в R нижче.

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

Тепер мені цікаво, як обчислити бали компонентів (тобто необроблені змінні, зважені навантаження компонентів). Коли набір даних складається з безперервних змінних, бали компонентів просто отримуються шляхом множення (масштабування) вихідних даних та власних векторів, що зберігаються в матриці завантаження (L у прикладі вище). Будь-які вказівки будуть дуже вдячні.


1
Я не впевнений, чи розумію ваше запитання. Чому це може бути різним для бінарної змінної?

@Insanodag: тож ви пропонуєте мені помножити матрицю даних з матрицею завантаження?
Андрій

Відповіді:


9

Я думаю, що Insanodag має рацію. Я цитую аналіз основних компонентів Jollife:

Коли PCA використовується як описовий метод, немає ніяких причин для змінних в аналізі будь-якого конкретного типу. [...] Основна мета PCA - узагальнити більшість «варіацій», що є в початковому наборі змінних, використовуючи меншу кількість похідних змінних - може бути досягнуто незалежно від природи вихідних змінних.p

Помноження матриці даних на матрицю навантаження дасть бажаний результат. Однак у мене були деякі проблеми з princomp()функцією, тому я використовував prcomp()замість цього.

Одне з повернених значень функції prcomp()- це x, яке активується за допомогою retx=TRUE. Цей х є множенням матриці даних на матрицю навантаження, як зазначено в Документації на 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’.

Повідомте мене, чи це було корисно, чи потребує подальших виправлень.

-

IT Jollife. Аналіз основних компонентів. Спрингер. Друге видання. 2002. С. 339–343.


@dees_stats: дякую за вашу відповідь. Я спробував з prcomp () і надав всі змінні як.numeric (); результат виглядає правдоподібно. Чи можете ви надати номер сторінки від Jollife?
Андрій

@Andrej Я відредагував відповідь. Цитата з розділу 13.1, сторінка 339.
deps_stats
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.