今天给大家带来一篇干货满满的推文,教大家如何用DeepSeek工具轻松搞定GEO芯片数据挖掘!无论你是科研小白还是数据分析高手,这篇文章都能让你快速上手,掌握GEO芯片数据挖掘的核心技巧!
1. 什么是GEO芯片数据?GEO(Gene Expression Omnibus)是一个公共数据库,存储了大量的基因表达数据。通过分析这些数据,我们可以发现基因在不同条件下的表达差异,从而揭示疾病的潜在机制或药物的作用靶点。
2. 为什么要用DeepSeek?DeepSeek是一款强大的生物信息学工具,专门用于处理和分析GEO芯片数据。它集成了数据下载、预处理、差异表达分析、功能富集分析等多种功能,操作简单,结果可靠,是科研工作者的得力助手!
3. 手把手教程:从数据下载到差异表达分析
Step 1:数据下载
首先,打开GEO数据库,找到你感兴趣的芯片数据集。复制数据集编号(如GSE12345),然后在DeepSeek中输入编号,点击下载。DeepSeek会自动下载并解压数据文件,省去了手动操作的麻烦。
Step 2:数据预处理
下载完成后,DeepSeek会自动进行数据预处理,包括背景校正、归一化、探针注释等。这些步骤确保了数据的质量,为后续分析打下坚实基础。
Step 3:差异表达分析
接下来,DeepSeek会根据你设定的条件(如对照组 vs 实验组)进行差异表达分析。通过统计检验,筛选出显著差异表达的基因。DeepSeek还提供了多种可视化工具,如火山图、热图等,帮助你直观地展示分析结果。
Step 4:功能富集分析
最后,DeepSeek会对差异表达基因进行功能富集分析,包括GO(Gene Ontology)和KEGG(Kyoto Encyclopedia of Genes and Genomes)分析。这些分析可以帮助你理解差异基因的生物学功能和参与的代谢通路,为后续实验提供重要线索。
4. 实例演示。为了让大家更好地理解,我们以GSE7014数据集为例,演示如何使用DeepSeek进行数据挖掘。
########################糖尿病数据综合分析####################################
rm(list = ls())
getwd()
gc()
########--------GPL570平台-------########
# 加载包
library(GEOquery)
library(limma)
library(ggplot2)
library(pheatmap)
library(clusterProfiler)
library(org.Hs.eg.db)
library(DOSE)
library(STRINGdb)
library(annotate)
library(hgu133plus2.db) # GPL570 对应的注释包
## 数据加载
# 下载 GSE7014 数据集
gse <- getGEO("GSE7014", GSEMatrix = TRUE)
# 提取表达矩阵
exprs <- exprs(gse[[1]])
# 提取样本信息
pdata <- pData(gse[[1]])
# 查看样本信息
head(pdata)
# 查看表达矩阵
dim(exprs)
head(exprs)
## 数据清洗
# 检查是否有缺失值
sum(is.na(exprs))
# 如果有缺失值,可以使用impute包进行填补
if (sum(is.na(exprs)) > 0) {
BiocManager::install("impute")
library(impute)
exprs <- impute.knn(exprs)$data
}
# 标准化数据
exprs <- normalizeBetweenArrays(exprs, method = "quantile")
# 查看标准化后的数据
boxplot(exprs, main = "Normalized Expression Data")
##探针ID转换
# 使用 hgu133plus2.db 包将探针 ID 转换为基因符号
probe_ids <- rownames(exprs)
gene_symbols <- mapIds(hgu133plus2.db, keys = probe_ids, column = "SYMBOL", keytype = "PROBEID")
# 去除未注释的探针
exprs <- exprs[!is.na(gene_symbols), ]
gene_symbols <- gene_symbols[!is.na(gene_symbols)]
# 合并重复基因符号(取平均值)
exprs <- aggregate(exprs, by = list(gene_symbols), FUN = mean)
rownames(exprs) <- exprs$Group.1
exprs <- exprs[, -1] # 去除分组列
exprs = log2(exprs)
## 差异分析
# 创建设计矩阵
groups <- pdata$description
CTRL <- exprs[,grep('N',groups)]
DM1 <- exprs[,grep('DM1',groups)]
DM2 <- exprs[,grep('DM2',groups)]
exprs <- cbind(CTRL,DM1,DM2)
groups <- c(rep('CTRL',ncol(CTRL)),
rep('DM1',ncol(DM1)),
rep('DM2',ncol(DM2)))
groups <- factor(groups, levels = c("CTRL", "DM1", "DM2"))
design <- model.matrix(~0 + groups)
colnames(design) <- c("CTRL", "DM1", "DM2")
# 拟合线性模型
fit <- lmFit(exprs, design)
# 创建对比矩阵
contrast.matrix <- makeContrasts(DM1-CTRL, DM2-CTRL, DM1-DM2, levels=design)
# 拟合对比
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
# 提取差异表达基因
results <- decideTests(fit2)
summary(results)
# 提取DM1 vs CTRL的差异表达基因
DM1_vs_CTRL <- topTable(fit2, coef=1, number=Inf, p.value=0.05)
DM2_vs_CTRL <- topTable(fit2, coef=2, number=Inf, p.value=0.05)
DM1_vs_DM2 <- topTable(fit2, coef=3, number=Inf, p.value=0.05)
# 保存差异表达基因
write.csv(DM1_vs_CTRL, "DM1_vs_CTRL.csv")
write.csv(DM2_vs_CTRL, "DM2_vs_CTRL.csv")
write.csv(DM1_vs_DM2, "DM1_vs_DM2.csv")
## 数据可视化
# 绘制热图
pheatmap(exprs[1:50,], scale = "row", clustering_distance_rows = "euclidean",
clustering_distance_cols = "euclidean", clustering_method = "complete",
show_rownames = F)
# 绘制火山图
volcano_plot <- function(de_results, title) {
ggplot(de_results, aes(x=logFC, y=-log10(P.Value), color=adj.P.Val < 0.05)) +
geom_point() +
theme_bw() +
ggtitle(title)+
theme(legend.position = "none")
}
p1 = volcano_plot(DM1_vs_CTRL, "DM1 vs CTRL")
p2 = volcano_plot(DM2_vs_CTRL, "DM2 vs CTRL")
p3 = volcano_plot(DM1_vs_DM2, "DM1 vs DM2")
p1+p2+p3
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.