GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析

这篇具有很好参考价值的文章主要介绍了GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面五节,我们使用阿尔兹海默症数据做了一个数据预处理案例,包括如下内容:

GEO生信数据挖掘(一)数据集下载和初步观察

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

GEO生信数据挖掘(三)芯片探针ID与基因名映射处理

GEO生信数据挖掘(四)数据清洗(离群值处理、低表达基因、归一化、log2处理)

GEO生信数据挖掘(五)提取临床信息构建分组,分组数据可视化(绘制层次聚类图,绘制PCA图)

本节目录

结核病基因表达数据(GSE107994)观察

临床形状数据预处理

基因表达数据预处理

绘图观察数据


结核病基因表达数据(GSE107994)观察

由于,在数据分析过程,你拿的数据样式可能会有不同,本节我们以结核病基因表达数据(GSE107994)为例,做一个实践案例。该数据集的临床形状数据和基因表达数据是单独分开的,读取,和处理都需自己改动代码。

GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析,数据挖掘,人工智能,GEO数据挖掘,基因数据分析,生信分析,R

先来看看基因表达数据,这个探针注释工作已经完成了,不需要处理。

GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析,数据挖掘,人工智能,GEO数据挖掘,基因数据分析,生信分析,R

再看看临床形状数据,需要手工删除前面的注释,把后半部分规整的数据保留下来。

GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析,数据挖掘,人工智能,GEO数据挖掘,基因数据分析,生信分析,R

临床形状数据预处理

# 手工删除前面的注释,读文件,转置
pdata <- t(read.delim("GSE107994_series_matrix_clean.txt", header = TRUE, sep = "\t"))

# 手工删除前面的注释,读文件,转置
pdata <- t(read.delim("GSE107994_series_matrix_clean.txt", header = TRUE, sep = "\t"))
pdata  <-pdata[-1,]
pdata_info = pdata[,c(1,7)]
colnames(pdata_info) = c('geo_accession','type')

#观察样本类型的取值都有哪些(结核,潜隐进展,对照和潜隐)
unique(pdata_info[,2])  
#"Leicester_Active_TB"  "Longitudnal_Leicester_LTBI_Progressor" "Leicester_Control"    #"Leicester_LTBI" 

group_data = as.data.frame(pdata_info)

处理前GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析,数据挖掘,人工智能,GEO数据挖掘,基因数据分析,生信分析,R

处理后

GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析,数据挖掘,人工智能,GEO数据挖掘,基因数据分析,生信分析,R

增加不同的类型标签,根据需要,选取实验组和对照组


# 使用grepl函数判断字符串是否包含'Control',并进行相应的修改
group_data$group_easy <- ifelse(grepl("Control", group_data$type ), "Control", "TB")

# 使用grepl函数判断字符串是否包含特定内容,然后进行相应的修改
group_data$group_easy <- ifelse(grepl("Control", group_data$type), "Control",
                                       ifelse(grepl("LTBI", group_data$type), "LTBI","TB"))
# 使用grepl函数判断字符串是否包含特定内容,然后进行相应的修改
group_data$group_more <- ifelse(grepl("Control", group_data$type), "Control",
                                ifelse(grepl("LTBI_Progressor", group_data$type), "LTBI_Progressor",
                                       ifelse(grepl("LTBI", group_data$type), "LTBI","TB")))

#尝试把进展组排除出去

save(group_data,file = "group_data.Rdata")

GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析,数据挖掘,人工智能,GEO数据挖掘,基因数据分析,生信分析,R

例如 我们可以进行 TB(结核) 和LTBI(潜隐结核)实验对照分析。

基因表达数据预处理


读取数据集



install.packages("openxlsx")
library(openxlsx)

# 读基因表达矩阵,第一列为基因名ID
gse_info<- as.data.frame(read.xlsx("GSE107994_Raw.xlsx", sheet = 1))
colnames(gse_info)

后续运行代码过程中,发现基因名称中有全数字的情况,这里做删除操作。

library(dplyr)
dim(gse_info)
#基因里面有数字
gse_info <- gse_info[!grepl("^\\d+$", gse_info$ID), ]  #有效

#基因名全为空
gse_info = gse_info[gse_info$ID != "",]  #无剔除
dim(gse_info) #[1] 58023   176

