②单细胞学习-组间及样本细胞比例分析

目录

数据读入

每个样本各细胞比例

两个组间细胞比例

亚组间细胞比例差异分析(循环)

单个细胞类型亚新间比例差异

①单细胞学习-数据读取、降维和分群-CSDN博客

比较各个样本间的各类细胞比例或者亚组之间的细胞比例差异

①数据读入
#各样本细胞比例计算
rm(list = ls()) 
library(Seurat)
load("scedata1.RData")#这里是经过质控和降维后的单细胞数据
table(scedata$orig.ident)#查看各组细胞数
table(Idents(scedata))#查看各种类型细胞数目
#prop.table(table(Idents(scedata)))
table(Idents(scedata), scedata$orig.ident)#每个样本不同类型细胞数据
> table(scedata$orig.ident)#查看各组细胞数

 BM1  BM2  BM3  GM1  GM2  GM3 
2754  747 2158 1754 1528 1983 
> table(Idents(scedata))#查看各种类型细胞数目

 Fibroblast Endothelial      Immune       Other  Epithelial 
       2475        4321        2688         766         674 
> #prop.table(table(Idents(scedata)))
> table(Idents(scedata), scedata$orig.ident)#每个样本不同类型细胞数据
             
               BM1  BM2  BM3  GM1  GM2  GM3
  Fibroblast   571  135  520  651  312  286
  Endothelial  752  244  619  716  906 1084
  Immune      1220  145  539  270  149  365
  Other        142  161  194   55   79  135
  Epithelial    69   62  286   62   82  113

②每个样本各细胞比例
#换算每样样本每种细胞占有的比例:绘制总的堆积图
Cellratio <- prop.table(table(Idents(scedata),scedata$orig.ident),
                        margin = 2)# margin = 2按照列计算每个样本比例
Cellratio <- as.data.frame(Cellratio)#计算比例绘制堆积图
library(ggplot2)#绘制细胞比例堆积图
colourCount = length(unique(Cellratio$Var1))
p1 <- ggplot(Cellratio) + 
  geom_bar(aes(x =Var2, y= Freq, fill = Var1),
           stat = "identity",width = 0.7,size = 0.5,colour = '#222222')+ 
  theme_classic() +
  labs(x='Sample',y = 'Ratio')+
  #coord_flip()+ #进行翻转
  theme(panel.border = element_rect(fill=NA,color="black", 
                                    size=0.5, linetype="solid"))
p1
dev.off()
> head(Cellratio)
         Var1 Var2       Freq
1  Fibroblast  BM1 0.20733479
2 Endothelial  BM1 0.27305737
3      Immune  BM1 0.44299201
4       Other  BM1 0.05156137
5  Epithelial  BM1 0.02505447
6  Fibroblast  BM2 0.18072289

③两个组间细胞比例

这里比较BM和GM两个组间的细胞比例

##分成两个组进行比较:先查看每个样本的具体细胞数量
library(tidyverse)
library(reshape)
clusdata <- as.data.frame(table(Idents(scedata), scedata$orig.ident))
#进行长宽数据转换
clusdata1 <- clusdata %>% pivot_wider(names_from = Var2,
                                      values_from =Freq )
clusdata1 <- as.data.frame(clusdata1)
rownames(clusdata1) <- clusdata1$Var1
clusdata2 <- clusdata1[,-1]#[1] "BM1" "BM2" "BM3" "GM1" "GM2" "GM3"
#分别计算每个组每种细胞和
BM <- c("BM1","BM2","BM3")
clusdata2$BMsum <- rowSums(clusdata2[,BM])
GM <- c("GM1","GM2","GM3")
clusdata2$GMsum <- rowSums(clusdata2[,GM])#然后绘制堆积图
clus2 <- clusdata2[,c(7,8)]
clus2$ID <- rownames(clus2)
clus3  <- melt(clus2, id.vars = c("ID"))##根据分组变为长数据
p <- ggplot(data = clus3,
            aes(x=ID,y=value,fill=variable))+
  #geom_bar(stat = "identity",position = "stack")+    ##展示原来数值
  geom_bar(stat = "identity",position = "fill")+      ##按照比例展示:纵坐标为1
  scale_y_continuous(expand = expansion(mult=c(0.01,0.1)),##展示纵坐标百分比数值
                     labels = scales::percent_format())+
  scale_fill_manual(values = c("BMsum"="#a56cc1","GMsum"="#769fcd"),       ##配色:"BMsum"="#98d09d","GMsum"="#e77381"
                    limits=c("BMsum","GMsum"))+                            ##limit调整图例顺序
  theme(panel.background = element_blank(),          ##主题设置
        axis.line = element_line(),                   
        legend.position = "top")+                  #"bottom"
  labs(title = "single cell",x=NULL,y="percent")+           ##X,Y轴设置
  guides(fill=guide_legend(title = NULL,nrow = 1,byrow = FALSE))
