(一)单细胞数据分析——单细胞数据预处理

由于毕业设计是单细胞数据的处理,所以把整个过程所用到的方法进行一个整理,这是第一个部分,对得到的单细胞数据进行质控、降维、聚类等预处理。下面开始:

第一步:导入R包(部分R包可能用不到,因为做课题的时候需要就全部导入了,无伤大雅!)

library(scibet)
library(Seurat)
library(scater)
library(scran)
library(dplyr)
library(Matrix)
library(cowplot)
library(ggplot2)
library(harmony)
rm(list = ls())

第二步:读入所需要的数据

这里是我使用的一个乳腺癌单细胞测序数据

file.dir <- './GSE161529_RAW'
samplefile <- list.files('./GSE161529_RAW')
samplefile.mtx <- samplefile[grepl(pattern = 'matrix.mtx.gz',x = samplefile)]
samplefile.barcodes <- samplefile[grepl(pattern = 'barcodes.tsv.gz',x = samplefile)]
names(samplefile.mtx) <- substr(x = samplefile.mtx,start = 1,stop = 10)
names(samplefile.barcodes) <- substr(x = samplefile.barcodes,start = 1,stop = 10)
feature.file <- 'GSE161529_features.tsv.gz'
feature.names <- read.table(file = feature.file, header = FALSE, sep = "\t", row.names = NULL)
select_data <- c("GSM******") #这里的******指的是样本编号
GSE161529List <- lapply(select_data, function(sampleName){
    print(sampleName)
    tmp.barcode <- paste(file.dir, samplefile.barcodes[sampleName], sep = "/")
    tmp.mtx <- paste(file.dir, samplefile.mtx[sampleName], sep = "/")
    cell.barcodes <- read.table(file = tmp.barcode, header = FALSE, sep = "\t", row.names = NULL)
    data <- readMM(file = tmp.mtx)
    colnames(data) <- cell.barcodes[,1]
    rownames(data) <- feature.names[,2]
    CreateSeuratObject(counts = data, project = sampleName)
})
names(GSE161529List) <- select_data
BRCA_GSE161529 <- merge(GSE161529List[[1]], GSE161529List[-1], add.cell.ids = names(GSE161529List))
BRCA_GSE161529$sampleNames <- BRCA_GSE161529$orig.ident
head(BRCA_GSE161529)

当出现以下弹出消息则表示正在读入:

 最终head()的结果如下:

第三步:质量控制、细胞周期异质性减弱与细胞的降维聚类

因为这些步骤都是普遍通用的,这里封装为SeuratPreTreatment()方法,通过四个质控指标nCount_RNA(每个细胞的read counts数目)≥500、nFeature_RNA(每个细胞所检测到的基因数目) ≥200、mitoRatio(线粒体基因比例)<0.2、GenesPerUMI(单位read counts检测到的基因数目的比例)>0.8,进行质量控制;使用CellCycleScoring()减弱细胞周期异质性对下游分析的影响;之后就是标化、降维PCA/Harmony(Harmony是针对需要消除批次效应时使用,不一定都要使用)与聚类。

SeuratPreTreatment <- function(obj=NULL,QC=FALSE,nCount_cut=500,nFeature_cut=200,log10GenesPerUMI_cut=0.8,mitoRatio_cut=0.2){
    if(is.null(obj)){
        print("obj is null!")
        return(NULL)
    }
    obj$mitoRatio <- PercentageFeatureSet(object = obj, pattern = "^MT-")
    obj$mitoRatio <- obj@meta.data$mitoRatio / 100
    obj$log10GenesPerUMI <- log10(obj$nFeature_RNA)/log10(obj$nCount_RNA)
    obj$riboRatio <- PercentageFeatureSet(object = obj, pattern = "^RP[SL]")
    obj$riboRatio <- obj@meta.data$mitoRatio / 100
    obj <- CellCycleScoring(obj, g2m.features = g2m_genes, s.features = s_genes)
    if(QC){
        filtered_obj <- subset(x = obj, subset= (nCount_RNA >= nCount_cut) & 
                               (nFeature_RNA >= nFeature_cut) & 
                               (log10GenesPerUMI > log10GenesPerUMI_cut) & 
                               (mitoRatio < mitoRatio_cut))
        print(dim(filtered_obj))
        filtered_obj <- NormalizeData(filtered_obj, normalization.method = "LogNormalize")
        filtered_obj <- FindVariableFeatures(filtered_obj, selection.method = "vst", nfeatures = 3000)
        filtered_obj <- ScaleData(filtered_obj, vars.to.regress = c('nCount_RNA'))
        filtered_obj <- RunPCA(filtered_obj)
        filtered_obj <- RunUMAP(filtered_obj,reduction = "pca",dims = 1:30,seed.use = 12345)
        filtered_obj <- FindNeighbors(filtered_obj,reduction = 'pca', dims = 1:30, verbose = FALSE)
        filtered_obj <- FindClusters(filtered_obj,resolution = 0.5, verbose = FALSE,random.seed=20220727)
        return(filtered_obj)
    }else{
        obj <- NormalizeData(obj, normalization.method = "LogNormalize")
        obj <- FindVariableFeatures(obj, selection.method = "vst", nfeatures = 3000)
        obj <- ScaleData(obj, vars.to.regress = c('nCount_RNA'))
        obj <- RunPCA(obj)
        obj <- RunUMAP(obj,reduction = "pca",dims = 1:30,seed.use = 12345)
        obj <- FindNeighbors(obj,reduction = 'pca', dims = 1:30, verbose = FALSE)
        obj <- FindClusters(obj,resolution = 0.5, verbose = FALSE,random.seed=20220727)
        return(obj)
    }
}

