宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

在数据分析领域,冗余分析(redundancy analysis,简称RDA)和主成分分析(principal component analysis,简称PCA)是两种非常重要的多元统计分析方法。它们可以在多个变量之间建立关系模型,用于解决多元回归等问题。虽然它们的目标都是降维,但是它们的本质不同,提供的信息也是不同的。本文将从多个方面对这两种方法进行详细阐述。

一、基本原理

冗余分析通过寻找一个新的变量空间,将响应变量(也就是需要分析的因变量)与预测变量(自变量)之间的关系量化。该方法基于多重线性回归,结果是得到一组新的综合指标,可以表示自变量对因变量的综合影响,同时可以消除变量之间的相关性。冗余分析的主要目的是找到解释响应变量方差的最重要的预测变量。在这个过程中,我们可以看到每个变量对响应变量的解释程度。

## RDA代码示例
library("vegan")
data(dune)
RDA1 <- rda(dune ~ A1 + Management + Moisture + Use, data = dune)
summary(RDA1)

而主成分分析的目标是将原始的变量映射到一个新的低维度空间中,同时保留我们对原始数据的尽可能多的信息。在保证新变量之间不相关的前提下,我们可以减少数据的维度,同时仍然保留了数据中的大部分变异性。该分析通过提取数据的主要部分,并丢弃次要部分,保留了数据的总体趋势。

## PCA代码示例
library("FactoMineR")
data(iris)
PCA1 <- PCA(iris[,1:4], scale.unit = TRUE, graph = FALSE)
summary(PCA1)

二、变量解释程度

在冗余分析中,为了了解每个预测变量对响应变量的解释程度,我们可以查看每个自变量的贡献率(contribution rate)。贡献率是每个预测变量方差的比例,其对应的是响应变量方差的解释量。如果我们只关心对哪些预测变量的选择会更有意义,那么我们可以只查看它们的贡献率而不需要再考虑各变量之间的互相关性。

# 查看各自变量的贡献率
RDA1$CCA$varex[c(1:3)]

而在主成分分析中,我们可以通过查看方差解释比例来确定所选主成分数量的合理性。因为我们将主要信息捕捉到了前k个主成分中,因此我们可以计算前k个主成分方差的和占总方差的比例。这个比例越高,那么前k个主成分可以解释大部分的方差。

# 查看前两个主成分的方差解释比例
PCA1$eig[,2]

三、响应变量的解释

在冗余分析中,我们可以利用响应变量与自变量之间的关系来解释响应变量。通过一个新的变量空间,我们可以看到每个自变量的影响程度,进而确定如何优化预测模型。例如,在生态学领域,树木的生长情况通常与环境因素有关。在 RDA 分析中,我们可以查看不同因素对树木丰富度的影响,以期制定更好的生态保护计划。

# 查看响应变量为居民数,自变量为年龄和收入的 RDA 结果
data("USArrests")
RDA2 <- rda(USArrests[, 1:2], USArrests[, 3:4])
summary(RDA2)

而在主成分分析中,响应变量的解释可能并不是主要目的。其他指标可能比较有用,例如各原始变量的相关性和变异性,变量的质量如何等。这对于探究数据结构和异常点等问题是非常有用的。

# 查看所有变量在前两个主成分上的贡献度大小
PCA1$var$contrib[,1:2]

四、对异常值的反应

即使我们在输入数据之前我们就可以知道,RDA 很容易受到异常值的影响,特别是数据集中存在一些极端强的观测值时。这是因为多重线性回归对异常值非常敏感,难以有效地解释多重共线性,从而导致预测的不准确性。因此,在进行多元回归之前,应该先检查数据集中是否存在异常值,以保证模型的准确性。

# 利用 RDA 分析实现对异常值的检测
library("rrcov")
data("stackloss")
rda(stack.loss ~ stack.x + stack.y + stack.z, data = stackloss, method = "t3", scale=TRUE)

而在主成分分析中,异常值则会被放缩到主成分的底层,对主成分的贡献值影响不会太大。但是,存在一些异常值,可能会对 PCA 结果的解释能力产生重大影响,因此在进行 PCA 分析之前应该检查数据集中是否存在异常值。

# 利用 PCA 分析实现对异常值的检测
library("chemometrics")
data("spectra")
PCA2 <- pca(clean(spectra), nv = 5, pcalgorithm = "nipals")
biplot(PCA2, plot.type="single", main = "")

五、样本数要求

在冗余分析中,样本数量通常应该比自变量数量大。这是为了保证模型的准确性和可靠性,因为在低样本量情况下,参数估计可能是不准确的。此外,为保证模型的精度,每个自变量最好有至少10个样本。

而在主成分分析中,样本数量一般要比变量数量大10倍以上。这一点十分重要,因为通过减少映射到主成分的变量数量,我们可以减少引入不必要信息的可能性,并提高最终模型的准确性。在实践中,我们可以通过协方差矩阵或相关矩阵的特征值来估算数据集的最小样本量。

# 在样本数量较少的情况下进行 RDA 分析
data("towsend")
RDA3 <- rda(towsend$env ~ ., data = towsend, scale = TRUE)
summary(RDA3)
# 在样本数量较多的情况下进行 PCA 分析
library("psych")
data("bfi")
PCA3 <- principal(bfi[1:1000,1:20], nfactors=6, rotate="varimax")
summary(PCA3)

结论

本文从基本原理、变量解释程度、响应变量的解释、对异常值的反应和样本数要求等多个方面对冗余分析和主成分分析进行了比较。总体来说,两种方法虽然都可以用于多元统计分析,但是它们的目标和方法可以根据具体的应用场景进行选择。