p
dev.off()
> head(clus3)
           ID variable value
1  Fibroblast    BMsum  1226
2 Endothelial    BMsum  1615
3      Immune    BMsum  1904
4       Other    BMsum   497
5  Epithelial    BMsum   417
6  Fibroblast    GMsum  1249

④亚组间细胞比例差异分析(循环)
#组间差异分析:仍然是使用这个比例数据进行分析,不过却是在各个样本中进行比例比较
table(scedata$orig.ident)#查看各组细胞数
table(Idents(scedata))#查看各种类型细胞数目
table(Idents(scedata), scedata$orig.ident)#各组不同细胞群细胞数
Cellratio <- prop.table(table(Idents(scedata), 
                              scedata$orig.ident), margin = 2)#计算各组样本不同细胞群比例
Cellratio <- data.frame(Cellratio)
#需要进行数据转换,计算每个样本比例后进行差异分析
library(reshape2)
cellper <- dcast(Cellratio,Var2~Var1, value.var = "Freq")
rownames(cellper) <- cellper[,1]
cellper <- cellper[,-1]
###添加分组信息dataframe
sample <- c("BM1","BM2","BM3","GM1","GM2","GM3")
group <- c("BM","BM","BM","GM","GM","GM")
samples <- data.frame(sample, group)#创建数据框
rownames(samples)=samples$sample
cellper$sample <- samples[rownames(cellper),'sample']#R添加列
cellper$group <- samples[rownames(cellper),'group']#R添加列

###作图展示
pplist = list()##循环作图建立空表
library(ggplot2)
library(dplyr)
library(ggpubr)
library(cowplot)
sce_groups = c('Endothelial','Fibroblast','Immune','Epithelial','Other')
for(group_ in sce_groups){
  cellper_  = cellper %>% select(one_of(c('sample','group',group_)))#选择一组数据
  colnames(cellper_) = c('sample','group','percent')#对选择数据列命名
  cellper_$percent = as.numeric(cellper_$percent)#数值型数据
  cellper_ <- cellper_ %>% group_by(group) %>% mutate(upper =  quantile(percent, 0.75), 
                                                      lower = quantile(percent, 0.25),
                                                      mean = mean(percent),
                                                      median = median(percent))#上下分位数
  print(group_)
  print(cellper_$median)
  
  pp1 = ggplot(cellper_,aes(x=group,y=percent)) + #ggplot作图
    geom_jitter(shape = 21,aes(fill=group),width = 0.25) + 
    stat_summary(fun=mean, geom="point", color="grey60") +#stat_summary添加平均值
    theme_cowplot() +
    theme(axis.text = element_text(size = 10),axis.title = element_text(size = 10),legend.text = element_text(size = 10),
          legend.title = element_text(size = 10),plot.title = element_text(size = 10,face = 'plain'),legend.position = 'none') + 
    labs(title = group_,y='Percentage') +
    geom_errorbar(aes(ymin = lower, ymax = upper),col = "grey60",width =  1)
  
  ###组间t检验分析
  labely = max(cellper_$percent)
  compare_means(percent ~ group,  data = cellper_)
  my_comparisons <- list( c("GM", "BM") )
  pp1 = pp1 + stat_compare_means(comparisons = my_comparisons,size = 3,method = "t.test")
  pplist[[group_]] = pp1
}

#批量绘制
plot_grid(pplist[['Endothelial']],
          pplist[['Fibroblast']],
          pplist[['Immune']],
          pplist[['Epithelial']],
          pplist[['Other']],
          #nrow = 5,#列数
          ncol = 5)#行数

⑤单个细胞类型亚新间比例差异
##数据处理
##单个细胞类型比例计算
rm(list = ls()) 
library(Seurat)
library(tidyverse)
library(reshape2)
library(ggplot2)
library(dplyr)
library(ggpubr)
library(cowplot)
load("scedata1.RData")#计算各个样本细胞,各种类型细胞
Cellratio <- prop.table(table(Idents(scedata), 
                              scedata$orig.ident), margin = 2)#计算样本比例
Cellratio <- data.frame(Cellratio)
cellper <- dcast(Cellratio,Var2~Var1, value.var = "Freq")##长数据转宽数据
rownames(cellper) <- cellper[,1]
cellper <- cellper[,-1]
sample <- c("BM1","BM2","BM3","GM1","GM2","GM3")###添加分组信息dataframe
group <- c("BM","BM","BM","GM","GM","GM")
samples <- data.frame(sample, group)#创建数据框
rownames(samples)=samples$sample
cellper$sample <- samples[rownames(cellper),'sample']#R添加列
cellper$group <- samples[rownames(cellper),'group']#R添加列

