SAM算法理解

bioconductor系列教程之一分析基因芯片下(数据分析)

SAM算法

SAM算法过程基于数据的噪音分析。一般的,信噪比会随着信号的降低而减小。然而当人们针对每一个基因进行分析时,发现即使他们的信号在同一水平,每一个基因的表达噪音都不一样。所以无法笼统地给出一个具体地线性方程来分析全部基因,必须一个一个基因单独分析。假设有对照实验I和U两组,I和U实验各有平行实验w组,对于某个指定的基因i,定义相对差异值 (relative difference(d(i)))为基因i在实验组I和U当中的平均值之差除以I和U的总体标准误差均值。因为当标准误差均值过低时,会产生一个较高的d(i)值,所以总体的标准误差均值增加了一个较正项。具体公式如下:

其中上划线表示平均值 ,åm和ån表示实验组I和U的基因i表达的样本标准差,n1和n2表示实验组I和U当中基因i参与统计的探针的个数。S0为较正项,它可以由计算机自动给出,也可以由人手动指定。S0的取值标准是:将所有的d(i)值排序后100等分,每一等分先求得中位数绝对离差,然后计算这些中位数绝对离差值的变异系数。取s0分别等于100等分当中的s(i)的最小值,依次计算。最终s0的值就是在这些计算中,使变异系数最小的s0。

我们来比较一下它和t-test的异同:

[图片上传失败...(image-92c592-1597045517277)]

比较之下,我们就会发现两者十分的相同。左边是两组具有不同探针数和不同标准差的非平行实验t-test计算公式,右边就是具有不同探针数和不同标准差的非平行实验的SAM公式,我们可以看到,它们的最终差别,只在那个s0附加项上。由此我们可以知道,实际上SAM就是t-test的一个具体应用。

在计算得到所有的d(i)值之后,重排样品计算d(i)期待值dE(i)。然后用期待值dE(i)对实测值d(i)做图。如果期待值和实测值相同,那么作图点就应该落在斜率为1的直线上,如果不同,作图点就落在其外。差别越大,距离该直线就越远。给定一个D值(默认的话,可以设置为1.2),当期待值和实测值差别比D大时,就认为有显著差异。这就是SAM算法。

下面我们就来使用R来实践一下SAM算法。

<pre style="box-sizing: border-box; font-family: "Roboto Slab", Georgia, Times, serif; font-size: 1em; font-weight: 300; font-style: inherit; margin: -2px 0px 27px; padding: 0px; vertical-align: baseline; border: 0px; outline: 0px; line-height: 27px; overflow: auto; max-width: 100%; background: transparent; color: rgb(102, 102, 102);">##安装SAM库

install.packages("samr")

--- Please select a CRAN mirror for use in this session ---

also installing the dependency ‘impute’

trying URL 'http://software.rc.fas.harvard.edu/mirrors/R/bin/windows/contrib/2.11/impute_1.24.0.zip'

Content type 'application/zip' length 1205991 bytes (1.2 Mb)

opened URL

downloaded 1.2 Mb

trying URL 'http://software.rc.fas.harvard.edu/mirrors/R/bin/windows/contrib/2.11/samr_1.28.zip'

Content type 'application/zip' length 80418 bytes (78 Kb)

opened URL

downloaded 78 Kb

package 'impute' successfully unpacked and MD5 sums checked

package 'samr' successfully unpacked and MD5 sums checked

The downloaded packages are in

    C:\Documents and Settings\jianhong ou\Local Settings\Temp\RtmpHrqW1s\downloaded_packages

library(samr)

Loading required package: impute

表达定量

eset <- rma(Data)

Background correcting

Normalizing

Calculating Expression

eset.e <- exprs(eset)

</pre>

SAM分析。我们首先来了解一下samr函数。

?samr

我们注意到其参数resp.type有以下几种类型:"quantitative" 定量反应,其中data参数当中的y必须是数值型数组; "Two class unpaired" 比较两种不同条件下的结果,其中data参数当中的y必须是1或者2数组,即要么值属于其中一种条件,要么属于另外一种条件; "Survival" for censored survival outcome; "Multiclass" : 两组以上实验条件,其中data参数当中的y是自然数数组,指定实验条件编号; "One class" 单组实验,y是1的数组; "Two class paired" 比较两种不同条件下的结果,并且实验是成对进行的,其中data参数当中的y是-1,1,-2,2……-k,k这样成对出现的数组; "Two class unpaired timecourse", "One class time course", "Two class.paired timecourse" or "Pattern discovery"与时间相关的比较,y值必须是kTimet这种形式,其中k是组编号,t是时间,Time就是字符Time,起始的时间点要为kTimetStart格式,结束的点要为kTimetEnd格式。

Table 1 Resp.type取值范围

| Resp.type | 取值 |
| Quantitative | 实数,例:27.4 或者-45.34 |
| Two class (unpaired) | 整数1,2 |
| Multiclass | 整数1,2,3,…… |
| Paired | 整数-1,1,-2,2等等成对出现,通常认为负号代表未处理的对照组,正号代表实验组;-1总是与1配对,-2与2配对直至-k与k |
| Survival data | (Time, status)这种成对的数字,比如(50,1),(120,0)。第一个数字代表时间,第二个数字代表状态(1=死亡,0=存活) |
| One class | 整数1 |

在示例的数据中,实验设计为estrogen存在与不存在,及作用10及48小时的比较。因为时间点过少,不足以形成timecourse,所以我们用多组来比较吧。

<pre style="box-sizing: border-box; font-family: "Roboto Slab", Georgia, Times, serif; font-size: 1em; font-weight: 300; font-style: inherit; margin: -2px 0px 27px; padding: 0px; vertical-align: baseline; border: 0px; outline: 0px; line-height: 27px; overflow: auto; max-width: 100%; background: transparent; color: rgb(102, 102, 102);">> gp=rep(1:4,each=2)

gnames <- geneNames(Data)

eset.list <- list(x=eset.e,y=gp,geneid=rownames(eset),

  • genenames=gnames,logged2=TRUE)

samr.results <- samr(eset.list,resp.type="Multiclass")

这里的delta的值会决定多少个基因会被筛选出来,具体可以查看samr.plot

delta=3

delta.table <- samr.compute.delta.table(samr.results)

siggenes.table <- samr.compute.siggenes.table(samr.results,delta,eset.list,delta.table)

siggenes.table$genes.up[,c(2,3,7:10)]

保存结果:

write.table(siggenes.table$genes.up,file="data",sep="\t")

</pre>

SAM算法因为其提供有 Microsoft Excel插件,所以使用非常广泛,相反,其在R当中的应用却显得相对较少。有研究表明,SAM对FDR的控制并不是很好,这是它最主要的不足。

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