方法封装完成后,质控参数QC设置为TRUE,使用该方法预处理数据

BRCA_GSE161529_QC <- SeuratPreTreatment(BRCA_GSE161529, QC = TRUE)

第四步:细胞注释

使用经典的细胞代表的基因集对数据进行注释,基因集详见代码;同时将细胞注释的代码封装为方法cellAnnotation()

cellAnnotation <- function(obj,markerList,assay='SCT',slot='data'){
    markergene <- unique(do.call(c,markerList))
    Idents(obj) <- 'seurat_clusters'
    cluster.averages <- AverageExpression(obj,assays=assay, slot = slot,features=markergene, return.seurat = TRUE)
    if(assay=='SCT'){
        scale.data <- cluster.averages@assays$SCT@data
    }else{
        scale.data <- cluster.averages@assays$RNA@data
    }
    print(scale.data)
    cell_score <- sapply(names(markergeneList),function(x){
        tmp <- scale.data[rownames(scale.data)%in%markergeneList[[x]],]
        if(is.matrix(tmp)){
            if(nrow(tmp)>=2){
                res <- apply(tmp,2,max)
                return(res)
            }else{
                return(rep(-2,ncol(tmp)))
            }
        }else{
            return(tmp)
        }
    })
    print(cell_score)
    celltypeMap <- apply(cell_score,1,function(x){
        colnames(cell_score)[which(x==max(x))]
    },simplify = T)
    obj@meta.data$cellType_auto <- plyr::mapvalues(x = obj@active.ident, from = names(celltypeMap), to = celltypeMap)
    return(obj)
}
lymphocyte <- c('CD3D','CD3E','CD79A','MS4A1','MZB1')
myeloid <- c('CD68','CD14','TPSAB1' , 'TPSB2','CD1E','CD1C','LAMP3', 'IDO1')
EOC <- c('EPCAM','KRT19','CD24')
fibo_gene <- c('DCN','FAP','COL1A2')
endo_gene <- c('PECAM1','VWF')
markergeneList <- list(lymphocyte=lymphocyte,myeloid=myeloid,Epi=EOC,fibo=fibo_gene,endo=endo_gene)
BRCA_GSE161529_QC <- cellAnnotation(obj=BRCA_GSE161529_QC,assay = 'RNA',markerList=markergeneList)

可以通过DimPlot()查看预处理后的单细胞UMAP图

DimPlot(object = BRCA_GSE161529_QC,reduction = 'umap',group.by = c('seurat_clusters','cellType_auto'), label = TRUE)

第五步:存入预处理后的单细胞数据

saveRDS(object = BRCA_GSE161529_QC,file = './BRCA_GSE161529_obj.RDS')

第(一)部分单细胞数据预处理就完成了,之后还有对细胞亚群的分群,伪时序分析等教程哦!关注不迷路!

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
R语言是一种开源的统计编程语言,广泛应用于生物学中的单细胞数据分析单细胞数据是通过单个细胞的测序技术获得的,可以提供细胞间的差异性信息,为理解生物体的复杂生理和病理过程提供重要线索。 在R语言中,有许多用于单细胞数据分析的包可以帮助研究人员进行数据预处理、可视化、细胞聚类、差异表达基因分析等。 首先,数据预处理单细胞数据分析的关键步骤之一。在R语言中,可以使用Seurat、SCANPY等包对原始测序数据进行降维、归一化和过滤,去除噪声和技术偏差,以便后续分析。 其次,细胞聚类是单细胞数据分析的重要步骤。在R语言中,可以使用Seurat、SCANPY等包对经过预处理的数据进行聚类分析,将相似的细胞聚集在一起,并将其可视化。这有助于研究人员识别不同细胞类型和亚群,理解细胞间的功能和转录状态的差异。 最后,差异表达基因分析是单细胞数据分析的一个重要目标。在R语言中,可以使用edgeR、DESeq2等包对不同细胞群体之间的基因表达差异进行检验和评估,并筛选出与特定生物学过程或疾病相关的候选基因。 总之,R语言单细胞数据分析中具有广泛的应用。研究人员可以利用R语言中的各种包和函数对单细胞数据进行处理、分析和可视化,从而获得关于细胞类型、功能和转录调控的有价值信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin丶大牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值