首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TNBC数据分析-GSE27447-GPL6244

TNBC数据分析-GSE27447-GPL6244

作者头像
生信技能树
发布于 2021-08-25 09:17:22
发布于 2021-08-25 09:17:22
2.7K06
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:6
代码可运行

五月份的学徒专注于GEO数据库里面的表达量芯片数据处理,主要的难点是表达量矩阵获取和探针的基因名字转换,合理的分组后就是标准的差异分析,富集分析。主要是参考我八年前的笔记:

下面是sophie的投稿

数据集介绍

  • GEO链接:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE27447
  • 芯片平台:GPL6244 [HuGene-1_0-st] Affymetrix Human Gene 1.0 ST Array [transcript (gene) version] 链接:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL6244

样品共19个,14 TNBC and 5 non-TNBC ,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GSM678364 non-triple negative breast cancer tumor B2
GSM678365 non-triple negative breast cancer tumor B4
GSM678366 non-triple negative breast cancer tumor B5
GSM678367 non-triple negative breast cancer tumor B8
GSM678368 non-triple negative breast cancer tumor B9
GSM678369 triple negative breast cancer tumor B12
GSM678370 non-triple negative breast cancer tumor B14
GSM678371 non-triple negative breast cancer tumor B17
GSM678372 non-triple negative breast cancer tumor B20
GSM678373 triple negative breast cancer tumor B23
...
  • 文章链接是:FZD7 has a critical role in cell proliferation in triple negative breast cancer. Oncogene 2011 Oct 27;30(43):4437-46. PMID: [21532620] (https://www.ncbi.nlm.nih.gov/pubmed/21532620)

核心步骤

1. R包加载
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list = ls())
library(AnnoProbe)
library(GEOquery)  
library(ggplot2) 
library(ggstatsplot) 
library(reshape2)
library(patchwork)
2. 获取并且检查表达量矩阵
  • 主要是判断表达矩阵是否需要log
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gse_number <- 'GSE27447'
gpl_number = "GPL10558"
gset <- geoChina(gse_number)
a=gset[[1]] 
dat=exprs(a) 
dim(dat)

# 检查,判断需不需要取log
dat[1:4,1:4] 
dat = log2(dat)
dat[1:4,1:4] 
library(limma)
dat=normalizeBetweenArrays(dat)

# 画图,使用ggplot需宽数据变长数据
class(dat)
data <- as.data.frame(dat)
data <- melt(data)
head(data)
title <- paste (gse_number, "/", a@annotation, sep ="")
p1 <- ggplot(data,aes(x=variable,y=value))+
      geom_boxplot()+
      theme_ggstatsplot()+
      theme(panel.grid = element_blank(),
            axis.text=element_text(size=10,face = 'bold'),
            axis.text.x=element_text(angle=90),
            plot.title = element_text(hjust = 0.5,size =15))+
      xlab('')+
      ylab('')+
      ggtitle(title)
p1

可以看到,处理前后我们的表达量矩阵的表达量范围箱线图如下所示:

image-20210814120711030

根据生物学背景及研究目的人为分组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pd = pData(a)
dim(pd)
library(stringr)
group_list=ifelse(str_detect(pd$`disease state:ch1`,"non-triple"),"control","TNBC")
group_list = factor(group_list,
               levels = c("control","TNBC"))
table(group_list)
  • 为了演示方便,我们这里仅仅是区分"non-TNBC"和“TNBC”。 probe_id 和symbol的转换并对应至表达矩阵 获取芯片注释信息 代码如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(stringr)
ids=idmap('GPL6244')
#超级好用的函数,首选,如果不行再尝试其他
dim(ids)

可以看到此芯片的探针与基因ID或者symbol的对应关系如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> head(ids)
           probe_id   symbol
