前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在什么情况下癌症样本与正常样本是分不开的呢?

在什么情况下癌症样本与正常样本是分不开的呢?

作者头像
生信技能树
发布2025-01-07 08:24:25
发布2025-01-07 08:24:25
4900
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

今天遇到的数据集合为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE54236,数据情况如下:

首先还是标准的芯片数据分析得到表达矩阵:

代码语言:javascript
代码运行次数:0
运行
复制
## 魔幻操作,一键清空~
rm(list = ls())
library(AnnoProbe)
library(GEOquery)
library(ggplot2)
library(ggstatsplot)
library(patchwork)
library(reshape2)
library(stringr)
library(limma)
library(tidyverse)
getOption('timeout')
options(timeout=10000)

## 获取并且检查表达量矩阵
## ~~~gse编号需修改~~~
gse_number <- "GSE54236"
dir.create(gse_number)
setwd(gse_number)
getwd()
list.files() 

#gset <- geoChina(gse_number)
gset <- getGEO(gse_number, destdir = '.', getGPL = T)
gset[[1]]

a <- gset[[1]]
dat <- exprs(a) # a现在是一个对象,取a这个对象通过看说明书知道要用exprs这个函数
dim(dat)        # 看一下dat这个矩阵的维度
dat[1:4,1:4]    # 查看dat这个矩阵的1至4行和1至4列,逗号前为行,逗号后为列
range(dat)
table(is.na(dat))
#dat[is.na(dat)] <- 0
dat <- na.omit(dat)
range(dat)
dim(dat)

## 根据生物学背景及研究目的人为分组
## 通过查看说明书知道取对象a里的临床信息用pData
## 挑选一些感兴趣的临床表型。
pd <- pData(a)
colnames(pd)
pd$title
pd$characteristics_ch1
table(pd$characteristics_ch1)

## ~~~分组信息编号需修改~~~
group_list <- ifelse(grepl('Non tumor',pd$title ,ignore.case = T ), "control","case")
group_list <- factor(group_list, levels = c("control","case"))
table(group_list)

## 查看注释平台gpl 获取芯片注释信息
a
a@annotation
gpl <- getGEO(filename=paste0(a@annotation,".soft.gz"))
class(gpl)
gpl_anno <- gpl@dataTable@table
colnames(gpl_anno)

id2name <- gpl_anno[,c("ID" ,"GENE_SYMBOL")]
colnames(id2name) <- c("ID","GENE_SYMBOL")
# 1.过滤掉空的探针
id2name <- na.omit(id2name)
id2name <- id2name[which(id2name$GENE_SYMBOL!=""), ]
# 2.过滤探针一对多
id2name <- id2name[!grepl("\\///",id2name$GENE_SYMBOL), ]
head(id2name)

# 3.多对一取均值
# 合并探针ID 与基因,表达谱对应关系
# 提取表达矩阵
dat <- dat %>% 
  as.data.frame() %>% 
  rownames_to_column("ID")

exp <- merge(id2name, dat, by.x="ID", by.y="ID")

# 多对一取均值
exp <- avereps(exp[,-c(1,2)],ID = exp$GENE_SYMBOL) %>% 
  as.data.frame()

dat <- as.matrix(exp[,pd$geo_accession])
dim(dat)
fivenum(dat['CRP',])
fivenum(dat['GAPDH',])
dat[1:5, 1:6]
save(gse_number, dat, group_list, pd, file = 'step1_output.Rdata')

得到的表达矩阵如下:

进行简单的质控,绘制三张经典的质控图:

代码语言:javascript
代码运行次数:0
运行
复制
## 数据检查
load( file = 'step1_output.Rdata')
source('../scripts/run_check.R')
run_check(dat, group_list, target_gene='AFP', pro=gse_number,path='./')

结果如下,PCA图中 可以看到 肿瘤样本与对照样本全完的混在了一起

进行简单的差异分析:

代码语言:javascript
代码运行次数:0
运行
复制
## 人类看家基因列表如下(部分基因,最常用的是CRP和CRP)
source('../scripts/run_DEG.R')
group_list
deg <- run_DEG(dat, group_list, target_gene=c('AFP'),pro=gse_number,path='./')
head(deg)
table(deg$g)

肿瘤与正常癌旁样本的差异基因数量非常少:

如果只用差异基因做PCA分析:

