R语言作图之PCA作图和散点图.doc

返回 举报
资源描述
PCA分析和散点图 今天主要跟大家演示一下简单的PCA分析,并且以散点图的形式将结果展示出来。 首先在进行PCA分析之前,先跟大家稍微讨论下什么是PCA分析。PCA分析又叫主成分分析,其实从字面上来理解我们可以发现它其实是和样品分组相关的。 举个简单的例子,我们观察了某种植物的株高、叶片大小、果实大小等等多种性状,并记录每种性状对应的数值。这时候我们想看看根据这些性状信息看看我们观察的样本是否明显的分组现象。每一种性状相当于一个维度。利用PCA分析可以将结果投影到一个低维的向量空间(具体计算就不详述了)。类似的比如我们多个样本的表达谱数据,每个基因在各个样品的表达情况就可以算作一个维度。如果大家对PCA算法感兴趣的话,可以自行百度,在这里就不进行太多的描述了。毕竟今天主要是教大家怎么利用R进行PCA分析和结果展示。 还是第一步,我们先准备好我们用来分析的数据。 setwd("C:/Users/gaom/Desktop")#打开文件所在路径,并将文件所在目录作为工作目录 data<-read.table(file = "test_data.txt",header = T,sep = "\t")#读取数据,并将首行作为列名 dim(data) ## [1] 2999 13 head(data) ## ID_REF T01 T02 T03 T04 T05 T06 ## 1 1007_s_at 10.198586 11.805676 10.867953 11.763660 12.072232 12.108312 ## 2 1053_at 9.594074 8.713108 9.247096 9.433265 9.092329 9.005518 ## 3 117_at 8.581763 8.603680 8.804425 8.661700 8.634979 8.606976 ## 4 121_at 12.022315 12.655329 12.627334 12.791390 12.961761 12.885307 ## 5 1255_g_at 7.228569 7.214600 7.237131 7.293417 7.276799 7.268233 ## 6 1294_at 8.828487 9.380277 9.297989 8.858985 8.995772 9.126825 ## T07 T08 T09 T10 T11 T12 ## 1 10.646868 10.852744 10.675898 11.137663 10.796737 11.102408 ## 2 9.087681 9.027208 8.965283 8.958309 9.275010 8.940965 ## 3 8.625838 8.577244 8.646751 8.625843 8.625164 8.522129 ## 4 13.402044 13.240126 13.088883 13.234099 13.382903 13.472223 ## 5 7.197440 7.262662 7.289796 7.232249 7.202364 7.306229 ## 6 9.002385 9.003561 9.006278 9.006721 9.018183 9.164313 上述数据为从GEO数据库随意找的基因表达。其中第一列为基因探针号,后续几列则为T01到T12的12个样品对应的表达量数据,每三个样品为一组。因为数据是拼凑的,所以这里不关注探针具体信息了。 准备好数据之后我们就开始进行PCA计算了。其实代码非常简单。 pca<- prcomp(t(data[,-1]), scale=T) head(pca$x) ## PC1 PC2 PC3 PC4 PC5 PC6 ## T01 -43.457435 -44.950031 8.305571 3.210563 -7.4280481 14.818150 ## T02 42.067255 -19.142248 -25.574041 21.120294 -5.7930990 14.702922 ## T03 -2.123455 -21.512488 -11.192474 17.583006 15.2149034 -34.730308 ## T04 8.166077 -4.774814 22.837578 -11.364128 8.4021038 -6.921738 ## T05 18.214073 -5.836807 18.522768 -10.941626 -0.6183613 -5.548845 ## T06 27.219529 -5.519328 26.649872 -11.054961 -4.1480413 5.097715 ## PC7 PC8 PC9 PC10 PC11 PC12 ## T01 -1.966342 9.2181269 -1.520882 -1.060835 3.048498 2.731227e-13 ## T02 5.832197 8.9793018 9.386187 1.668761 1.705474 2.674666e-13 ## T03 -5.168168 -9.7483411 -11.570320 2.618203 -4.221456 2.738955e-13 ## T04 27.782986 7.5829007 9.726761 -3.391763 -21.900485 2.730871e-13 ## T05 7.039535 -8.9173716 -2.239005 -17.514433 29.700906 2.736544e-13 ## T06 -30.026232 -0.8253129 -5.207037 12.349414 -8.900676 2.681674e-13 summary(pca) ## Importance of components: ## PC1 PC2 PC3 PC4 PC5 PC6 ## Standard deviation 21.9980 21.7992 18.5932 16.67518 16.1346 15.16897 ## Proportion of Variance 0.1614 0.1585 0.1153 0.09272 0.0868 0.07672 ## Cumulative Proportion 0.1614 0.3198 0.4351 0.52780 0.6146 0.69133 ## PC7 PC8 PC9 PC10 PC11 ## Standard deviation 14.48695 14.01978 13.4814 13.09112 12.8896 ## Proportion of Variance 0.06998 0.06554 0.0606 0.05714 0.0554 ## Cumulative Proportion 0.76131 0.82685 0.8875 0.94460 1.0000 ## PC12 ## Standard deviation 2.859e-13 ## Proportion of Variance 0.000e+00 ## Cumulative Proportion 1.000e+00 上述数据中,pca$x就是后面我们画pca图要用的数据。而在summary(pca)中我们看到的Proportion of Variance就是各个主成分的方差占所有方差的比值,即对应的贡献率。而Cumulative Proportion则对应的百分比累积值。从上述结果看这组数据pca结果并不是很好,所以应该肯定会有一些分组的结果不太好。不过我们今天主要是展示结果,就不在意这些细节了。 做完上述的计算,下面就进入我们的结果展示阶段。 首先用基本画图函数展示。 plot(pca$x[,1:2] ) group <- factor(c(rep("A1", 3), rep("A2", 3),rep("B1", 3),rep("B2", 3)))#这里我们添加分组信息 colour_group<-rainbow(length(unique(group)))#利用rainbow函数选择颜色 colour<-colour_group[as.numeric(factor(group))]#创建颜色向量 colour ## [1] "#FF0000FF" "#FF0000FF" "#FF0000FF" "#80FF00FF" "#80FF00FF" ## [6] "#80FF00FF" "#00FFFFFF" "#00FFFFFF" "#00FFFFFF" "#8000FFFF" ## [11] "#8000FFFF" "#8000FFFF" plot(pca$x[,1:2],col = colour ,pch = c(21,22,23,24)[group])#在plot函数中我们把分组信息和颜色方案添加进去 legend("topleft", legend = levels(group),col = colour_group, pch = c(21,22,23,24))#添加legend title("test") 这是我们用基本函数对pca分析结果的展示。除此外我们也可以利用ggplot2包进行相同的图片绘制。示例如下: 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结果吧。 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)#设置位置为right后,可以用inset来移到legend位置。 除此之外,我们可以考虑把相同的组进行一个圈定,方便我们更好的观察结果。 library(ggfortify)#使用这个包时可能要注意R的版本,我刚开始用较老的版本就用不了这个包。 data2<-cbind(t(data[,-1]),group2) autoplot(pca,data = data2,colour = group,label = TRUE,frame = TRUE) 这次的数据只有12个样品,所以点太少了。如果点比较多的话,还可以在autoplot函数中加上frame.type = norm,这样就变成用椭圆形把分组的点圈起来了。 大家也可以通过ggfortity包的说明发现更多有趣的使用方法。
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
相关搜索

当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!