586103 ILMN_1343291   EEF1A1
586104 ILMN_1343295    GAPDH
586105 ILMN_1651209 SLC35E2A
586106 ILMN_1651221   EFCAB1
586107 ILMN_1651228    RPS28
586108 ILMN_1651229    IPO13
探针基因ID对应以及去冗余

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyr)
library(dplyr)
#接下来,使探针与基因symbol一一对应
ids=as.data.frame(ids)
table(rownames(dat) %in% ids$probe_id)
dat=dat[rownames(dat) %in% ids$probe_id,]
ids=ids[match(rownames(dat),ids$probe_id),]
ids$probe_id=as.character(ids$probe_id)
rownames(dat)=ids$probe_id
ids=ids[ids$probe_id %in%  rownames(dat),]
dat=dat[ids$probe_id,]

#下一步是:基因symbol去冗余-按照表达量最大值筛选
ids$median=apply(dat,1,median)
#ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),] 
#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]#将symbol这一列取取出重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
#获得去冗余之后的dat/exp
dat=dat[ids$probe_id,] #新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
#把ids的symbol这一列中的每一行给dat作为dat的行名
rownames(dat)=ids$symbol
dat[1:4,1:4]
table(group_list)
save(dat,pd,ids,group_list,gse_number,gpl_number,file = "step1-output.Rdata")

最后得到了表达量矩阵如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> dat[1:4,1:4]  #保留每个基因ID第一次出现的信息
       GSM678364 GSM678365 GSM678366 GSM678367
ZZZ3    8.662448  9.804468  9.144349  9.707848
ZZEF1   8.788682  9.189457  8.981535  8.599375
ZYX    10.648260 10.034978 10.622474 10.430494
ZYG11B  8.769574  8.913443  8.958082  8.715722

以及最简单的2分组,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>table(group_list)
group_list
control    TNBC 
     14       5  

标准步骤之质控

得到标准的3张图,包括主成分分析,高变基因的表达量热图,样品相关性热图

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 下面是画PCA的必须操作,需要看说明书。
exp <- dat
exp=t(exp)#画PCA图时要求是行名时样本名,列名时探针名,因此此时需要转换
exp=as.data.frame(exp)#将matrix转换为data.frame 
library("FactoMineR")#画主成分分析图需要加载这两个包
library("factoextra") 
library(ggstatsplot)
dat.pca <- PCA(exp , graph = FALSE)#现在exp最后一列是group_list,需要重新赋值给一个dat.pca,这个矩阵是不含有分组信息的
dim(exp)
exp[,12488]
# 画图,主成分分析图p2
this_title <- paste0(gse_number,'_PCA')
p2 <- fviz_pca_ind(dat.pca,
                         geom.ind = "point", # show points only (nbut not "text")
                         col.ind = group_list, # color by groups
                         palette = "Dark2",
                         addEllipses = TRUE, # Concentration ellipses
                         legend.title = "Groups")+
                   ggtitle(this_title)+
                   theme_ggstatsplot()+
                   theme(plot.title = element_text(size=15,hjust = 0.5))

p2

# 下面是1000_sd热图
library(pheatmap)
cg=names(tail(sort(apply(dat,1,sd)),1000))#apply按行('1'是按行取,'2'是按列取)取每一行的方差,从小到大排序,取最大的1000个
n=t(scale(t(dat[cg,]))) 
n[n>2]=2 
n[n< -2]= -2
n[1:4,1:4]
ac=data.frame(Group=group_list)
rownames(ac)=colnames(n)
# 画图,高变基因的表达量热图p3
p3 <- pheatmap::pheatmap(n,
               show_colnames =F,
               show_rownames = F,
               main = gse_number,
               annotation_col=ac,
               breaks = seq(-3,3,length.out = 100))#因为已经手动设置了表达量最大值,所以,可以不用设置break
p3

# 画图,样品相关性热图p4
colD=data.frame(Group=group_list)
exprSet=t(exp)
rownames(colD)=colnames(exprSet)#问题-exprSet设置成转置后的exp
p4 <- pheatmap::pheatmap(cor(exprSet),#热图对样本-列 操作
                   annotation_col = colD,
                   show_rownames = F,
                   main = gse_number
                   )