代码语言:javascript
代码运行次数:0
运行
复制
exp <- dat[deg$g!="stable",]
## 下面是画PCA的必须操作,需要看说明书。
exp=t(exp)#画PCA图时要求是行名时样本名,列名时探针名,因此此时需要转换
exp=as.data.frame(exp)#将matrix转换为data.frame 

library("FactoMineR")#画主成分分析图需要加载这两个包
library("factoextra")  
#~~~主成分分析图p2~~~
dat.pca <- PCA(exp , graph = FALSE)#现在exp最后一列是group_list,需要重新赋值给一个dat.pca,这个矩阵是不含有分组信息的
pro <- gse_number
this_title <- paste0(pro,'_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=12,hjust = 0.5))

p2

如果使用sd值指标挑选:

代码语言:javascript
代码运行次数:0
运行
复制
cg <- names(tail(sort(apply(dat,1,sd)),1000))#apply按行('1'是按行取,'2'是按列取)取每一行的方差,从小到大排序,取最大的1000个

exp <- dat[cg,]
## 下面是画PCA的必须操作,需要看说明书。
exp=t(exp)#画PCA图时要求是行名时样本名,列名时探针名,因此此时需要转换
exp=as.data.frame(exp)#将matrix转换为data.frame 

library("FactoMineR")#画主成分分析图需要加载这两个包
library("factoextra")  
#~~~主成分分析图p2~~~
dat.pca <- PCA(exp , graph = FALSE)#现在exp最后一列是group_list,需要重新赋值给一个dat.pca,这个矩阵是不含有分组信息的
pro <- gse_number
this_title <- paste0(pro,'_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=12,hjust = 0.5))

p2

要是使用差异最大的那部分基因,还是强行可以勉强分开的。

那什么时候肿瘤样本和癌旁样本分不开呢?

在使用PCA(主成分分析)分析肿瘤样本与癌旁样本时,肿瘤样本和癌旁样本可能在以下情况下分不开:

  1. 样本间差异性不足:如果肿瘤样本和癌旁样本在基因表达上的差异不够显著,PCA可能无法有效地将它们区分开来。这可能是因为肿瘤和癌旁组织在分子层面的异质性较低,或者肿瘤微环境与正常组织的差异不大。
  2. 样本量不足:如果分析的样本数量较少,PCA可能无法捕捉到足够的变异性来区分肿瘤和癌旁样本。样本量的不足可能导致分析结果的不稳定和不准确。
  3. 数据质量问题:如果输入PCA的数据质量不高,例如存在大量的噪声或者技术偏差,这可能会掩盖肿瘤和癌旁样本之间的真实差异,导致PCA分析无法有效分离样本。
  4. 预处理不当:在进行PCA之前,数据需要适当的预处理,包括标准化、去除批次效应等。如果预处理步骤不当,可能会影响PCA分析的结果,使得肿瘤和癌旁样本难以区分。
  5. 肿瘤微环境的复杂性:肿瘤微环境可能包含多种细胞类型,包括免疫细胞、基质细胞等,这些细胞的存在可能使得肿瘤样本的基因表达模式与癌旁样本相似,从而难以通过PCA区分。
  6. 肿瘤异质性:肿瘤本身的异质性也可能导致PCA分析中肿瘤样本与癌旁样本难以区分。不同肿瘤样本之间可能存在显著的基因表达差异,这使得它们在PCA分析中难以与癌旁样本区分开来。
  7. 分析方法的选择:PCA是一种线性降维技术,对于非线性关系可能不够敏感。如果肿瘤和癌旁样本之间的差异是非线性的,可能需要考虑使用其他更复杂的分析方法。

总结来说,肿瘤样本和癌旁样本在PCA分析中分不开可能是由于样本间差异性不足、样本量不足、数据质量问题、预处理不当、肿瘤微环境的复杂性、肿瘤异质性以及分析方法的选择等多种因素造成的。

学徒作业

老板给我发了另外一个数据集,也是存在肿瘤样本与癌旁样本分不开的情况,数据来自文献《A Candidate Molecular Biomarker Panel for the Detection of Bladder Cancer》,数据编号为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE31189,

使用上面的代码,去做做看。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先还是标准的芯片数据分析得到表达矩阵:
  • 进行简单的差异分析:
  • 如果只用差异基因做PCA分析:
  • 如果使用sd值指标挑选:
  • 那什么时候肿瘤样本和癌旁样本分不开呢?
  • 学徒作业
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档