基于连续变量和二元变量混合的 PCA 和分量分数

机器算法验证 r 主成分分析
2022-03-21 09:09:21

我想在由混合类型变量(连续和二进制)组成的数据集上应用 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个回答

我认为因萨诺达是对的。我引用 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 快活。主成分分析。施普林格。第二版。2002. 第 339-343 页。