学习完GEO数据挖掘-基于芯片之后,进行GSE5883实战演练,
记录下实战过程中值得注意的点:
(很多时候我并不能发现自己的错误,欢迎大家批评指正)
(做这个演练时,虽然实现了目的,但是觉得我的代码very垃圾冗余,希望后续可以找到更好的办法)
这个数据集我认为主要的难点就在于设置分组信息这个点上
从pd中可以看出,虽然有24个gsm数据集且是一个多分组,但本质上还是两个组相互对应,我只取4hour这两个组进行分析,其他8 hour,24hour组处理过程相同。
将pd的title的列拆分开,再重新组合,获取分组信息。
x <- str_split(pd$title," ",simplify = T)[,3];x
y <- str_split(pd$title," ",simplify = T)[,6];y
z <- paste0(x,y);z
g <- z%in%c("with4","without4");g
z <- z[z%in%c("with4","without4")];z
k = str_detect(z,"without4");table(k)
Group4 = ifelse(k,"without4","with4")
# 需要把Group转换成因子,并设置参考水平,指定levels
Group4 = factor(Group4,levels = c("without4","with4"))
Group4
# 检查分组是否正确
data.frame(pd$title[g],Group4)
最后注意要把g值存储在Rdata中,后续用来筛选exp对应的列
save(g,exp,Group4,ids,file = "step2output.Rdata")
注意exp应该用exp,g筛选出对应的列,如PCA中应该修改为
dat=as.data.frame(t(exp[,g]))
热图中
j = names(tail(sort(apply(exp[,g],1,sd)),1000))
n = exp[j,]
n1 <- n[,g]
library(pheatmap)
annotation_col = data.frame(row.names = colnames(n1),
Group = Group4)
pheatmap(n1,...)
library(limma)
design = model.matrix(~Group4)
fit = lmFit(exp[,g],design)
fit = eBayes(fit)
deg = topTable(fit,coef = 2,number = Inf)
library(dplyr)
deg = mutate(deg,probe_id = rownames(deg))
ids = distinct(ids,symbol,.keep_all = T)
deg = inner_join(deg,ids,by="probe_id")
logFC_t = 1
p_t = 0.01
k1 = (deg$P.Value < p_t)&(deg$logFC < -logFC_t)
k2 = (deg$P.Value < p_t)&(deg$logFC > logFC_t)
deg = mutate(deg,change = ifelse(k1,"down",ifelse(k2,"up","stable")))
table(deg$change)
down stable up
198 20310 307
即在4 hour处理组中有198个下调基因,307个上调基因,与网页中176下调,275上调有所差异。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。