R语言主成分分析及绘图--不涉及因子旋转

实验过程中是用SPSS进行的分析,后用R和matlab写了一遍,发现由于前期对数据进行了标准化,在SPSS中操作时它默认会标准化,导致最后变量之间的差异减小,贡献差异不大。然而数据来源和数据结果都是正确的,已经过反复确认。具体的原R代码文件名称是PCA_R.R,具体的保存路径是G:\9-temp\data\docu\HSIandChrichton

library("FactoMineR")#import package
library("factoextra")

# read original data,620 number
explore <- read.csv("G://9-temp//data//docu//HSIandChrichton//PCA_explore2.csv",header=TRUE)
head(explore)

# derive population categories
explore.active1 <- explore[,c('Ecological.economic.worker','Young.children','Illiterate','The.disabled','Senior','Population.density')]
head(explore.active1[,1:6],4)

#PCA analysis, use standadiztion
res.pca <-PCA(explore.active1, scale.unit =TRUE, ncp = 3, graph = FALSE)
var <- get_pca_var(res.pca)
var
# create sceeplot
fviz_screeplot(res.pca)

#loading factor
fviz_pca_var(res.pca, col.var = "black")

#contribution
fviz_pca_var(res.pca, alpha.var = "contrib")

# Visualize variable with cos2 >= 0.99//quality ? did not use cos2
fviz_pca_var(res.pca, select.var = list(cos2 = 0.3), repel=T, col.var = "cos2", geom.var = c("arrow", "text") )

# Top 5 active variables with the highest cos2
fviz_pca_var(res.pca, select.var= list(cos2 = 5), repel=T, col.var = "contrib")

# Select by names
name <- list(name = c("Ecological.economic.worker", "Young.children", "Illiterate","The.disabled","Senior"))
fviz_pca_var(res.pca, select.var = name)

#以相关分析矩阵的形式绘制loading factor表格
library("corrplot")
corrplot(var$cor, is.corr=FALSE,tl.cex=1,addCoef.col='grey',tl.srt = 45)

#tl.cex:指定文本标签的大小
#tl.col:指定文本标签的颜色
#addCoef.col:为相关系数添加颜色

#读取另外一组变量
explore.active2 <- explore[,c('Proximity.to.water.bodies','fan_living_zscore','roadlength_zscore','evi_zscore','fan_terrain','Income')]
#rename
colnames(explore.active2)=c('proximity.to.water.bodies','living status','road density','proximity.to.vegetation','topography','income')
head(explore.active2)
#进行PCA分析,同样做标准化处理
res.pca2 <-PCA(explore.active2, scale.unit =TRUE, ncp = 2, graph = FALSE)
#碎石图
fviz_screeplot(res.pca2)
#loading factor
fviz_pca_var(res.pca2, col.var = "black")


###plotting 尝试画组化图,下面的代码都能够跑出来,但是效果一般,最后用的是photoshop
require(ggplot2)
require(grid)
chart1 <- fviz_screeplot(res.pca,title="population")
chart2 <- fviz_pca_var(res.pca, col.var ="black")
chart3 <- fviz_screeplot(res.pca2)
chart4 <- fviz_pca_var(res.pca2, col.var="black")
grid.newpage()
grid.newpage()  ###新建图表版面
pushViewport(viewport(layout = grid.layout(2,2))) ####将版面分成2*2矩阵
vplayout <- function(x,y){viewport(layout.pos.row = x, layout.pos.col = y)}

###定义图表的布局规则,也就是指定画布的行显示图表的X轴,列显示图表的Y轴。
print(chart1, vp = vplayout(1,1))   ###将(1,1)的位置画图chart1
print(chart2, vp = vplayout(1,2))     ###将(2,1)的位置画图chart2          
print(chart3 , vp = vplayout(2,1))    ###将(2,2)的位置画图chart3
print(chart4 , vp = vplayout(2,2))    ###将(2,2)的位置画图chart4

按代码中的绘图顺序,得到的图片结果如下(保留视觉印象)

R语言主成分分析及绘图--不涉及因子旋转

 

 

 

 

 

主要的参考来源:https://mp.weixin.qq.com/s/raQpNx4RwlzozWt_wRArqA

另外 知乎提供的R语言教程中会提供主成分旋转相关的代码,但用到的包不同,自己在实验内就不涉及了。https://zhuanlan.zhihu.com/p/26305845

图表排版的来源代码之一:https://zhuanlan.zhihu.com/p/27238703  该教程中的第二种方法multiplot函数中涉及到的Rmisc包安装不了,因此第二种方法看似更为简单,实际用不上。

Phtoshop上的图片组合有自带的教程

上一篇:机器学习与材料计算的个人看法


下一篇:机器学习实战基础(二十二):sklearn中的降维算法PCA和SVD(三) PCA与SVD 之 重要参数n_components