时间: 2018-08-09
教程:知乎:Learn R | 数据降维之主成分分析(上)、Learn R | 数据降维之主成分分析(下) 作者:Jason
数据来源:《应用多元统计分析》 王学民 编著 P228-P230 习题7.6、7.7
主成分分析
1.主成分分析
使用psych包对数据进行主成分分析。
其中,principal函数进行主成分分析,fa.parallel函数生成碎石图。
principal(r, nfactors = 1, residuals = FALSE, rotate = “varimax”,
n.obs = NA, covar = FALSE, scores = TRUE,missing = FALSE, impute =
“median”, oblique.scores=TRUE, method = “regression”,…)
r:指定输入的数据,如果输入的是原始数据,R将自动计算其相关系数矩阵 nfactors:指定主成分个数
residuals:是否显示主成分模型的残差,默认不显示 rotate:指定模型旋转的方法,默认为最大方差法
n.obs:如果输入的数据是相关系数矩阵,则必须指定观测样本量
covar:逻辑参数,如果输入数据为原始数据或方阵(如协方差阵),R将其转为相关系数矩阵 scores:是否计算主成分得分
missing:缺失值处理方式,如果scores为TRUE,且missing也为TRUE,缺失值将被中位数或均值替代
impute:指定缺失值的替代方式,默认为中位数替代; method:指定主成分得分的计算方法,默认使用回归方法计算。
(摘自教程)
如:
导入数据:
> library(openxlsx)
> data1 <- read.xlsx("E:\\Learning_R\\主成分分析\\exec7.6.xlsx", rowNames = TRUE, rows = 1:51, cols = 1:8)
> head(data1)
杀人罪 强奸罪 抢劫罪 伤害罪 夜盗罪 盗窃罪 汽车犯罪
Alabama 14.2 25 97 278 1136 1882 281
Alaska 10.8 52 97 284 1332 3370 753
Arizona 9.5 34 138 312 2346 4467 440
Arkansas 8.8 28 83 203 973 1862 183
California 11.5 49 287 358 2139 3500 664
Colorado 6.3 42 171 293 1935 3903 477
生成碎石图:
> library(psych)
> fa.parallel(data1, fa = 'pc', n.iter = 100, show.legend = FALSE)
Parallel analysis suggests that the number of factors = NA and the number of components = 1
从图中可以看出,保留两个主成分即可。
主成分分析:
> data1_pca <- principal(data1, nfactors = 2, rotate = "none")
> data1_pca
Principal Components Analysis
Call: principal(r = data1, nfactors = 2, rotate = "none")
Standardized loadings (pattern matrix) based upon correlation matrix
PC1 PC2 h2 u2 com
杀人罪 0.61 -0.70 0.86 0.14 2.0
强奸罪 0.88 -0.19 0.80 0.20 1.1
抢劫罪 0.81 0.05 0.65 0.35 1.0
伤害罪 0.80 -0.38