#负值处理
gse_info[gse_info <= 0] <- 0.0001

#重复值检查
table(duplicated(gse_info$ID))

分组数据条件筛选,TB(结核) 和LTBI(潜隐结核)

#+=====================================================
#================================================
#+========type分组数据条件筛选step3===========
#+====================================

#预处理之前,先筛选出TB组和LTBI组 的数据
unique(group_data[,"group_more"])  #"TB"  "LTBI_Progressor" "Control"    "LTBI" 

#"TB"  "LTBI" 对照,则剔除 "LTBI_Progressor" "Control" 
geo_accession_TB_LTBI <- group_data[group_data$group_more == "LTBI_Progressor" | group_data$group_more == "Control","geo_accession"]
gse_TB_FTBI = gse_info[,!(names(gse_info) %in% geo_accession_TB_LTBI)]



gse_TB_FTBI

低表达过滤(平均值小于1)


#+=====================================================
#================================================
#+========删除 低表达(平均值小于1)基因 step4===========
#+====================================
#+==============================

#新增一列计算平均
gene_avg_expression <- rowMeans(gse_TB_FTBI[, -1])  # 计算每个基因的平均表达量,排除第一列(基因名)
#仅去除在所有样本里表达量都为零的基因(平均值小于1)
gse_TB_FTBI_filtered_genes_1 <- gse_TB_FTBI[gene_avg_expression >= 1, ]

低表达过滤方案二(保留样本表达的排名前50%的基因)

#+=================================================================
#============================================================
#+========删除 低表达(排名前50%)基因 step5===========
#+==========================================
#+================================


#仅保留在一半以上样本里表达的基因

# 计算基因表达矩阵每个基因的平均值
gene_means <- rowMeans(gse_TB_FTBI_filtered_genes_1[,-1])

# 计算基因平均值的排序百分位数
gene_percentiles <- rank(gene_means) / length(gene_means)

# 获取阈值
threshold <- 0.25  # 删除后25%的阈值
#threshold <- 0.5  # 删除后50%的阈值
# 根据阈值筛选低表达基因
gse_TB_FTBI_filtered_genes_2 <- gse_TB_FTBI_filtered_genes_1[gene_percentiles > threshold, ]

# 打印筛选后的基因表达矩阵
dim(gse_TB_FTBI_filtered_genes_2) #[1] 17049   176

删除重复基因,取平均

#+=================================================================
#============================================================
#+========重复基因,取平均值 step6===========
#+==========================================
#+================================


dim(filtered_genes_2) 
table(duplicated(filtered_genes_2$ID))


#把重复的Symbol取平均值
averaged_data <- aggregate(.~ID , filtered_genes_2, mean, na.action = na.pass)  ##把重复的Symbol取平均值

#把行名命名为SYMBOL
row.names(averaged_data) <- averaged_data$ID  
dim(averaged_data)

#去掉缺失值
matrix_na = na.omit(averaged_data)  

#删除Symbol列(一般是第一列)
matrix_final <- subset(matrix_na, select = -1) 
dim(matrix_final) #[1] 22687   175

离群值处理


#+=================================================================
#============================================================
#+========离群值处理 step7==========================
#+==========================================
#+================================


#数据离群处理
#处理极端值
#定义向量极端值处理函数
#用于处理异常值,将超出一定范围的值替换为中位数,以减少异常值对后续分析的影响。
dljdz=function(x) {
  DOWNB=quantile(x,0.25)-1.5*(quantile(x,0.75)-quantile(x,0.25))
  UPB=quantile(x,0.75)+1.5*(quantile(x,0.75)-quantile(x,0.25))
  x[which(x<DOWNB)]=quantile(x,0.5)
  x[which(x>UPB)]=quantile(x,0.5)
  return(x)
}

#第一列设置为行名
matrix_leave=matrix_final_TB_LTBI

boxplot(matrix_leave,outline=FALSE, notch=T, las=2)  ##出箱线图
dim(matrix_leave)

#处理离群值
matrix_leave_res=apply(matrix_leave,2,dljdz)

boxplot(matrix_leave_res,outline=FALSE, notch=T, las=2)  ##出箱线图
dim(matrix_leave_res)

log2 处理

#+=================================================================
#============================================================
#+========log2 处理 step8==========================
#+==========================================
#+================================


