搜索
查看: 8029|回复: 12

表达量数据的归一化和聚类

[复制链接]

8

主题

55

帖子

348

积分

版主

Rank: 7Rank: 7Rank: 7

积分
348
发表于 2016-9-24 20:27:59 | 显示全部楼层 |阅读模式
1、因为软件得到的mRNA/miRNA的表达量不同样本高低不一致,那么该如何归一化多个样本的表达量数据或者一个样本的所有的表达量数据;2、如何对归一化后的数据计算距离矩阵,得到想要的聚类图谱(即常见的热图);

这是这两天的一个工作,主要工作就是R实现的,但是个人觉得需要去了解是如何做的~






上一篇:生信perl脚本求助
下一篇:simca-p 14.1 操作教程
我的微博:dulunar
回复

使用道具 举报

8

主题

55

帖子

348

积分

版主

Rank: 7Rank: 7Rank: 7

积分
348
 楼主| 发表于 2016-9-25 17:54:42 | 显示全部楼层
本帖最后由 dulunar 于 2016-9-25 19:43 编辑

这两天做了些这个分析,所以做一下笔记:
首先,数据的归一化,我们可以先看看数据:(数据随机编写的)


归一化的过程,应该也不能叫传统的归一化,而是缩放与定心,我们需要用到一个函数scale
Scaling and Centering of Matrix-like Objects, scale is generic function whose default method centers and/or scales the columns of a numeric matrix;
usage : scale(x, center = TRUE, scale = TRUE)

默认情况下:将一组数的每个数都减去这组数的平均值后再除以这组数的均方根。
并且针对的是columns;


R code:
[Shell] 纯文本查看 复制代码

setwd("C:/Users/dulunar/Desktop/WORK/miRNA")   ##set work path
r <- read.table("test.txt",header=T)   ##read table of expression data, have table header
row.names(r) <- r$NAME  ##set rowname
r1 <- r[,-1]   ##delete the first column 
r0<-data.matrix(r1)   ##convert data frame[size=15px] to numeric matrix[/size]
ra <- scale(r0,center = T, scale = T)   ##scaling and centering for per column data, normalization?
      

缩放与定心就是这样一个过程做完了,接下来是做的计算距离/相似度,两个函数:
dist/simil: Matrix Distance/Similarity Computation;   link
这里我们需要一个函数包  proxy()
R code:
[Shell] 纯文本查看 复制代码
library(proxy)           ##upload the proxy package for simil function
dr <- dist(as.matrix(t(ra)), method = "euclidean", diag = T, upper = T)        ##[size=13px]calculate the euclidean distance of columns, export all data [/size]
write.table(as.matrix(dr),"test.ed.txt")     ##export ED matrix data to test.ed.txt file
sr <- simil(as.matrix(t(ra)), method = "correlation", diag = T, upper = T)   ##[size=13px]calculate the correlation coefficient of columns, export all data [/size]
write.table(as.matrix(sr),"test.cc.txt")     ##export [size=13px]correlation coefficient[/size] matrix data to test.ed.txt file


接下来就是聚类和花热图:
这个地方我用的是pheatmap, 虽然我用过ggplot2,但是我还是推荐pheatmap话热图和聚类:
R code:
[Shell] 纯文本查看 复制代码
library(pheatmap)
breaks1 <- seq(-10, 10, by = 0.2)   ##sets the minimum (0), the maximum (15), and the increasing steps (+1) for the color scale
breaks2 <- seq(-10,10,length=100)
bk3 = unique(c(seq(-2,0.98, length=50), seq(0.98,1, 50), seq(1, 4, length=50))) 
colors = colorRampPalette(rev(c("#D73027", "#FC8D59", "#FEE090", "#FFFFBF", "#E0F3F8", "#91BFDB", "#4575B4")))(length(breaks1))
p1 <- pheatmap(ra, main = "heatmap name", show_rownames=F,  cluster_rows=T, cluster_cols=T, clustering_method = "complete", clustering_distance_cols = "euclidean", clustering_distance_rows = "euclidean", fontsize = 16, fontsize_col = 16, cellwidth = 24, cellheight = 2, breaks = breaks1, color = colors)                                            ##use scale data for drawing heatmap
p2 <- pheatmap(r0, main = "heatmap name", show_rownames=F, scale = "column", cluster_rows=T, cluster_cols=T, clustering_method = "complete", clustering_distance_cols = "euclidean", clustering_distance_rows = "euclidean", fontsize = 16, fontsize_col = 16, cellwidth = 24, cellheight = 2, breaks = breaks1, color = colors)                  ##pheatmap can scale the data and don't need scale data first, the darwing picture


图我就不附上了,大家试验试验代码如何!!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我的微博:dulunar
回复 支持 1 反对 0

使用道具 举报

0

主题

6

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
QQ
发表于 2016-11-15 09:14:07 | 显示全部楼层
刚入生信,都不太懂,谢谢楼主关心。
回复 支持 1 反对 0

使用道具 举报

8

主题

55

帖子

348

积分

版主

Rank: 7Rank: 7Rank: 7

积分
348
 楼主| 发表于 2016-10-25 11:59:22 | 显示全部楼层
另外一个很不错的heatmap图画图包:WHeatmap

WHeatmap designs a set of languages and a layer system that allows arbitrary positioning of heatmaps programmatically.

It makes plotting complex heatmaps using plain English such as TopOf, RightOf and BottomLeftOf etc.

链接:https://github.com/zwdzwd/wheatmap
我的微博:dulunar
回复 支持 1 反对 0

使用道具 举报

8

主题

55

帖子

348

积分

版主

Rank: 7Rank: 7Rank: 7

积分
348
 楼主| 发表于 2016-9-26 11:35:09 | 显示全部楼层
我的微博:dulunar
回复 支持 1 反对 0

使用道具 举报

0

主题

3

帖子

47

积分

新手上路

Rank: 1

积分
47
发表于 2016-11-7 09:25:21 | 显示全部楼层
版主,我觉得,在你这个数据中,只需要对行进行归一化就可以了。每列是一个样本中不同mirna的表达量,本来就应该存在差异,所以我觉得不需要归一化。不知道对不对。
还有,聚类不是有现成的包吗?如cluster之类的,版主这是自己把聚类所需要的每一步都自己做了一遍吗?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
QQ
发表于 2016-11-7 17:13:11 | 显示全部楼层
不太懂。
回复

使用道具 举报

8

主题

55

帖子

348

积分

版主

Rank: 7Rank: 7Rank: 7

积分
348
 楼主| 发表于 2016-11-10 15:12:25 | 显示全部楼层
Huffy 发表于 2016-11-7 09:25
版主,我觉得,在你这个数据中,只需要对行进行归一化就可以了。每列是一个样本中不同mirna的表达量,本来 ...

这个还是需要归一化的,因为我的这个数据随便拿出来的,你会觉得不需要,但是做差异分析的时候是需要做归一化的;

聚类的话其实是R里面有集成的聚类方法,可以自己选择!
我的微博:dulunar
回复 支持 反对

使用道具 举报

8

主题

55

帖子

348

积分

版主

Rank: 7Rank: 7Rank: 7

积分
348
 楼主| 发表于 2016-11-10 15:12:31 | 显示全部楼层

那个地方?
我的微博:dulunar
回复 支持 反对

使用道具 举报

0

主题

9

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2017-5-21 21:11:15 | 显示全部楼层
limma 可以做这个吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-10-22 22:58 , Processed in 0.074925 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.