p4

出图如下:

标准步骤之limma差异分析

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(limma)
design=model.matrix(~factor( group_list ))
fit=lmFit(dat,design)
fit=eBayes(fit)
options(digits = 4) #设置全局的数字有效位数为4
deg = topTable(fit,coef=2,adjust='BH', n=Inf) 
#结果检验
boxplot(dat[rownames(deg)[1],]~group_list)
deg[1,]
#核对无误

差异分析结果前10行如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> deg[1:10,]
         logFC AveExpr      t   P.Value adj.P.Val     B  symbol
NEK11   -1.650   6.932 -5.925 8.582e-06   0.07263 2.905   NEK11
EGR2     2.171   6.356  5.836 1.044e-05   0.07263 2.761    EGR2
HOXB3   -1.468   7.031 -5.790 1.157e-05   0.07263 2.685   HOXB3
ARFGEF3 -1.904   9.214 -5.546 1.995e-05   0.09393 2.281 ARFGEF3
NUDT16  -1.015   6.484 -5.427 2.609e-05   0.09828 2.080  NUDT16
CHRM3    2.228   5.439  5.233 4.045e-05   0.11969 1.749   CHRM3
C3orf14 -2.128   6.837 -5.192 4.448e-05   0.11969 1.677 C3orf14
ANKEF1  -1.333   7.065 -5.123 5.199e-05   0.12008 1.558  ANKEF1
TSPAN1  -4.524   7.740 -5.080 5.737e-05   0.12008 1.483  TSPAN1
GFRA3    4.226   3.723  4.940 7.916e-05   0.14912 1.237   GFRA3

有了差异分析就可以进行标准的可视化,包括火山图和上下调的差异基因热图

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nrDEG=deg
head(nrDEG)
attach(nrDEG)
plot(logFC,-log10(P.Value))#简单画图看一下
df=nrDEG
df$v= -log10(P.Value) #df新增加一列'v',作为新的绘图参数,值为-log10(P.Value) 
#设定上下调基因
df$g=ifelse(df$P.Value>0.05,'stable', 
              ifelse( df$logFC >2,'up', 
                      ifelse( df$logFC < -2,'down','stable') )
)
#统计上下调基因数量
table(df$g)
#给绘制火山图用的数据新增一列symbol
df$name=rownames(df)
head(df)
logFC_t = 2
#设置可循环使用的plot标题
this_tile <- paste0('Cutoff for logFC is ',round(logFC_t,3),
                      '\nThe number of up gene is ',nrow(df[df$g == 'up',]) ,
                      '\nThe number of down gene is ',nrow(df[df$g == 'down',])
)
#画图,火山图p5
p5 <- ggplot(data = df, 
              aes(x = logFC, 
                  y = -log10(P.Value))) +
    geom_point(alpha=0.6, size=1.5, 
               aes(color=g)) +
    ylab("-log10(Pvalue)")+
    scale_color_manual(values=c("#34bfb5", "#828586","#ff6633"))+
    geom_vline(xintercept= 0,lty=4,col="grey",lwd=0.8) +
    xlim(-3, 3)+
    theme_classic()+
    ggtitle(this_tile )+
    theme(plot.title = element_text(size=12,hjust = 0.5),
          legend.title = element_blank(),
          )
p5

#热图
library(pheatmap)
x=deg$logFC 
names(x)=rownames(deg) 
cg=c(names(head(sort(x),100)),
       names(tail(sort(x),100)))#对x进行从小到大排列,取前100及后100,并取其对应的探针名,作为向量赋值给cg
n=t(scale(t(dat[cg,])))
n[n>2]=2
n[n< -2]= -2
n[1:4,1:4]
pheatmap(n,show_colnames =F,show_rownames = F)
ac=data.frame(group=group_list)
rownames(ac)=colnames(n) 
# 画图,上下调的差异基因热图p6
p6 <- pheatmap(n,show_colnames =F,
           show_rownames = F,
           cluster_cols = T, 
           main = gse_number,
           annotation_col=ac) 
