您的位置:

R语言主成分分析详细解析

一、主成分分析介绍

主成分分析是一种常用的数据降维算法,它可以把多个相关性很高的指标(变量)转化为少数几个无关的主成分。这些主成分之间两两无关,且能够解释原始指标的大部分信息。在实际应用中,主成分分析具有很高的实用价值,比如可以用于降低数据的复杂度、提高数据分析的效率、发现数据的隐藏规律等。

R语言是一种功能强大的开源计算机语言,人性化的语法和丰富的统计分析函数库使其成为数据分析师最喜欢的工具之一。R语言主成分分析函数prcomp()和princomp()可以实现主成分分析,下面将详细介绍其使用方法。

二、prcomp()函数详解

prcomp()函数可以计算带有奇异值分解的主成分分析,并返回与原始数据相同规模的主成分分析数据集。下面我们以iris数据集为例,来说明如何使用prcomp()函数实现主成分分析:

data(iris)
iris_pca <- prcomp(iris[, 1:4], center = TRUE, scale. = TRUE)
summary(iris_pca)

上述代码中,我们使用data()函数导入R语言内置的iris数据集,然后使用prcomp()函数对前4列数据进行主成分分析。其中center=TRUE表示将每个变量的均值中心化为0,scale.=TRUE表示给每个变量进行标准化处理。到这里,我们已经得到了主成分分析结果,接下来用summary()函数来查看主成分分析结果的摘要:

Importance of components:
                          PC1    PC2     PC3     PC4
Standard deviation     1.7084 0.9560 0.38309 0.14393
Proportion of Variance 0.7296 0.2285 0.03669 0.00518
Cumulative Proportion  0.7296 0.9581 0.99480 1.00000

从结果可以看出,第一主成分(PC1)可以解释原始数据集中约73%的方差,第二主成分(PC2)可以解释约23%的方差,第三主成分(PC3)仅能解释约3.7%的方差,而第四主成分(PC4)的解释能力更加弱,只能解释约0.5%的方差。因此,在实际应用中一般只考虑前k个主成分,其中k是自己事先设定的,可以根据累计贡献率和业务需求进行调整。

三、princomp()函数详解

princomp()函数和prcomp()函数在功能上是相同的,都可以实现主成分分析。但两者的区别在于princomp()函数计算的是未经过奇异值分解的主成分分析,而且每个主成分分析的方差总和为n-1,而不是等于样本个数。下面我们以iris数据集为例,使用princomp()函数进行主成分分析:

data(iris)
iris_pca <- princomp(iris[, 1:4], cor = TRUE, scores = TRUE)
summary(iris_pca)

此处将参数cor设置为TRUE,表示使用相关系数矩阵进行主成分分析。scores参数设置为TRUE,表示输出主成分分析后的主成分得分矩阵。运行后的结果如下:

Importance of components:
                         Comp.1   Comp.2   Comp.3   Comp.4
Standard deviation     1.70836 0.956049 0.383088 0.143926
Proportion of Variance 0.72962 0.228507 0.036247 0.005618
Cumulative Proportion  0.72962 0.958127 0.994374 1.000000

Loadings:
             Comp.1 Comp.2 Comp.3 Comp.4
Sepal.Length  0.521 -0.377  0.719  0.261
Sepal.Width  -0.269 -0.923 -0.244 -0.124
Petal.Length  0.580 -0.024 -0.142 -0.801
Petal.Width   0.565 -0.069 -0.634  0.523

               Comp.1   Comp.2   Comp.3   Comp.4
Sepal.Length  0.89767 -0.39874 -0.07856  0.04597
Sepal.Width  -0.38624 -0.23632 -0.27045 -0.85970
Petal.Length  0.00000  0.27492 -0.92792  0.24178
Petal.Width   0.00000  0.85391  0.24178  0.46168

从结果可以看出,princomp()函数计算出的主成分结果和prcomp()函数基本一致,仅在方差和主成分得分的计算方式上略有差异。

四、主成分分析可视化

主成分分析不仅可以用于降维和发现隐藏规律,还可以用于可视化。我们可以将主成分分析后的前两个主成分作为x轴和y轴来画出散点图,观察数据的分布情况。下面我们以iris数据集为例,来说明如何实现主成分分析的可视化:

data(iris)
iris_pca <- prcomp(iris[, 1:4], center = TRUE, scale. = TRUE)
plot(iris_pca$x[,1:2], col = iris$Species)
legend("topright", levels(iris$Species), col=c(1:3), pch=1)

在上述代码中,我们先使用prcomp()函数对iris数据集进行主成分分析,并将前两个主成分得分作为x轴和y轴。然后使用plot()函数画出散点图,其中col参数指定了花的类型(样本数据),legend()函数用于添加标注。运行上述代码,我们可以得到如图所示的散点图:

五、总结

本文主要介绍了R语言主成分分析prcomp()和princomp()函数的使用方法,并且以iris数据集为例详细解析了其用法,包括主成分分析结果摘要、主成分分析的可视化等,希望对广大数据分析爱好者有所帮助。