前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >拟时序分析的State表达矩阵和差异基因

拟时序分析的State表达矩阵和差异基因

作者头像
用户11414625
发布于 2024-12-20 08:43:26
发布于 2024-12-20 08:43:26
17400
代码可运行
举报
文章被收录于专栏:生信星球520生信星球520
运行总次数:0
代码可运行

需求

我们的线上直播课每月会开一次直播答疑,既往报名的老学员都可以参与,不加钱不限时,主打一个关爱,如果你不知道的话现在知道了哦。

两个需求:

第一个是做拟时序的不同发育阶段(state)之间的差异分析,并且希望加上每个基因在当前state和其他state各自的基因表达量平均值。

第二个是想要一个平均表达量矩阵,每列是一个State,每行是一个基因。

说明一下:图是公司给的结果,里面的数值是未log的tpm,我们采用的是logNormlize之后的数据,更好。

学生说,跟公司要代码,人家不给。哈哈,那能给你才怪。所以来找我咯。

输入数据

首先是前面的monocle单样本代码,p2+p1/p3之前的行原封不动的运行,得到sc_cds,和原来的输入数据scRNA(seurat对象)一起存为Rdata。

拟时序分析完成后,CellDataSet对象里面已经有了state信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list = ls())
library(Seurat)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Loading required package: SeuratObject
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Loading required package: sp
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 
## Attaching package: 'SeuratObject'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## The following objects are masked from 'package:base':
## 
##     intersect, t
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 
## Attaching package: 'dplyr'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## The following objects are masked from 'package:stats':
## 
##     filter, lag
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load("sc_exp.Rdata")
head(sc_cds@phenoData@data) #state信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##                  orig.ident nCount_RNA nFeature_RNA percent.mt RNA_snn_res.0.5
## AAACCCAAGTAGGGTC          a      10768         3213   7.030089               7
## AAAGGTAGTCTTGAGT          a       5565         1936   5.804133               7
## AACAAAGTCTTCCGTG          a       8503         3063   7.397389               7
## AACCACATCCTTCACG          a      12678         3846   6.830730               7
## AACGGGATCATTTCCA          a       8032         2501   2.079183               1
## AACGTCATCTCGGCTT          a      10596         3221   5.841827               1
##                  seurat_clusters     celltype Size_Factor Pseudotime State
## AAACCCAAGTAGGGTC               7 FCGR3A+ Mono   1.5413473  0.6942694     1
## AAAGGTAGTCTTGAGT               7 FCGR3A+ Mono   0.7965823  0.6812000     1
## AACAAAGTCTTCCGTG               7 FCGR3A+ Mono   1.2171319  0.2854422     1
## AACCACATCCTTCACG               7 FCGR3A+ Mono   1.8147476  6.7191558     3
## AACGGGATCATTTCCA               1   CD14+ Mono   1.1497123 17.0878087     5
## AACGTCATCTCGGCTT               1   CD14+ Mono   1.5167270 17.6253461     4

检查sc_cds和scRNA中的细胞顺序是否一致,确认是一致的才可以直接在scRNA里添加sc_cds里面的列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
head(scRNA@meta.data)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##                  orig.ident nCount_RNA nFeature_RNA percent.mt RNA_snn_res.0.5
## AAACCCAAGTAGGGTC          a      10768         3213   7.030089               7
## AAAGGTAGTCTTGAGT          a       5565         1936   5.804133               7
## AACAAAGTCTTCCGTG          a       8503         3063   7.397389               7
## AACCACATCCTTCACG          a      12678         3846   6.830730               7
## AACGGGATCATTTCCA          a       8032         2501   2.079183               1
## AACGTCATCTCGGCTT          a      10596         3221   5.841827               1
##                  seurat_clusters     celltype
## AAACCCAAGTAGGGTC               7 FCGR3A+ Mono
## AAAGGTAGTCTTGAGT               7 FCGR3A+ Mono
## AACAAAGTCTTCCGTG               7 FCGR3A+ Mono
## AACCACATCCTTCACG               7 FCGR3A+ Mono
## AACGGGATCATTTCCA               1   CD14+ Mono
## AACGTCATCTCGGCTT               1   CD14+ Mono
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
identical(rownames(scRNA@meta.data),rownames(sc_cds@phenoData@data))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] TRUE

