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:所以您建议我可以将数据矩阵与加载矩阵相乘?
安德烈(Andrej)

Answers:


9

我认为Insanodag是对的。我引用Jollife的主成分分析:

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。主成分分析。施普林格。第二版。2002.第339-343页。


@dees_stats:感谢您的回答。我尝试使用prcomp()并提供了所有变量as.numeric(); 结果看起来很合理。您能提供Jollife的页码吗?
安德烈(Andrej)

@Andrej我编辑了答案。该帖是从13.1节,第313页
deps_stats
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.