library(ggplot2) library(tidyverse) library(ggExtra) data = read.table("mulvscon_ma.xls",header=T,row.names=1) aes = aes(x=log2(baseMean),y=log2FoldChange) maplot = ggplot(data=data,aes) + geom_point(aes(color=significance),size=0.5, show.legend = F) p1 = maplot + scale_color_manual(values=c("#a92323","#999999","#a92323")) + geom_hline(yintercept=0,linetype=2,color="black")+geom_hline(yintercept=0.5,linetype=4,color="black")+ geom_hline(yintercept=-0.5,linetype=4,color="black")+theme_classic() p2=ggMarginal(p1, type="density", fill="purple", color="purple") p2
Science:新研究揭示B1细胞的起源
在一项新的研究中,德国马克斯-德尔布吕克分子医学中心的Klaus Rajewsky教授及其团队报道B1细胞的产生并不需要不同的祖细胞。相反,他们的实验表明B1典型的B细胞受体(B1-typical B-cell receptor)能够将B2细胞重编程为B1细胞,这表明B1细胞是由于它们的特殊B细胞受体而出现的。这项研究可能会解决一项持续了几十年的免疫学争论。相关研究结果发表在2019年2月15日的Science期刊上,论文标题为“BCR-dependent lineage plasticity in mature B cells”。在与疾病的斗争中,有一种东西是至关重要的:B细胞。这些特殊的细胞属于一类称为淋巴细胞的白细胞,是免疫系统中唯一能够产生抗体的细胞。这些Y形蛋白(即抗体)结合到在细菌或病毒等外来结构上,从而将它们标记为入侵者,以便吞噬细胞和其他的免疫细胞清除它们。
B1细胞已存在于新生儿中并在天然免疫(也称先天免疫)中起重要作用
B细胞有两种类型。B2细胞构成体内白细胞群体的最大部分,主要在血液和胸腺、脾脏、淋巴结、骨髓等淋巴器官中循环。另一方面,B1细胞主要存在于腹膜腔和胸膜腔中,因此存在于肠道和肺部周围的区域。它们对广泛的外来蛋白(称为抗原)作出反应,但也对身体自身的一些抗原作出反应,因而不同于高度特化的B2细胞。
B1细胞占新生儿所有B淋巴细胞的大部分,但是在成年人中,B1细胞所占的比例仅下降到百分之几。这就是B1细胞被认为是天然免疫载体—先天免疫系统—而B2细胞主要负责适应性免疫的的原因之一。当遭受感染或接种疫苗后,适应性免疫就会出现。
几十年来,免疫学家们一直在争论B细胞的起源
在此之前,科学家们仍不清楚不同类型的B细胞是如何产生的。 论文共同第一作者、马克斯-德尔布吕克分子医学中心免疫调节与癌症研究小组成员Robin Graf博士说,“一些免疫学家认为B1细胞和B2细胞来自不同的祖细胞。其他免疫学家认为特殊的自身反应性B细胞受体会触发B1细胞形成。”
如今,这项新研究为第二个假设的有效性提供了明确的证据。Graf解释道,“我们利用仅在B1细胞中发现的B1典型B细胞受体替换成熟的B2细胞中的B细胞受体。”
经过操纵的B2细胞呈现出B1细胞的特性
这一过程将这些经过操纵的B2细胞转化为B1细胞。Graf报道,“我们能够证实这些细胞获得了B1典型的表面标志物。”这些经过操纵的B2细胞也具有B1细胞的功能特性。Graf 说,“当我们将它们移植到小鼠体内时,它们会归巢到身体中天然发现B1细胞的那些部位。”
此外,这些细胞开始自发地产生抗体。Graf解释道,“这也是B1细胞的典型特征。”更重要的是,一旦B1典型的B细胞受体在B2细胞表面上表达,这些细胞在一到两周的时间内开始大量增殖。这与B1细胞在早期阶段的自然发育非常相似—这个过程很少被研究过。
旷日持久的争论即将结束
在这项研究的后期,Graf测量了这些经过操纵的B2细胞中数千个基因的活性。Graf 报道,“在这项研究中,我们发现这些相同的基因在这些细胞中和正常的B1细胞中都是有活性的。”
Graf期待这项新的研究将让免疫学家相信B1细胞是由于它们的B细胞受体的特异性而出现的。(生物谷 Bioon.com)
VNC Viewer重启
vncserver -kill :1 vncserver :1
基因表达趋势分析(TCseq使用)
TCseq可根据不同的聚类方法将基因按照表达模式分类
BiocManager::install("TCseq") library(TCseq) data <- read.delim('df_TCseq.xls', row.names = 1, sep = '\t', check.names = FALSE) data <- as.matrix(data) tca <- timeclust(data, algo = "cm", k = 6, standardize = TRUE) #character string giving a clustering method. Options are km' (kmeans), 'pam' (partitioning around medoids), 'hc' (hierachical clustering), 'cm' (cmeans). p <- timeclustplot(tca, value = "z-score(TPM)", cols = 3)#所有cluster合并一个图 print(p[[1]])#单一cluster作图 a <- as.data.frame(tca@cluster) table(a) names(a) <- 'Cluster' Cluster2 <- subset(a,Cluster == 2) write.table(Cluster2, file="Cluster2_gene.xls", sep="\t", quote=F, row.names=T, col.names=T)
导出不同cluster基因做功能富集
BS-seq分析流程(二)
DNA甲基化:DNA甲基化为DNA化学修饰的一种形式,能在不改变DNA序列的前提下,改变遗传表现。为表观遗传编码的一部分,是一种外遗传机制。DNA甲基化过程会使甲基添加到DNA分子上,例如在胞嘧啶环的5’碳上:这种5’方向的DNA甲基化方式可见于所有脊椎动物。 在人类细胞内,大约有1%的DNA碱基受到了甲基化。
gzip -dc A.1_bismark_bt2_pe.deduplicated.CX_report.txt.gz > A.1_bismark_bt2_pe.deduplicated.CX_report.txt perl BismarkCX2methykit.pl A.1_bismark_bt2_pe.deduplicated.CX_report.txt #准备注释需要的bed文件(格式12) convert2bed -i gtf < out.gtf > out6.bed grep 'exon' out6.bed > aa && mv aa out6.bed python3 bed6Tobed12.py out6.bed > out12.bed#bed6Tobed12.py #methylKit安装及使用 if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install("methylKit") library(methylKit) file.list = list("A.CG_methykit.txt","B.CG_methykit.txt","C.CG_methykit.txt","D.CG_methykit.txt","E.CG_methykit.txt","F.CG_methykit.txt","G.CG_methykit.txt","H.CG_methykit.txt","I.CG_methykit.txt") myobjDB=methRead(file.list, sample.id=list("Control_1","Control_2","Control_3","Single_1","Single_2","Single_3","Multiple_1","Multiple_2","Multiple_3"), assembly="HZGC", treatment=c(0,0,0,1,1,1,2,2,2), context="CpG", mincov = 10, dbtype = "tabix", dbdir = "methylDB", ) filtered.myobj=filterByCoverage(myobjDB,lo.count=10,lo.perc=NULL, hi.count=NULL,hi.perc=99.9) meth=unite(filtered.myobj, destrand=FALSE) pdf("Correlation.pdf") getCorrelation(meth,plot=TRUE) dev.off() pdf("clusterSamples.pdf") clusterSamples(meth, dist="correlation", method="ward", plot=TRUE) dev.off() pdf("PCAscreeplot.pdf") PCASamples(meth, screeplot=TRUE) dev.off() pdf("PCAcluster.pdf") PCASamples(meth) dev.off() tiles=tileMethylCounts(filtered.myobj,win.size=1000,step.size=1000) meth=unite(tiles, destrand=FALSE) myDiff=calculateDiffMeth(meth,num.cores=10) diffMethPerChr(myDiff,plot=FALSE,qvalue.cutoff=0.01, meth.cutoff=25) myDiff25p.hyper=getMethylDiff(myDiff,difference=25,qvalue=0.01,type="hyper") myDiff25p.hypo=getMethylDiff(myDiff,difference=25,qvalue=0.01,type="hypo") myDiff25p=getMethylDiff(myDiff,difference=25,qvalue=0.01) diffMethPerChr(myDiff,plot=FALSE,qvalue.cutoff=0.01, meth.cutoff=25) save.image("MS_M_S.RData") Diffdataframe=getData(myDiff25p) write.table(Diffdataframe, file="Diffdataframe.xls", sep="\t", quote=F, row.names=T, col.names=T)
R根据基因的表达量筛选基因
data <- read.delim('mouse_gc_log2.xls', row.names = 1, sep = '\t', check.names = FALSE)#行为基因ID列为样本的表达矩阵 data[order(rowSums(data),decreasing=T)[1:3000],] #筛选表达量高的前3000个基因 data[rowSums(data)>1,] #过滤掉表达量低的基因 data1=rowMeans(data)>1 #按平均数筛选 data2=rowSums(data>0)>6 #表达量不为0的样品个数筛选 data=data[data1 & data2,] #联合一下 data$cv <- apply(data, 1, function(x){ sd(x)/mean(x)*100 }) data_df <- data[order(data$cv, decreasing = T)[1:3000], 1:15]#筛选变异系数最大的3000个基因
Gene-rank score计算
data <- read.delim('mouse_gc.xls', row.names = 1, sep = '\t', check.names = FALSE) col_names <- colnames(data) row_names <- rownames(data) data <- as.matrix(data) b <- apply(data, 2, function(y) rank(y) / length(y)) write.table(b, file="gene_rank_score.xls", sep="\t", quote=F, row.names=T, col.names=T) #gene-rank没有改变样本间的相关性
MetabolAnalyze实现Pareto scaling
BiocManager::install("MetabolAnalyze") library("MetabolAnalyze") data <- read.delim('mouse_gc_TMM_cross.xls', row.names = 1, sep = '\t', check.names = FALSE) col_names <- colnames(data) row_names <- rownames(data) data <- as.matrix(data) b = scaling(data,type = "pareto") boxplot(b) write.table(b, file="Pareto_scaled.xls", sep="\t", quote=F, row.names=T, col.names=T)
edgeR之TMM标准化
library(edgeR) library(ggplot2) data <- read.delim('../mouse_TPM_notCross.matrix.xls', row.names = 1, sep = '\t', check.names = FALSE) group <- factor(rep(c('A', 'B', 'C'), each = 3)) y <- DGEList(counts = data, group = group) y <- calcNormFactors(y) logcpm <- cpm(y, prior.count=3, log=TRUE) write.table(logcpm, file="mouse_TMM.xls", sep="\t", quote=F, row.names=T, col.names=T) #dgList <- estimateCommonDisp(y) #dgList <- estimateTagwiseDisp(dgList) #norm_counts.table <- t(t(dgList$pseudo.counts)*(dgList$samples$norm.factors)) #write.table(norm_counts.table, file="mouse_gc_pareto_TMM.xls", sep="\t", quote=F) #pheatmap(log(data+1),cluster_rows=T,cluster_cols=T,scale="none",border_color="white",color=colorRampPalette(rev(c("red","white","blue")))(102))
limma去除批次效应
什么是批次效应(batch effect)?
不同平台的数据,同一平台的不同时期的数据,同一个样品不同试剂的数据,以及同一个样品不同时间的数据等等都会产生一种batch effect 。这种影响如果广泛存在应该被足够重视,否则会导致整个实验和最终的结论失败。比对实验组和对照组,不同的处理是患病和不患病(测序时,先测得疾病,然后测得正常),然后你通过分析,得到很多差异表达的基因。现在问题来了,这个差异表达的结果是和你要研究的因素有关,还是时间有关,这个问题里时间就会成为干扰实验结果的因素,这个效应就是batch effect。
library(limma) data <- read.table("mouse_gc.xls",sep="\t",header = TRUE) batch1 <- c(rep('fish',9),rep('mouse',9)) batch1 <- as.factor(batch1) design <- model.matrix(~0 + batch1)
#data=normalizeBetweenArrays(data)#如果组内的中位数不在同一条水平线上,现在该参数校正,再使用下面的批次校正 new_data <- removeBatchEffect(data[,2:19], batch = batch1) boxplot(data[,2:19]) boxplot(new_data) write.table(new_data, file="removeBatch.xls", sep="\t", quote=F, row.names=T, col.names=T)
limma结果出现负值请参考:https://cloud.tencent.com/developer/article/1680305
参考链接:https://www.omicsclass.com/article/1113