主成分分析(principle component analysis,PCA)是常用的线性数据降维方法,通过某种线性投影,将高维的数据映射到低维的空间中,并期望在映射到的低维空间中包含的信息量最大,即使用较少的数据维度来代表(保留)较多原始数据的特性。话句话说,就是把多个变量化成少数几个主成分的方法,这些主成分能够反映原始变量的大部分信息,为原始变量的线性组合。
R中作为主成分分析最主要的函数是 princomp() 函数
princomp() 主成分分析 可以从相关阵或者从协方差阵做主成分分析
summary() 提取主成分信息
loadings() 显示主成分分析或因子分析中载荷的内容
predict() 预测主成分的值
screeplot() 画出主成分的碎石图
plot() 画出数据关于主成分的散点图和原坐标在主成分下的方向
##设置工作路径
setwd("E:/R practice result")
##查看工作路径
getwd()
##读取数据
data <- read.csv("E:/R practice file/students_data.csv",header = T)
##进行主成分分析
data.pr <- princomp(data,cor = T) ##cor=T的意思是用相关系数进行主成分分析
##观察主成分的详细情况
summary(data.pr,loadings = T)
##计算得到各个样本主成分的数据
pca_data <- predict(data.pr)
##将文件写出,进行本地保存
write.table(pca_data,file = "E:/R practice result/pca_data.txt",row.names = T,col.names = T,quote = F,sep = "\t")
#画出主成分碎石图,主成分方差占总体方差的情况,辅助判断主成分提取个数。当折线由陡峭突然变得平稳时,陡峭到平稳对应的主成分个数即为参考提取主成分个数。X轴表示可能的因子数。在整个曲线下降的过程中,理论上会存在一点,该点处曲线出现明显的弯折,该点对应的X轴的数字即应保留的因子数。
screeplot(data.pr,type="lines")
#添加划分成分的参考线
abline (v = 2 , col = "#900021", lwd = 2, lty = 2)
#计算前两个主成分Comp1和Comp2得分,保存到data.pr2
data_pr2 <- data.pr$score[,1:2] 或者data_pr2 <- pca_data[,1:2]
write.table(data_pr2,file = "E:/R practice result/data_pr2.txt",row.names = F,col.names = T,quote = F,sep = "\t")
plot(data_pr2, main = "after PCA") 或者plot(pca_data[,1:2])
示例数据来自于R语言包 poppr ,csv文件存储,数据格式如下
使用到的是R语言的 poppr 包中的 read.genalex() 函数
poppr 第一次使用需要先安装
读入数据
读入数据直接是 genclone object,使用函数 genclone2genind() 将其转换成genind object,接下来使用 ade4 包中的 dudi.pca() 函数做主成分分析
主成分的结果存储在li中
还是认为的分个组,然后做散点图
明天的推文再继续这部分内容吧!
#导入你的矩阵,我的矩阵是包含列名称和行名称的exp = read.table('exp.txt', header = TRUE ,sep = '\t' )
require(graphics)#调用PCA画图的包
#做PCA时,不要行名称所以从第二列开始
PCA1 = princomp(exp[,2:(dim(exp)[2]-1)] )
summary(PCA1)
pc = loadings(PCA1)
Comp.1 = PCA1$loadings[,1]
Comp.2 = PCA1$loadings[,2]
plot(Comp.1,Comp.2 ,col = c('red','red','red','green','green','green','blue','blue','blue'))
#此数据分为三组,所以我画了不同的颜色。
#这是做PCA以及画图的简单流程,供参考!