需求1:State间差异分析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#确认一致,可以添加啦
scRNA$State = sc_cds@phenoData@data$State
Idents(scRNA) = scRNA$State #设为scRNA的Idents
设置Idents为State

Idents是Seurat对象的重要内容之一,是细胞的分类。在常规的Seurat分析流程里,这个Idents是一直在变化的。

数据读取进来时,这个Idents是样本名称,如果是单样本数据那就只有一个分类,名字可以自己设置(CreateSeuratObject的project参数)

完成FindCluster步骤后,Idents会变成亚群编号(0,1,2,3…)

完成细胞类型注释后,Idents会被设置成细胞名称。

它的Idents是什么,FindAllmarkers就会找什么分类之间的差别。

我们现在要找State之间的差异基因,就设置为State啦。

计算差异基因

用monocle自带的差异分析函数得出的结果信息不太齐全,还是seurat好啊。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scRNA.markers <- FindAllMarkers(scRNA, 
                               only.pos = TRUE,
                               min.pct = 0.25)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Calculating cluster 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Calculating cluster 2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Calculating cluster 3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Calculating cluster 4
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Calculating cluster 5
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scRNA.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_log2FC)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## # A tibble: 10 × 7
## # Groups:   cluster [5]
##       p_val avg_log2FC pct.1 pct.2 p_val_adj cluster gene     
##       <dbl>      <dbl> <dbl> <dbl>     <dbl> <fct>   <chr>    
##  1 2.02e-10       3.60 0.396 0.048  5.25e- 6 1       ARID5B   
##  2 9.16e- 9       3.95 0.302 0.027  2.38e- 4 1       P2RY10   
##  3 7.48e-16       8.33 0.333 0      1.94e-11 2       ASPM     
##  4 7.48e-16       8.33 0.333 0      1.94e-11 2       SYT9     
##  5 1.68e- 8       2.44 0.549 0.168  4.37e- 4 3       PRDM1    
##  6 2.91e- 5       2.79 0.353 0.101  7.57e- 1 3       C1QA     
##  7 3.14e- 6       2.43 0.32  0.067  8.16e- 2 4       LINC01094
##  8 1.36e- 3       2.52 0.26  0.093  1   e+ 0 4       CD9      
##  9 4.91e- 6       4.20 0.302 0.064  1.28e- 1 5       NAF1     
## 10 2.03e- 5       4.03 0.395 0.134  5.27e- 1 5       HSPA6

因为将State设置为了Idents,这里的”cluster”列其实是State。把列名改掉,避免歧义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
colnames(scRNA.markers)[6] = "State"
计算平均表达量

即计算每个基因在当前state和其他state的平均表达量,学生说为了方便直接查看和比较表达量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exp = scRNA@assays$RNA$data
a = apply(scRNA.markers,1,function(x){
  c(mean(exp[x[7],scRNA$State==x[6]]),
    mean(exp[x[7],scRNA$State!=x[6]]))
})
a = as.data.frame(t(a))
colnames(a) = c("Target_State","Other_State")
head(a)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##          Target_State Other_State
## VMO1         2.468474   0.3722993
## TNFSF13B     1.709487   0.2883641
## CDKN1C       1.612884   0.2331031
## JPT1         2.585694   1.0113633
## CYTIP        2.436601   1.0251027
## PAPSS2       1.812296   0.5325872
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scRNA.markers = cbind(scRNA.markers,a)
head(scRNA.markers)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##                 p_val avg_log2FC pct.1 pct.2    p_val_adj State     gene
## VMO1     1.285754e-27   3.447251 1.000 0.245 3.341417e-23     1     VMO1
## TNFSF13B 8.299190e-23   3.268468 0.925 0.245 2.156793e-18     1 TNFSF13B
## CDKN1C   1.761194e-21   3.300786 0.868 0.163 4.576990e-17     1   CDKN1C
## JPT1     2.570100e-21   2.154897 1.000 0.646 6.679175e-17     1     JPT1
## CYTIP    1.086084e-18   1.783399 1.000 0.626 2.822514e-14     1    CYTIP
## PAPSS2   1.802407e-18   2.258809 0.962 0.408 4.684095e-14     1   PAPSS2
##          Target_State Other_State
## VMO1         2.468474   0.3722993
## TNFSF13B     1.709487   0.2883641
## CDKN1C       1.612884   0.2331031
## JPT1         2.585694   1.0113633
## CYTIP        2.436601   1.0251027
## PAPSS2       1.812296   0.5325872

