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 в примере выше). Любые указатели будут с благодарностью.

Andrej
источник
1
Я не уверен, что понимаю ваш вопрос. Почему это может быть иначе для двоичной переменной?
@Insanodag: так ты предлагаешь умножить матрицу данных на матрицу загрузок?
Андрей

Ответы:

9

Я думаю, что Инсанодаг прав. Я цитирую анализ основных компонентов Jollife:

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

Умножение матрицы данных на матрицу нагрузок даст желаемый результат. Тем не менее, у меня были некоторые проблемы с princomp()функцией, поэтому я использовал prcomp()вместо этого.

Одним из возвращаемых значений функции prcomp()является то x, которое активируется с помощью retx=TRUE. Это x - умножение матрицы данных на матрицу загрузок, как указано в Документации 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. Анализ главных компонентов. Springer. Второе издание. 2002. С. 339-343.

deps_stats
источник
@dees_stats: спасибо за ваш ответ. Я попытался с prcomp () и предоставил все переменные as.numeric (); результат выглядит правдоподобным. Можете ли вы предоставить номер страницы от Jollife?
Андрей
@ Андрей я отредактировал ответ. Цитата из раздела 13.1, стр. 339.
deps_stats