利用R语言做主成分分析(PCA)自学笔记

成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。又称主分量分析。当在研究中, 经常会遇到多变量的情况。那么问题来了,如果在分析数据的时候,每个变量都去加以分析那必定会使我们的数据分析变得很困难,而且加大了分析难度和工作量。但是如果贸然的删除变量的话,必定会影响结果的有效性和准确性。那遇到这种问题我们该怎么办呢??PCA就派上用场了,一般我们取第一主成分(PC1)第二主成分(PC2)就能解决问题了,有必要的时候可以加上PC3。

还有,如果研究对象是生物群体的话,会遇到具有群体结构的情况,这样如果不考虑群体结构的话直接分析,结果会不准确或有效性不高,所以面对此类群体,首先要查看群体分层情况,看看两个群体或者多个群体之间是否存在群体分层。此时PCA会起到关键性作用,可以用来检测群体之间是否存在遗传差异和群体分层。

好了闲话少说,开始正经内容。

>setwd("C:/Users/gaom/Desktop")#打开文件所在路径,并将文件所在目录作为工作目录。

>data<-read.table(file= "test_data.txt",header= T,sep = "\t")#读取数据。

用r语言做pca分析有连个函数可以调用,princomp函数可以从相关矩阵或者从协方差矩阵做主成分分析;prcomp 函数可以从奇异值分解的算法做主成分分析。上述两个函数都可以做主成分分析,不过相对的函数,需要的数据格式也不相同。

其中R-mode简单来说就是数据数量要大于变量(因素)数量;而Q-mode正与其相反,简单来讲就是变量数量要多余数据数量。

OK,了解了上述函数,接着往下进行(首先介绍princomp函数)

>pca=princomp(data,cor=TRUE)       #调用函数--princomp,#当cor=TRUE表示用样本的相关矩阵R做主成分分析当cor=FALSE表示用样本的协方差阵S做主成分分析。

>summary(pca)

>pc=loadings(pca)

>PCA1 = pca$loadings[,1]

>PCA2 = pca$loadings[,2]

>PCA3 = pca$loadings[,3]

接着再介绍一下(prcomp函数的用法)

>data1=t(as.matrix(data))  #由于两个函数对数据的模型不同所以需要转置一下。

>pca =prcomp(data1, scale= TRUE)    #scale= TRUE对数据进行标准化

>summary(pca)

PCA1=pca$x[,1]

PCA2=pca$x[,2]

PCA3=pca$x[,3]

上述两个函数都能够得到pca1,pca2,和pca3。接下来画图

首先可以利用pca1和pca2画出二维的图。

>plot(PCA1,PCA2)

>group = factor(c(rep("HIGH",500 ), rep("LOW",400)))    #对群体进行分组,我这里就是high组有500个体,low组有400个体。

>colour_group<-rainbow(length(unique(group)))

>colour<-colour_group[as.numeric(factor(group))]

>plot(PCA1,PCA2,col = colour ,pch = c(20,20)[group],cex=2,main="PCA-PLOT")

title("test")  #这样就完成了二维pca的图,可以自己调整颜色和形状。

还可以用ggplot2这个r语言的package来画图,相对来讲ggplo2画出的图片要美观一些。

>library(ggplot2)

>group2<-data.frame(group)

>pca_reuslt<-as.data.frame(pca$x)

>pca_reuslt<-cbind(pca_reuslt,group2)

>p=ggplot(pca_reuslt)+geom_point(aes(x=pca_reuslt[,1],y=pca_reuslt[,2],color=pca_reuslt$group,shape= pca_reuslt$group),size=5)

>p<-p+theme(legend.title=element_blank())+labs(x="PCA1",y="PCA2")

>p

这样就画好了pca的分布图了,可以直观的看出群体之间的分层状况。

要是pca1,pca2,不足以满足需求,比如二维图不能分开某些群体,或者群体之间的分层不明显。就可以利用pca3,画出一个空间坐标轴,做出一个3d的图片,这3d图片可以利用plot3D这个package来画。

>library(plot3D)

>library(scatterplot3d)

>par(mar=c(5.1, 4.1, 4.1, 8.1), xpd=TRUE)

>scatterplot3d(pca_reuslt[,1:3],pch=20 ,color=colour,angle=45,main= "test_3D",cex.symbols= 2,mar=c(5.1, 4.1, 4.1, 8.1))

>legend("right",legend= group,col =colour,pch = 20,bg="white",xpd=TRUE,inset= -0.5)

这样3D的图片就画好了。3D图片不仅看起来更加直观而且能分开之前分层不明显的群体。

希望此篇自学笔记,能够给需要用r语言做pca的同志们带来一点点的帮助。以上的代码均为自己手打,可能会出现一些标点的错误,使用时注意。还有以上纯属自己的个人理解和看法,以及做法,如有不规范的或者错误的地方,望大神们指正。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容