搞定啦。

需求2:state平均表达量矩阵

我本以为应该要很多行代码才能搞定。结果只要两行!chatgpt写了十几行还报错。还是自己写的好使嗯。

我写的哦👇。如有雷同是别人抄我的。

计算!
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dat = split(colnames(exp),scRNA$State)
re = sapply(dat,function(x){rowMeans(exp[,x])})
head(re)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##                   1         2         3         4         5
## TSPAN6   0.00000000 0.0000000 0.0000000 0.0000000 0.0000000
## DPM1     0.20975283 0.5425002 0.2493284 0.3039274 0.2149655
## SCYL3    0.03053863 0.0000000 0.0831260 0.0000000 0.0000000
## C1orf112 0.01484739 0.0000000 0.0000000 0.0000000 0.0000000
## FGR      0.69361333 0.3610408 0.9225549 1.1443649 0.9587395
## CFH      0.00000000 0.0000000 0.0000000 0.0000000 0.0000000

让chatgpt讲讲这两句代码的意思,超多料。让它写他不一定行,让它解释肯定是行的!

第一行代码:dat = split(colnames(exp), scRNA$State)
  • colnames(exp):这部分获取表达矩阵exp的列名,通常列名代表不同的样本或细胞。
  • split(colnames(exp), scRNAState):split函数用于根据scRNAState中的每个细胞的状态将列名(样本/细胞)分组。scRNA
  • dat:这个变量将存储split函数的结果,即一个列表,其中每个元素包含了对应于相同状态的所有列名。
第二行代码:re = sapply(dat, function(x) {rowMeans(exp[,x])})
  • sapply(dat, function(x) {rowMeans(exp[,x])})sapply函数用于对dat列表中的每个元素(即每个状态组的列名)应用一个函数。这里应用的函数是rowMeans,它计算exp矩阵中每一行(基因)在指定列(细胞/样本)上的平均值。
  • function(x) {rowMeans(exp[,x])}:这是一个匿名函数,它接受一个向量x(代表一组列名),并计算exp矩阵中这些列的平均表达量。
  • re:这个变量将存储sapply函数的结果,即一个向量,其中包含了每个状态组的基因平均表达量。
总结

这两行代码的目的是将表达矩阵exp根据细胞状态分组,并计算每个组中所有基因的平均表达量。这样,你可以比较不同状态(如不同细胞类型或不同疾病状态)下基因表达的差异。这种方法在单细胞RNA测序数据分析中非常常见,用于识别状态特异性的基因表达模式。

检查!

验证一个,看上面的代码是否正确啊。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean(exp["DPM1",scRNA$State==1])
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] 0.2097528
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
re["DPM1",1]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] 0.2097528

搞定啦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
呕心沥血写了三天3两夜24k字的MySQL详细教程
 存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
