在使用R语言计算dataframe的PCA时,principal
和prcomp
是两种不同的函数,它们的差异主要在于以下几个方面:
目录
基本介绍
principal
函数是psych包中的函数,而prcomp
函数是stats包中的函数。principal
函数可以进行因子分析和PCA分析,而prcomp
函数只能进行PCA分析。principal
函数默认使用最大方差法进行旋转,而prcomp
函数默认使用标准正交旋转。principal
函数可以输出更多的结果,如因子载荷矩阵、公共因子方差、特殊因子方差等,而prcomp
函数只输出主成分得分和主成分载荷矩阵。
# 加载数据
data <- read.csv("data.csv")
# 提取需要进行PCA分析的变量
vars <- c("var1", "var2", "var3")
df <- data[, vars]
# 进行PCA分析
pca <- prcomp(df, scale = TRUE)
# 输出主成分得分和主成分载荷矩阵
print(pca$x) # 主成分得分
print(pca$rotation) # 主成分载荷矩阵
主成分分析 PCA | Principal Components Analysis_pca主成分分析去噪-CSDN博客
差异原因:在使用R语言计算dataframe的PCA时,principal
和prcomp
函数分别计算的PCA得分存在差异,这是因为它们使用了不同的旋转方法。principal
函数使用varimax
旋转方法,而prcomp
函数使用的是默认的variance
旋转方法。要解决这个问题,可以在prcomp
函数中指定旋转方法为varimax
,这样就可以得到与principal
函数相同的PCA得分。
#使用prcomp函数计算PCA并指定旋转方法为varimax的代码示例
library(psych)
data <- read.csv("data.csv") # 读取数据
pca <- prcomp(data, center = TRUE, scale. = TRUE) # 计算PCA
pca_rotated <- varimax(pca$rotation) # 使用varimax旋转方法
pca_scores <- as.data.frame(pca$x %*% pca_rotated) # 计算PCA得分
#pca$x表示PCA的主成分得分,pca$rotation表示PCA的旋转矩阵,varimax函数用于进行旋转,as.data.frame函数用于将结果转换为数据框。
差异
R语言教程|带你搞清楚主成分分析(PCA)并完成分析 - 知乎 (zhihu.com)
#prcomp()函数
# scale. = TRUE表示分析前对数据进行归一化;
com1 <- prcomp(data[,1:4], center = TRUE,scale. = TRUE)
summary(com1)
#如果使用princomp()函数,需要先做归一化,princomp()函数并无数据标准化相关的参数。且默认使用covariance matrix,得到的结果与使用相关性矩阵有细微差异(如下);原因是根据相关系数公式可知,归一化后的相关性系数近乎等于协方差。
com2 <- princomp(dt,cor = T)
summary(com2)
com3 <- princomp(dt)
summary(com3)
注意,princomp()函数只适用于行数大于列数的矩阵(样本数量大于降维特征数量才能使用),否则会报错:Error in princomp.default(dt) : 'princomp' 只能在单位比变量多的情况下使用。