dat <- cellper[,c(1,7)]#提取需要分析的细胞类型"Fibroblast" "group"  
#根据分组计算四分位及中位数
dat1 <- dat %>% group_by(group) %>% mutate(upper =  quantile(Fibroblast, 0.75), 
                                           lower = quantile(Fibroblast, 0.25),
                                           mean = mean(Fibroblast),
                                           median = median(Fibroblast))
#table(dat1$group)#BM GM 

作图

#pdf("单个细胞类型组间比较.pdf",width = 4,height = 4)##一定添加大小
my_comparisons =list( c("BM","GM"))
P <- ggplot(dat1,aes(x=group,y= Fibroblast)) + #ggplot作图
  geom_jitter(shape = 21,aes(fill=group),width = 0.25) + 
  stat_summary(fun=mean, geom="point", color="grey60") +
  theme_cowplot() +
  theme(axis.text = element_text(size = 10),axis.title = element_text(size = 10),legend.text = element_text(size = 10),
        legend.title = element_text(size = 10),plot.title = element_text(size = 10,face = 'plain'),legend.position = 'none') + 
  labs(title = "group",y='Fibroblastage') +
  geom_errorbar(aes(ymin = lower, ymax = upper),col = "grey60",width =  1)+#误差棒
  #差异检验
  stat_compare_means(comparisons=my_comparisons,
                     label.y = c(0.4),
                     method="t.test",#wilcox.test
                     label="p.signif")
P
dev.off()

感谢: TS的美梦-CSDN博客

参考:跟着Cell学单细胞转录组分析(六):细胞比例计算及可视化 (qq.com)

跟着Cell学单细胞转录组分析(十四):细胞比例柱状图---连线堆叠柱状图_单细胞细胞占比图怎么画-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/656528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu-24.04系统静态Mac和IP配置

操作系统版本&#xff08;桌面版&#xff09;&#xff1a;ubuntu-24.04-desktop-amd64.iso 原因说明&#xff1a;因网络的IP地址和Mac是预分配的&#xff0c;所以ubuntu系统需要修改网卡的mac地址和IP才能访问&#xff0c;网络查了半天资料都没成功&#xff0c;后再界面提示&a…

vue2 案例入门

vue2 案例入门 1 vue环境2 案例2.1 1.v-text v-html2.2 v-bind2.3 v-model2.4 v-on2.5 v-for2.6 v-if和v-show2.7 v-else和v-else-if2.8 计算属性和侦听器2.9 过滤器2.10 组件化2.11 生命周期2.12 使用vue脚手架2.13 引入ElementUI2.13.1 npm方式安装2.13.2 main.js导入element…

BIGO前端CICD平台

本文首发于&#xff1a;https://github.com/bigo-frontend/blog/ 欢迎关注、转载。 我是谁 BIGO前端CICD平台&#xff0c;是一个服务于前端团队的全研发周期管理平台&#xff0c;已经是我们团队日常都要使用的工具了。 该平台实现了一键创建项目、发布编排、新建迭代、checkl…

互联网应用主流框架整合之数据库事务管理

在互联网系统中同时运行着成千上百个线程是十分常见的事情&#xff0c;尤其当一个热门出现时&#xff0c;用户几乎同时打开手机、电脑、平板灯设备进行访问&#xff0c;这样就会导致数据库处在一个多事务访问的环境中&#xff0c;从而引发数据丢失或者数据不一致的现象&#xf…

Java GC问题排查的一些个人总结和问题复盘

个人博客 Java GC问题排查的一些个人总结和问题复盘 | iwts’s blog 是否存在GC问题判断指标 有的比较明显&#xff0c;比如发布上线后内存直接就起飞了&#xff0c;这种也是比较好排查的&#xff0c;也是最多的。如果单纯从优化角度&#xff0c;看当前应用是否需要优化&…

Mowgli用于配对多组学整合

对同一组细胞的多个分子层进行分析逐渐流行。越来越需要能够联合分析这些数据的多视图学习方法。Mowgli是一种支持配对多组学数据的整合方法。值得注意的是&#xff0c;Mowgli将非负矩阵分解和最优传输相结合&#xff0c;同时提高了非负矩阵分解的聚类性能和可解释性。作者将Mo…

解锁数据的力量:Navicat 17 新特性和亮点

解锁数据的力量&#xff1a;Navicat 17 新特性和亮点 大家好&#xff0c;我是猫头虎。今天我要为大家介绍 Navicat 17 的新特性和亮点。Navicat 是一款专业的数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL、MariaDB、…

5月28号总结

刷题记录 1.A. Phone Desktop 输入&#xff1a; 11 1 1 7 2 12 4 0 3 1 0 8 1 0 0 2 0 15 0 8 2 0 9 输出&#xff1a; 1 1 2 2 1 1 0 1 1 2 5 题意&#xff1a;题目给我们1x1和2x2的图标个数&#xff0c;让我们求最少需要多少个5x3的屏幕。 思路&#xff1a;当只看2x2的图…