陶然同学
2023/02/27
7350
呕心沥血写了三天3两夜24k字的MySQL详细教程
MySQL 数据库基础知识(系统化一篇入门)[通俗易懂]
简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。
全栈程序员站长
2022/09/13
5.3K0
MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)
知识无底,学海无涯,到今天进入MySQL的学习4天了,知识点虽然简单,但是比较多,所以写一篇博客将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。
全栈程序员站长
2022/07/01
2.7K0
MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)
MySQL数据库入门
后台 (连接点:连接数据库JDBC,链接前端(控制,控制视图跳转,和给前端传递数据))
落寞的鱼丶
2022/02/21
6190
学会Mysql第三天
1、having 是在 group by 子句之后:可以针对分组数据进行统计筛选。
白胡杨同学
2020/04/16
7720
Python 高级笔记第二部分:数据库的概述和MySQL数据表操作
SQL结构化查询语言(Structured Query Language),一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
杨丝儿
2022/02/24
1.9K0
Python 高级笔记第二部分:数据库的概述和MySQL数据表操作
超详细的MySQL三万字总结[通俗易懂]
Java 中创建对象: Student s = new Student(1, “张三”) 存在内存中 学习了 Java IO 流:把数据保存到文件中。
全栈程序员站长
2022/08/27
3.5K0
超详细的MySQL三万字总结[通俗易懂]
MySQL 常用基础知识,多学一门技能,不求人
外键约束:是指在主键关联的外键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改。
微芒不朽
2022/09/13
5100
一个小时学会MySQL数据库
该文是对一篇新闻文章的摘要总结。
张果
2018/01/04
4K0
一个小时学会MySQL数据库
MySQL复习笔记(2)-约束
之前的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值NULL。
框架师
2021/03/05
9550
MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
           select                 字段列表            from                 表名列表            where                 条件列表            group by                 分组字段            having                  分组之后的条件            order by                  排序            limit                  分页限定  
Winter_world
2020/09/25
1.1K0
MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
MySQL数据库,从入门到精通:第十三篇——MySQL数据表约束详解
在MySQL数据库中,约束是一种对数据表中数据进行限制和检查的方法,可以保证数据表中数据的完整性和一致性。本文将深入剖析MySQL中的各种约束,包括非空约束、唯一性约束、主键约束、自增列、外键约束、默认值约束以及CHECK约束等等,同时结合开发场景给出约束使用和实践的技巧和方法,帮助读者更好地掌握MySQL中数据表相关操作的技巧和方法。
默 语
2024/11/20
4680
MySQL数据库,从入门到精通:第十三篇——MySQL数据表约束详解
MySQL基础课堂笔记「建议收藏」
​ – 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE ‘%德%’;
全栈程序员站长
2022/09/18
9900
MySQL基础课堂笔记「建议收藏」
MySQL数据库常用命令
2、创建表:create table student(id int(4) primary key,name char(20));
wangmcn
2022/07/25
2.3K0
一个小时学会MySQL数据库
随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。
杨奉武
2019/02/13
3.9K0
一个小时学会MySQL数据库
【Mysql】耗时7200秒整理的mysql笔记!常用API汇总!包教包会!
a. 找到MySql解压好的文件夹的根目录,在根目录下创建文件 my.ini(后缀为.ini)
LonelySnowman
2022/12/05
1.4K0
MySQL常用基础 - 小白必看
2、create database if not exists 数据库名 (判断数据库是否存在,不存在则创建)
EXI-小洲
2023/01/09
1.3K0
MySQL常用基础 - 小白必看
MySQL表的增删查改(二)
创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id:
海盗船长
2020/08/27
2.6K0
MySQL数据库的查询
聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据
用户9399690
2022/01/20
19.7K0
MySQL数据库的查询
MySQL数据库表约束详解
表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。
用户11316056
2025/02/22
4160
MySQL数据库表约束详解
推荐阅读
相关推荐
呕心沥血写了三天3两夜24k字的MySQL详细教程
更多 >
LV.8
公众号:赵KK日常技术记录AIGC生成式
目录
  • 需求
  • 输入数据
  • 需求1:State间差异分析
    • 设置Idents为State
    • 计算差异基因
    • 计算平均表达量
  • 需求2:state平均表达量矩阵
    • 计算!
      • 第一行代码:dat = split(colnames(exp), scRNA$State)
      • 第二行代码:re = sapply(dat, function(x) {rowMeans(exp[,x])})
      • 总结
    • 检查!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档