使用R语言进行样本相关性、聚类分析

1.导入三张表(表达矩阵、样本信息表、基因信息表)

1.1 表达矩阵

都是有两种导入方法,这里只交代代码导入

read.table("path/to/you/genes.TMM.EXPR.matrix", header = T, row.names = 1)
#header = T表示存在表头,row.names = 1表示以第1行作为表头

1.2 样本信息表

awk -F "_" '{print $0"\t"$1"\t"$2}' name.lst > sample_info.txt
#awk命令生成样品信息表
sample_info <- read.delim("path/to/your/sample_info.txt")
#read.delim导入样本信息表

需要注意的是,样本信息表中的行名一定一定要与表达矩阵中的列名完全一致,否则在PCA分析时就会报错:Error in pca(gene_exp, metadata = sample_info, removeVar = 0.1) :
'colnames(mat)' is not identical to 'rownames(metadata)'

1.3 基因信息表

图形界面导入
import dataset\Rightarrowfrom text(readr)\RightarrowBrowse\RightarrowFirst row as Names(F)\RightarrowDelimiter(Tab)\Rightarrowcomment(#)
代码导入

library(readr)
library(tidyverse)
gene_info <- read_delim("path/to/the/query_seqs.fa.emapper.annotations", 
                                    delim = "\t", escape_double = FALSE, 
                                    col_names = FALSE, comment = "#", trim_ws = TRUE) %>%
  select(Gene_Id = X1, Gene_Symbol = X6, GO = X7, Ko = X9, Pathway = X10, COG = X21, Gene_Name = X22)

代码解读:
readr包是为了增强数据读取能力,tidyverse包用于数据处理和可视化
readr包中的read_delim函数,用于从文本文件中读取数据并创建数据框
delim = "\t":指定数据文件中的字段分隔符为制表符(Tab)
escape_double = FALSE:不对双引号进行转义
col_names = FALSE:指定文件没有列名,因为数据文件中的第一行没有列名
comment = "#":指定以 "#" 开头的行为注释,这些行将被忽略
trim_ws = TRUE:在读取数据时删除字段周围的空白
%>%:R语言中的管道符
select()函数:是tidyverse包中的一个函数,用于选择和重新命名数据框中的列

2.样本相关性计算

2.1有关代码

sample_cor <- round(cor(gene_exp, method = 'spearman'), digits = 2)
library(pheatmap)
pheatmap(sample_cor)

cor(gene_exp, method = 'spearman'):cor()函数计算样本相关性,计算方法为spearman
round(x, digits = 2):round()函数进行四舍五入处理,结果保留两位有效数字
library(pheatmap):加载pheatmap包
pheatmap(sample_cor):可视化处理

2.2 几种有关函数

pearson:适用于线性相关分析,可用于计算两样本间相关性
spearman:适用于等级变量但无线性关系的数据,如肿瘤的分期
kendall:适用于离散型、分类变量

3. 样本聚类

3.1 计算距离矩阵

gene_dist <- dist(t(gene_exp))

代码解读
t(gene_exp):t()是转置符,将行变成列,将列变成行
dist():dist()函数计算距离矩阵并将结果保存到gene_dist向量中,若未指明其他参数,则默认矩阵模型为欧几里得(euclidean)矩阵。

3.2 层次聚类

gene_hc <- hclust(gene_dist)
plot(gene_hc)

代码解读
通过hclust()函数计算上一步距离矩阵的结果从而得到层次聚类结果,并通过plot()函数可视化。

4.主成分分析

4.1加载分析包

library(PCAtools)

4.2 主成分分析

p <- pca(gene_exp, metadata = sample_info, removeVar = 0.1)

代码解读
gene_exp:是前面导入的基因信息表
metadata:就是样本信息表
removeVar = 0.1表示过滤波动值小于10%的基因

pca_loadings <- p$loadings
pca_rotated <- p$rotated

代码解读
PC1=ag1+ag2+ag3+....+xgx:PC1与每个基因都有关系,但关系有大有小,a就是贡献值的大小也称作主成分复杂(loadings)

screeplot(p)

代码解读
绘出来的图是主成分对样本的解释度,不同的主成分能对样本拉开较大差异。注意:PCA的数目由样本数决定,有多少个样本数就有多少个PCA。

biplot(p, x = 'PC1',
       y = 'PC3',
       colby = 'strain',
       colkey = c('KID' = 'red', 'BLO' = 'yellow'),
       shape = 'stage',
       legendPosition = "bottom")

plotloadings(p)

代码解读
p是主成分分析中保存的向量p,x表示X轴,一般是由PC1作为x轴,y表示Y轴,一般是由PC1其他作为x轴,colby表示对样本信息表中某列赋予颜色,colkey表示对某列的不同组别赋予不同颜色(我们的研究没得必要区分颜色),shape表示对某列不同值赋予不同的形状,legendPosition 表示将图列放在哪边(上:top下:bottom左:left右:right)。
根据自己的研究可以不断更换y轴的输入,我们研究的是不同时期的差异,那就是意味着我们需要不同形状能得到区分的PC,找出这个PC阶段后,使用plotloadings(p)函数查看哪些基因对PC贡献大?

5.保存与加载数据

save(gene_exp, gene_info, sample_info, file = 'path/to/your/rna-seq/prepare.rdata')
load(file = 'path/to/your/rna-seq/prepare.rdata')

save和load是一对命令,在rstudio中每次退出会询问是否要保存数据,但在命令行中可能就不会询问,如果后续还需要继续分析,则需要重新加载向量,这时我们就先将结果保存到prepare.rdata中,再使用时直接加载即可。

6.完整流程的R脚本

#导入数据
##表达矩阵
gene_exp <- read.table("D:/bioinfotools/R/R/R-4.3.1/R-4.3.1/wkdir/rna-seq/genes.TMM.EXPR.matrix",
                       header = T, row.names = 1)

##样本信息表
sample_info <- read.delim("D:/share/R_data/data/rnaseq-apple/sample_info.txt", header = T,
                          row.names=1)

##基因信息表
library(readr)
library(tidyverse)
gene_info <- read_delim("D:/share/R_data/data/rnaseq-apple/query_seqs.fa.emapper.annotations", 
                                    delim = "\t", escape_double = FALSE, 
                                    col_names = FALSE, comment = "#", trim_ws = TRUE) %>%
  select(Gene_Id = X1,
         Gene_Symbol = X6,
         GO = X7,
         Ko = X9,
         Pathway = X10,
         COG = X21,
         Gene_Name = X22,)

#样本相关性分析
sample_cor <- round(cor(gene_exp, method = 'spearman'), digits = 2)
library(pheatmap)
pheatmap(sample_cor)

#样本聚类分析
##计算距离矩阵
gene_dist <- dist(t(gene_exp))

##层次聚类
gene_hc <- hclust(gene_dist)
plot(gene_hc)

#主成分分析
library(PCAtools)
##主成分分析(PCA)
p <- pca(gene_exp, metadata = sample_info, removeVar = 0.1)

pca_loadings <- p$loadings

pca_rotated <- p$rotated

screeplot(p)

biplot(p, x = 'PC1',
       y = 'PC3',
       colby = 'strain',
       colkey = c('KID' = 'red', 'BLO' = 'yellow'),
       shape = 'stage',
       legendPosition = "bottom")

plotloadings(p)

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

推荐阅读更多精彩内容