# limma的函数归一化,矫正差异  ,表达矩阵自动log2化

#1.归一化不是绝对必要的,但是推荐进行归一化。
#有重复的样本中,应该不具备生物学意义的外部因素会影响单个样品的表达,
#例如中第一批制备的样品会总体上表达高于第二批制备的样品,假设所有样品表达值的范围和分布都应当相似,
#需要进行归一化来确保整个实验中每个样本的表达分布都相似。
#2.归一化要在log2标准化之前做


library(limma) 

exprSet=normalizeBetweenArrays(matrix_leave_res)

boxplot(exprSet,outline=FALSE, notch=T, las=2)  ##出箱线图

## 这步把矩阵转换为数据框很重要
class(exprSet)   ##注释:此时数据的格式是矩阵(Matrix)
exprSet <- as.data.frame(exprSet)


#标准化 表达矩阵自动log2化
qx <- as.numeric(quantile(exprSet, c(0., 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))
LogC <- (qx[5] > 100) ||
  (qx[6]-qx[1] > 50 && qx[2] > 0) ||
  (qx[2] > 0 && qx[2] < 1 && qx[4] > 1 && qx[4] < 2)

#负值全部置为空
#exprSet[exprSet <= 0] <- 0.0001
#去掉缺失值
#exprSet = na.omit(exprSet)  #15654
#save (exprSet,file = "waitlog_data_TB_LTBI.Rdata")

## 开始判断
if (LogC) { 
  exprSet [which(exprSet  <= 0)] <- NaN
  ## 取log2
  exprSet_clean <- log2(exprSet+1)  #@@@@是否加一 加一的话不产生负值@#@¥@#@#@%@%¥@@@@@@
  print("log2 transform finished")
}else{
  print("log2 transform not needed")
}


boxplot(exprSet_clean,outline=FALSE, notch=T, las=2)  ##出箱线图

dataset_TB_LTBI =exprSet_clean

绘图观察数据


#+=================================================================
#============================================================
#+========对照组不同颜色画箱线图 step9==========================
#+==========================================
#+================================

# 使用grepl函数判断字符串是否包含'LTBI',并进行颜色标记,为了画图
group_data_TB_LTBI$group_color <- ifelse(grepl("LTBI", group_data_TB_LTBI$group_more), "yellow", "blue")

#画箱线图查看数据分布
group_list_color = group_data_TB_LTBI$group_color 
boxplot( data.frame(dataset_TB_LTBI),outline=FALSE,notch=T,col=group_list_color,las=2)

dev.off()


#+=================================================================
#============================================================
#+========绘制层次聚类图 step10==========================
#+==========================================
#+================================
#+

#检查表达矩阵的样本名称,和分租信息的样本名称顺序,是否一致对应
colnames(dataset_TB_LTBI)
group_data_TB_LTBI$geo_accession



exprSet =dataset_TB_LTBI
#修改GSM的名字,改为分组信息
#colnames(exprSet)=paste(group_list,1:ncol(exprSet),sep = '')


#定义nodePar
nodePar=list(lab.cex=0.6,pch=c(NA,19),cex=0.7,col='blue')
#聚类
hc=hclust(dist(t(exprSet))) #t()的意思是转置

#绘图
plot(as.dendrogram(hc),nodePar = nodePar,horiz = TRUE)

dev.off()





#+=================================================================
#============================================================
#+========绘制PCA散点样本可视化图 step11===================
#+==========================================
#+================================



##PCA图
#install.packages('ggfortify')
library(ggfortify)
df=as.data.frame(t(exprSet))  #转置后就变成了矩阵
dim(df)  #查看数据维度
dim(exprSet)

df$group=group_data_TB_LTBI$group_more  #加入样本分组信息
autoplot(prcomp(df[,1:ncol(df)-1]),data=df,colour='group')  #PCA散点图

dev.off()

至此,我们对两个数据集进行了预处理工作,下面我们可以对处理完毕的数据进行差异分析了。文章来源地址https://www.toymoban.com/news/detail-725442.html

到了这里,关于GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据挖掘(4.1)--分类和预测

    目录 前言 一、分类和预测 分类 预测 二、关于分类和预测的问题 准备分类和预测的数据 评价分类和预测方法 混淆矩阵 评估准确率 参考资料 分类:离散型、分类新数据 预测:连续型、预测未知值 描述属性:连续、离散 类别属性:离散 有监督学习: 分类 训练样本有标签

    2023年04月21日
    浏览(44)
  • 【数据挖掘】数据挖掘、关联分析、分类预测、决策树、聚类、类神经网络与罗吉斯回归

      数据挖掘是20世纪末兴起的数据智能分析技术,由于有广阔的应用前景而备受重视   广大从事 数据库应用与决策支持 ,以及 数据分析 等学科的科研工作者和工程技术人员迫切需要了解和掌握。 数据挖掘涉及的内容较为广泛,已成为信息社会中广泛应用的一门综合性

    2024年02月08日
    浏览(52)
  • 《数据挖掘基础》实验:Weka平台实现分类算法

    进一步理解分类算法(决策树、贝叶斯),利用weka实现数据集的分类处理,学会调整模型参数,以图或树的形式给出挖掘结果,并解释规则的含义。 随机选取数据集(UCI或data文件夹),完成以下内容:(用三种方法:KNN、C4.5算法、贝叶斯算法) 文件导入与编辑 参数设置说

    2024年02月05日
    浏览(62)
  • 数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘、图算法,搜索算法等

    【机器学习入门与实践】入门必看系列,含数据挖掘项目实战:模型融合、特征优化、特征降维、探索性分析等,实战带你掌握机器学习数据挖掘 专栏详细介绍:【机器学习入门与实践】合集入门必看系列,含数据挖掘项目实战:数据融合、特征优化、特征降维、探索性分析

    2024年02月09日
    浏览(48)
  • 【数据挖掘实战】——舆情分析:对微博文本进行情绪分类

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+   目录 一、背景介绍 二、比赛任务

    2024年02月08日
    浏览(44)
  • 【海量数据挖掘/数据分析】 之 贝叶斯分类算法(朴素贝叶斯分类、贝叶斯分类计算流程、拉普拉斯修正、贝叶斯分类实例计算)

    目录 【海量数据挖掘/数据分析】 之 贝叶斯分类算法(朴素贝叶斯分类、贝叶斯分类计算流程、拉普拉斯修正、贝叶斯分类实例计算) 一、 贝叶斯分类器 1 . 贝叶斯分类器 : 2 . 贝叶斯分类器的类型 : 3 . 正向概率 与 逆向概率 : 4 . 贝叶斯公式 : 有两个事件 , 事件  A , 和事件

    2024年02月12日
    浏览(49)
  • 大数据课程K14——Spark的数据挖掘案例

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 掌握Spark的案例——预测商品需求量; ⚪ 掌握Spark的案例——预测谋杀率; 某种商品的需求量(y,吨)、价格(x1,元/千克)和消费者收入(x2,元)观测值如下表所示。 y= β 1 X1+ β 2 X2+ β 0  y x1 x2   10

    2024年02月11日
    浏览(35)
  • 数据分析与数据挖掘实战案例本地房价预测(716):

    2022 年首届钉钉杯大学生大数据挑战赛练习题目 练习题 A:二手房房价分析与预测 要点: 1、机器学习 2、数据挖掘 3、数据清洗、分析、pyeahcrs可视化 4、随机森林回归预测模型预测房价 1、读入数据、清洗数据: 2、解决相关问题: (一) 根据附件中的数据集,将二手房数据

    2024年02月07日
    浏览(55)
  • 基于数据挖掘机器学习的心脏病患者分类建模与分析

    首先,读取数据集,该数据集是UCI上的心脏病患者数据集,其中包含了 303 条患者信息,每一名患者有 13 个字段记录其基本信息(年龄、性别等)和身体健康信息(心率、血糖等),此外有一个类变量记录其是否患有心脏病。详细的字段信息可见 此处。 类别字段 target 有两

    2024年01月19日
    浏览(56)
  • Python【二手车价格预测案例】数据挖掘

    随着代步工具的普及,“买卖车”需求激增。但对于部分预算有限的个体或家庭而言,购置一辆二手车更为明智。二手车的巨大供给需求催生了近年来日益壮大的二手车市场,但二手车的售卖面临着价格漂浮的问题。 因此,我们的目标是根据卖家或买家提供的参数信息计算价

    2023年04月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包