p6

出图如下:

标准步骤之生物学功能数据库注释

我们这里不根据任何武断的阈值来区分统计学显著的上下调基因,而是直接根据基因的变化情况排序进行gsea分析,而且仅仅是展示kegg这个生物学功能数据库的注释情况!

symbol 和 ENTREZID转换

gsea分析需要基因的ENTREZID,根据物种进行转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 加ENTREZID列,用于富集分析(symbol转entrezid,然后inner_join)
deg$symbol=rownames(deg)
library(org.Hs.eg.db)
library(clusterProfiler)
s2e <- bitr(deg$symbol, 
            fromType = "SYMBOL",
            toType = "ENTREZID",
            OrgDb = org.Hs.eg.db)#人
#bitr()用于SYMBOLENTREZID
#其他物种http://bioconductor.org/packages/release/BiocViews.html#___OrgDb
dim(deg)
dim(s2e)
setdiff(deg$symbol,s2e$SYMBOL)
DEG <- inner_join(deg,s2e,by=c("symbol"="SYMBOL"))
gsea富集
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)
library(ggplot2)  
geneList=DEG$logFC
names(geneList)=DEG$ENTREZID
geneList=sort(geneList,decreasing = T)
head(geneList)
library(clusterProfiler)
kk_gse <- gseKEGG(geneList     = geneList,
                  organism     = 'hsa',#按需替换
                  #nPerm        = 1000,
                  minGSSize    = 10,
                  pvalueCutoff = 0.9,
                  verbose      = FALSE)
tmp=kk_gse@result
dim(tmp)
kk=DOSE::setReadable(kk_gse, OrgDb='org.Hs.eg.db',keyType='ENTREZID')#按需替换
#DOSE::setReadable():mapping geneID to gene Symbol
tmp=kk@result
dim(tmp)
pro='comp1'
write.csv(kk@result,paste0(pro,'_kegg.gsea.csv'))
save(kk,file = 'gsea_kk.Rdata')
富集可视化

上面的kk这个变量就存储了kegg这个生物学功能数据库的gsea分析结果,我们进行简单可视化,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 展现前6个上调通路和6个下调通路
down_k <- kk_gse[tail(order(kk_gse$enrichmentScore,decreasing = F)),];down_k$group=-1
up_k <- kk_gse[head(order(kk_gse$enrichmentScore,decreasing = F)),];up_k$group=1

dat=rbind(up_k,down_k)
colnames(dat)
dat$pvalue = -log10(dat$pvalue)
dat$pvalue=dat$pvalue*dat$group 
dat=dat[order(dat$pvalue,decreasing = F),]
# gsea分析结果p7
p7<- ggplot(dat, aes(x=reorder(Description,order(pvalue, decreasing = F)), y=pvalue, fill=group)) + 
  geom_bar(stat="identity") + 
  scale_fill_gradient(low="#34bfb5",high="#ff6633",guide = FALSE) + 
  scale_x_discrete(name ="Pathway names") +
  scale_y_continuous(name ="log10P-value") +
  coord_flip() + 
  theme_ggstatsplot()+
  theme(plot.title = element_text(size = 15,hjust = 0.5),  
        axis.text = element_text(size = 12,face = 'bold'),
        panel.grid = element_blank())+
  ggtitle("Pathway Enrichment") 
p7
#具体看上面条形图里面的每个通路的gsea分布情况p8
library(enrichplot)
p8 <- gseaplot2(kk, geneSetID = rownames(down_k))+
      gseaplot2(kk, geneSetID = rownames(up_k))
p8

出图如下:

如果你也有类似的数据分析需求,却苦于不会写代码,可以考虑找我们的工程师帮忙哦!

转录组产品线

