一、princomp介绍
主成分分析(Principal Component Analysis, PCA),是一种常见的数据降维算法,旨在从原始高维数据中提取出能够表达数据最大方差的正交低维向量,称为主成分。PCA算法可以应用于多种任务,比如数据的降维、可视化、压缩等。princomp()函数,是R语言里面PCA的实现函数之一,封装在stats包里面。
二、princomp对数据的整理与标准化
数据能够反映现象,但是不同来源、规模的数据很难直接进行比较和分析,因此前期对数据进行整理和标准化至关重要。princomp可以通过scale参数对数据进行标准化,具体实现如下:
data <- read.csv("data.csv") princomp_data <- princomp(data, scale = TRUE)
在上述代码中,scale = TRUE 会对data的每一列进行标准化。标准化值的计算方法为:(x-mean)/sd,其中x为每个数据,mean为数据的均值,sd为数据的标准差。标准化有助于消除数据大小和单位的影响,使不同纬度之间的协方差矩阵更加可靠。
三、princomp对主成分的解释与可视化
主成分可以是原始数据的线性组合,组成的新向量会按照方差大小排序。我们可以通过summary()函数来了解princomp返回值中的各种信息,比如主成分的方差解释比和累计比例、主成分系数、贡献度等等。具体实现如下:
data <- read.csv("data.csv") result <- princomp(data, scale = TRUE) summary(result)
上述代码将会输出如下信息:
Importance of components: Comp.1 Comp.2 Comp.3 Comp.4 Standard deviation 2.0226872 0.64835796 0.503854227 0.2564323 Proportion of Variance 0.7833519 0.10267857 0.070098786 0.0438708 Cumulative Proportion 0.7833519 0.88603047 0.956129255 1.0000000
其中,Standard deviation表示每个主成分对应的标准差,Proportion of Variance 表示各主成分所能解释的总方差比例,Cumulative Proportion表示所累计的可解释方差贡献比例。由于princomp中方差解释比的计算方式是除以(n-1),所以Proportion of Variance与Cumulative Proportion相加等于1,即所有方差均被解释。
我们还可以通过biplot()函数,绘制各个主成分的系数与主成分之间的二维图形,方便可视化主成分之间的联系。具体实现如下:
data <- read.csv("data.csv") result <- princomp(data, scale = TRUE) biplot(result)
四、princomp的应用
princomp的应用范围很广,下面列举几个实际例子: 1、基于亚洲股市指数,通过PCA算法提取主成分,得到的三个主成分能够解释原始数据中的40%、23%和19%的方差。通过对主成分的系数进行解释,可以发现第一个主成分与股市的整体走势、公司市场及其竞争状况等因素有关,第二个主成分与公司经营状况和盈利稳定性相关,第三个主成分与政治和经济因素相关。 2、基于国家教育水平与社会发展情况,通过PCA算法提取主成分,可以发现经济发达的国家教育水平普遍较高,政治稳定的国家教育资源更加平均,社会保障完善的国家教育水平更加均衡。 3、基于文本数据,比如新闻、社交媒体等,通过词频矩阵的PCA降维,可以发现不同主成分对应的词语有着不同的主题。我们可以将重复出现在同一个主成分中的词语提取出来,形成一个方便阅读的主题词表,方便我们了解文本信息中隐藏的变量和趋势。
五、princomp vs. princomp2
除了princomp()函数,R语言中还有princomp2()、prcomp()、PCA()等PCA实现函数,下面进行简单介绍: 1、princomp()函数是最常用的PCA实现函数之一,基于SVD分解,不适用于大样本数据集。 2、princomp2()函数使用迭代方法进行PCA,相较于princomp(),适合处理大型矩阵,但是计算速度较慢。 3、prcomp()函数,同样基于SVD分解,但是比princomp()更加灵活,比如可以通过center和scale参数来进行中心化和标准化。 4、PCA()函数是在psych包中的PCA实现函数,有较为完整的PCA实现,比princomp()更加全面且易于使用,但是比princomp()计算速度慢一些。
六、总结
princomp是R语言中实现PCA的常用函数之一,通过标准化、主成分解释、可视化、应用、对比等多个方面来阐述,可以更好的了解PCA算法的基本实现和应用。在实际应用中,应根据具体数据的特征、数据量选择不同的PCA实现函数,以获得最优的降维效果和计算效率。