新建一个esri_sde_gists的服务

需求 新建一个esri_sde_gists的服务 步骤&#xff1a; 需要拷贝ora11gexe目标为新的目录&#xff0c;例如ora11gexe_gists 运行drivers找到etc下面的services文件&#xff0c;添加端口5152&#xff1a; 检查sde的library并创建&#xff1a; CREATE or REPLACE LIBRARY ST_S…

elastich运维

Elastichsearch是一种高度可扩展的开源全文搜索和分析引擎&#xff0c;可以用来实现快速、高效的数据检索。 集群规划与部署&#xff1a;首先需要根据业务需求规划Elastichsearch集群的节点数量和角色&#xff08;如主节点、副本节点、协调节点等&#xff09;。在部署时&#x…

@EnableConfigurationProperties源码解析

前言 EnableConfigurationProperties注解的使用&#xff0c;请移步相关博文&#xff1a;EnableConfigurationProperties注解使用 前置知识 Import注解作用简述 注入的类一般继承 ImportSelector 或者 ImportBeanDefinitionRegistrar 接口 继承ImportSelector接口&#xff…

AIGC 人工智能全能实操课:用AI工作,提升效率,帮你赚钱(33节课)

课程目录 2-AIGC介绍先导1.mp4 3-第一节-chatGPT介绍与原理1.mp4 4-第二节-CHATGPT提示词的三个原则_1.mp4 5-第三节-chatgpt提示词的7个步骤1.mp4 6-第四节-chatgpt提示词的4个技巧1.mp4 7-第五节-chatgpt制作分镜案例分享1.mp4 8-第六节-chatgpt提示词生成工具1.mp4 …

最短路Dijkstra求最短路(讲解 + 模板 + 例题)

Dijkstra算法 Dijkstra是基于贪心思想的单源最短路算法; 变量定义 : const int N 510; const int INF 1e9 10 ; struct edge{int v , w ; // 表示出边和边权 }; vector<edge> e[N] ; int d[N] ; // dis[u]存u到源点s的最短距离 int vis[N] ;// vis[u]标记u是否…

K8s集群调度续章

目录 一、污点&#xff08;Taint&#xff09; 1、污点&#xff08;Taint&#xff09; 2、污点组成格式 3、当前taint effect支持如下三个选项&#xff1a; 4、查看node节点上的污点 5、设置污点 6、清除污点 7、示例一 查看pod状态&#xff0c;模拟驱逐node02上的pod …

选择快充时代下的理想充电器与电压诱骗芯片PW6606

随着科技的不断进步&#xff0c;我们的电子设备对于充电速度和效率的要求越来越高。在快充技术迅猛发展的今天&#xff0c;了解不同类型的充电器及其对应的快充协议&#xff0c;以及如何选择适合的电压诱骗芯片&#xff0c;对于提升充电体验和保障设备安全显得尤为重要。 一、快…

「代码厨房大揭秘:Python性能优化的烹饪秘籍!」

哈喽&#xff0c;我是阿佑&#xff0c;上篇咱们讲了 Socket 编程 —— 探索Python Socket编程&#xff0c;赋予你的网络应用隐形斗篷般的超能力&#xff01;从基础到实战&#xff0c;构建安全的聊天室和HTTP服务器&#xff0c;成为网络世界的守护者。加入我们&#xff0c;一起揭…

什么情况下JVM内存中的一个对象会被垃圾回收?

什么情况下JVM内存中的一个对象会被垃圾回收? 1、什么时候会触发垃圾回收?2、被哪些变量引用的对象是不能回收的?3、Java中对象不同的引用类型4、finalize()方法的作用1、什么时候会触发垃圾回收? 平时我们系统运行创建的对象都是优先分配在新生代里的,如图: 然后如果…

【JVM底层原理,JVM架构详解】

1. JVM简介 1.1 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 主流虚拟机: 虚拟机名称介绍HotSpotOracle/Sun JDK和OpenJDK都使用HotSPo…

【算法】位运算算法——丢失的数字

题解&#xff1a;丢失的数字(位运算算法) 目录 1.题目2.题解3.位运算异或4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 哈希数组查漏高斯求和排序位运算异或… 3.位运算异或 class Solution { public:int missingNumber(vector<int>& nums) {int ret 0;for…

单调栈--

1.每日温度 那么单调栈的原理是什么呢&#xff1f;为什么时间复杂度是O(n)就可以找到每一个元素的右边第一个比它大的元素位置呢&#xff1f; 单调栈的本质是空间换时间&#xff0c;因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素&#xff0c;优点是整个数…