公共数据库产品线

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

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TNBC数据分析-GSE76275-GPL570
五月份的学徒专注于GEO数据库里面的表达量芯片数据处理,主要的难点是表达量矩阵获取和探针的基因名字转换,合理的分组后就是标准的差异分析,富集分析。主要是参考我八年前的笔记:
生信技能树
2021/08/25
2.5K0
TNBC数据分析-GSE76275-GPL570
illumina芯片负数矩阵竟然也可以分析,只是结果诡异-学徒作业
不正常的illumina芯片数据如果使用lumi包的lumiR.batch函数读取会失败 (qq.com)
生信菜鸟团
2023/09/09
4140
illumina芯片负数矩阵竟然也可以分析,只是结果诡异-学徒作业
转录组GSE105789_小鼠数据下游分析注意事项
简单记录下GSE105789小鼠数据的下游分析的主要事项,与human的数据分析的主要区别是在进行id转换、kegg、go、gsea时,需要注意数据库和物种信息,应该选择小鼠。
sheldor没耳朵
2024/08/21
2620
转录组GSE105789_小鼠数据下游分析注意事项
GEO表达芯片数据分析
---title: "GEO表达芯片数据分析"output: html_documentdate: "2023-03-20"---关于该流程代码的说明:(1)本流程仅适用于GEO芯片表达数据,以"GSE56649"为例(2)先在GEO数据库中确定是否为"Expression profiling by array",不是的话不能使用本流程!(3)注意需要自行修改或判断的代码一般放在了两个空行之间(4)代码的注释有一丢丢多,目的是为了更好地帮助大家理解1.下载数据,提取表达矩阵、临床信息和GPL编号rm(lis
小叮当aka
2023/03/23
3.3K1
GEO数据库中芯片数据分析思路
AnnoProbe是曾建明老师2020年开发的一款用于下载GEO数据集并注释的R包,收录在tinyarray里。 idmap##根据所给的GPL号,返回探针的注释 geoChina##根据所给的GSE号,下载对应的表达矩阵 annoGene##根据gencode中的GTF文件注释基因ID
小张小张
2023/05/25
2K0
生信技能树GEO数据挖掘直播配套笔记
二代测序(RNA_seq):如果是counts 可选择limma的voom算法或者edgeR或者DESeq2。 如果是FPKM或TPM可选择limma,注意:edgeR和DESeq2只能处理count注意:count做差异分析计算上下调,FPKM或TPM进行下游可视化
生信技能树
2022/06/08
2.1K0
生信技能树GEO数据挖掘直播配套笔记
IF10+杂志文章只用统计学显著的差异基因做GSEA就合理吗?
Figure 2. CIH aggravates fibrosis, inflammation, and lipid accumulation in hepatocytes with PAOA stimulation
生信技能树
2025/02/05
1380
IF10+杂志文章只用统计学显著的差异基因做GSEA就合理吗?
指定通路绘制gsea图热图和火山图
但是我们直接是对gsea分析结果的最终es值在可视化,所以是行是通路,列是癌症的,数值是gsea的es打分的矩阵。对初学者来说, 跳过了大量细节,所以跟这个教程会比较吃力,有粉丝就提问了希望可以对这些通路在在具体的癌症里面细化展示,比如绘制gsea图,热图和火山图。
生信技能树
2022/07/26
2.5K0
指定通路绘制gsea图热图和火山图
GEO数据库挖掘
输入数据是数值型矩阵/数据框,颜色的变化表示数值的大小。有相关性热图和差异基因热图。
叮当猫DDM
2023/07/16
8451
在学术不端的数据取舍上面反复横跳
然后马上这些策略就被应用到了单细胞转录组数据挖掘层面,因为反正也不需要自己产出数据了,过去三五年间单细胞的火热带动了海量的各种实验设计的公开的表达量矩阵。比如这个文献:《Lipid-related protein NECTIN2 is an important marker in the progression of carotid atherosclerosis: An intersection of clinical and basic studies》就是看了看两个分组的具体的基因的差异,在普通bulk转录组和单细胞转录组两个数据集里面,如下所示:
生信技能树
2024/01/11
2970
在学术不端的数据取舍上面反复横跳
GSE75421芯片数据分析-1
想着去年学习的时候,也是学到芯片数据分析处理,然后说要去学习一下TCGA数据分析,然后就没有然后了
生信菜鸟团
2025/04/27
1330
GSE75421芯片数据分析-1
​文章复现—bulkRNA转录组结合机器学习等进行相关疾病研究01—多数据集去除批次效应后联合分析以及火山图标准绘制
《Identification of cuproptosisassociated subtypes and signature genes for diagnosis and risk prediction of Ulcerative colitis based on machine learning》基于机器学习的溃疡性结肠炎诊断和风险预测中铜死亡相关亚型和特征基因的鉴定(IF:5.7) Date:2023.04
sheldor没耳朵
2024/10/25
2874
​文章复现—bulkRNA转录组结合机器学习等进行相关疾病研究01—多数据集去除批次效应后联合分析以及火山图标准绘制
三阴性乳腺癌表达数据探索笔记之GSVA分析
GSVA对数据库中的每一个通路在每个样本中算了一个值,相当于GSEA的enrichment score, 如果得分越高,说明这个通路在该样本中被改变的越严重。
生信技能树
2020/10/26
4.7K0
三阴性乳腺癌表达数据探索笔记之GSVA分析
LncRNA芯片的一般分析流程
同样的策略,我们也可以应用到lncRNA的学习。所以昨天我们发布了:lncRNA的一些基础知识 ,那么接下来我们需要分享的就是lncRNA芯片的一般分析流程和lncRNA-seq数据的一般分析流程!
生信技能树
2019/12/31
3.7K0
LncRNA芯片的一般分析流程
生物信息数据分析教程视频——14-芯片数据的表达差异分析
视频地址:http://mpvideo.qpic.cn/0bc33iaakaaag4amkcjtmzrvbwwdaxnaabia.f10002.mp4? 参考文章: 生信入门第3课 | 了解基因芯片
DoubleHelix
2022/12/15
4330
RNA-seq 231023
参考https://www.zhihu.com/people/gu_chen/posts?page=2
素素
2023/10/31
5740
GEO数据挖掘
箱型图不显示原始数据点,而是采用样本数据,根据四分位数用盒和线来显示值的范围。此外,它们用星号显示落在箱须之外的离群值
可乐同学与生信死磕到底
2024/04/08
3060
GEO
生成Group向量的三种常规方法,三选一,选谁就把第几个逻辑值写成T,另外两个为F。如果三种办法都不适用,可以继续往后写else if
浅念
2023/04/04
1.6K0
跟小洁老师学习GEO的第二天
geoChina的用法 #数据下载 rm(list = ls()) library(GEOquery) #先去网页确定是否是表达芯片数据,不是的话不能用本流程。 gse_number = "GSE28345" library(AnnoProbe) eSet <- geoChina(gse_number, destdir = '.') class(eSet) length(eSet) eSet = eSet[[1]] 批量安装R包 options("repos"="https://mirrors.ustc.e
贝诺酯
2023/03/19
5620
剔除了两个样品前后的差异分析结果没什么区别?
其中一个小伙伴在学员交流群里面晒图就很有意思,看起来就很明显的两个样品分组可能是有误,或者说是两个离群点。文献是:《Changing human hair fibre colour and shape from the follicle》,对应的数据集是GSE193983,这个实验设计主要是为了探究不同毛发形状(直发与卷发)在毛囊中的基因表达差异。研究团队采用了微阵列技术来比较直发和极卷发之间的基因表达水平。总共是11位成年男性捐赠者 ,从每位志愿者那里收集了50个毛囊:6位极卷发捐赠者和5位直发捐赠者,均为非秃顶成年男性,年龄在19至40岁之间。
生信技能树
2024/11/21
1200
剔除了两个样品前后的差异分析结果没什么区别?
相关推荐
TNBC数据分析-GSE76275-GPL570
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档