关于GEO的分组矩阵与对比问题

当下载完GEO数据,并做好数据整理后,得到了行名为SYMBOL,列名为SAMPLE的基因表达矩阵(已去重,log2等),现在就要开始进行差异表达分析。
分组表达矩阵,告诉代码,哪些样本属于那些分组

#懒得下载,自己构建基因表达矩阵
x <- 100#行数
y <- 24#列数
r <- rnorm(x*y)#创建24*100个符合正态分布的数据
dim(r) <- c(x,y)#给数据以行、列维度
class(r)#matrix
dim(r)# 100 24
r[,1:6] <- r[,1:6]+5#因为有些为负数,把他全部变为正数,以下一样
r[,7:12] <- r[,7:12]+5.3
r[,13:18] <- r[,13:18]+6.3
r[,19:24] <- r[,19:24]+7
r[1:4,1:4]
# > r[1:4,1:4]
#       sample_1 sample_2 sample_3 sample_4
# gene_1 6.930203 3.445526 6.364362 5.482402
# gene_2 5.676164 4.680503 4.450948 5.608166
# gene_3 3.427881 6.070465 5.540297 4.522752
# gene_4 6.666888 6.002557 5.336065 5.947510
rowname <- c(paste0("gene_",1:nrow(r)))
colname <- c(paste0("sample_",1:ncol(r)))
# > length(rowname)
# [1] 100
# > length(colname)
# [1] 24
colnames(r) <- colname#赋列名
rownames(r) <- rowname#赋行名
r[1:4,1:4]
# > r[1:4,1:4]
#       sample_1 sample_2 sample_3 sample_4
# gene_1 6.930203 3.445526 6.364362 5.482402
# gene_2 5.676164 4.680503 4.450948 5.608166
# gene_3 3.427881 6.070465 5.540297 4.522752
# gene_4 6.666888 6.002557 5.336065 5.947510
group_list <- rep(c('normal','tumour_1','tumour_2','tumour_3'),each=rep(6,4))
#group_list <- factor(group_list,levels = c('normal','tumour_1','tumour_2','tumour_3'))
library(limma)
design=model.matrix(~group_list)
design
colnames(design) <- levels(group_list)#给design赋列名
rownames(design) <- colname#给design赋行名
#> design
#           normal tumour_1 tumour_2 tumour_3
# sample_4       1        0        0        0
# sample_5       1        0        0        0
# sample_6       1        0        0        0
# sample_10      1        1        0        0
# sample_11      1        1        0        0
# sample_12      1        1        0        0
# sample_16      1        0        1        0
# sample_17      1        0        1        0
# sample_18      1        0        1        0
# sample_22      1        0        0        1
# sample_23      1        0        0        1
# sample_24      1        0        0        1
# attr(,"assign")
# [1] 0 1 1 1
# attr(,"contrasts")
# attr(,"contrasts")$`group_list`
# [1] "contr.treatment"
#design是一个分组对比矩阵,他告诉代码哪个样本是属于哪个分组
#design的列顺序就是group_list这个因子向量的level顺序,这个很重要
fit1=lmFit(r,design)
fit2=eBayes(fit1) 
allDiff=topTable(fit2,adjust='fdr',coef=2,number=Inf)#根据自己的需求调参数得到差异表达基因
allDiff[1,]
# > allDiff[1,]
#           logFC  AveExpr        t      P.Value  adj.P.Val         B
# gene_71 2.116048 6.101674 3.697074 0.0002239722 0.02239722 0.3369323
#logFC即logFoldChange,即两组之间的log表达量取平均后进行相除,看两组之间某个基因表达的对比情况
#一般是实验组/对照组,正值代表实验组该基因表达量高于对照组,数值代表高多少倍,负值同理
#但是我们怎么知道是实验组/对照组,还是对照组/实验组呢?
#这跟design的设置有关,design=model.matrix(~group_list)会默认第一列为“截距”,而后面的分组都会跟这个“截距”进行对比,这个“截距”会被默认为分母
#而design的列名的顺序是取决于group_list的level顺序
#这边写得比较乱,mark下
mean(r["gene_71",7:12])-mean(r["gene_71",1:6])#验证一下logFC算法是否正确
# > mean(r["gene_71",7:12])-mean(r["gene_71",1:6])
# [1] 2.116048
mean(r["gene_71",1:24])
# > mean(r["gene_71",1:24])
# [1] 6.101674
#可以看出AveExpr是这24个样本的平均表达量,而不是normal和tumour_1两组的平均表达量
#topTable函数的coef参数,coef=2是指design的第2列,即tumour_1,即把tumour_1与normal进行对比
#同理coef=3是指design的第3列,即tumour_2,即把tumour_2与normal进行对比
#所以,这里coef=2也可以写成coef="tumour_1"
#allDiff=topTable(fit2,adjust='fdr',coef="tumour_1",number=Inf)

那假如我想要tumour_2和tumour_1进行对比呢?
这里有两种方法:

#方法一:
#修改group_list的level的顺序
group_list <- factor(group_list,levels = c('tumour_1','normal','tumour_2','tumour_3'))
design=model.matrix(~group_list)
colnames(design) <- levels(group_list)
rownames(design) <- colname
design
#> design
#      tumour_1           normal           tumour_2           tumour_3
#6            1                1                  0                  0
#12           1                0                  0                  0
#18           1                0                  1                  0
#24           1                0                  0                  1
#现在tumour_1变成了“截距”,所以就可以进行比较了
#方法二:
design <- model.matrix(~0+group_list)
colnames(design) <- levels(group_list)
rownames(design) <- colname
design
#> design
#             tumour_1           normal           tumour_2           tumour_3
#6                   0                1                  0                  0
#12                  1                0                  0                  0
#18                  0                0                  1                  0
#24                  0                0                  0                  1
#这里并没有指定哪一个是“截距”
contrast.matrix <- makeContrasts(contrasts=c('tumour_2-normal',
                                             'tumour_1-normal',
                                             'tumour_2-tumour_1'),levels = design)

#> contrast.matrix
#          Contrasts
#Levels     tumour_2-normal tumour_1-normal tumour_2-tumour_1
#  normal                -1              -1                 0
#  tumour_1               0               1                -1
#  tumour_2               1               0                 1
#  tumour_3               0               0                 0
fit=lmFit(r,design)
fit1 <- contrasts.fit(fit, contrast.matrix)
fit2=eBayes(fit1) 
allDiffc=topTable(fit2,adjust='fdr',coef=2,number=Inf,p.value=0.05)
#coef=2,即指contrast.matrix的第2列
#所以这个方法是自由度最大的一种

还有配对比较矩阵,太晚了,明天写

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容