Академический Документы
Профессиональный Документы
Культура Документы
B I O I N F O R M T I C A
E S TA D S T I C A
A N L I S I S E S TA D S T I C O D E D AT O S M I C O S C O N R / B I O C O N D U C T O R
G U I L L E R M O . A YA L A @ U V. E S , U N I V E R S I D A D D E V A L E N C I A
Copyright 24 de marzo de 2017
Guillermo Ayala
Guillermo.Ayala@uv.es
This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To
Public License, Version 2, as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.
ndice general
I Introduccin 11
2 R y Bioconductor 19
3 Anotacin 45
II Datos 77
4 Microarrays 79
VI Agregacin 361
21 Probabilidad 391
23 Estimacin 435
30 Meta-anlisis 577
31 Miscelnea 579
A Cursos 593
D Datos 599
Bibliografa 605
Glosario 625
Prlogo
Introduccin
1
Estadstica y datos micos
DAVID http://david.abcc.ncifcrf.gov.
g:Profiler http://biit.cs.ut.ee/gprofiler/.
Gitools http://www.gitools.org.
1.5 Jerga
1.7 Bibliografa
2.1 Sobre R
install.packages(``UsingR'')
library(UsingR)
pacman::p_install("UsingR",repos="https://ftp.cixug.es/CRAN/")
1 182 154 82 62
2 180 79
3 183 209 64 93
4 205 224 88 100
5 239 255 112 123
6 267 275 149 150
7 302 303 183 180
8 310 313 189 195
9 291 287 181 164
10 241 237 139 119
r y bioconductor 21
11 211 201 90 90
12 176 166 70 54
x = read.table(file="temperaturas.csv",dec=".",
sep = ";",header = TRUE)
x = c(35.84122,28.95458,36.02971,33.13809,39.55091,39.48182,27.52009,32.58105,
31.54865,36.73312,33.87558,30.05730,29.45515,38.70321,34.80034,35.86523,
32.76480,35.94576,30.44356,38.75483,31.21475,33.15148,36.17373,28.34059,
40.52086,39.34035,34.26828,41.92718,34.83630,43.46855)
La funcin base::c nos sirva para concatenar uno detrs de otro los
datos numricos. Hemos obtenido.
x[1]
## [1] 35.84122
x[13]
## [1] 29.45515
Podemos ver los datos que estn entre el 13 y el 23. Para ello fij-
monos en el siguiente cdigo.
13:23
## [1] 13 14 15 16 17 18 19 20 21 22 23
x[13:23]
Podemos tener inters en saber los valores de los datos que ocu-
pan las posiciones 7, 9 y de la 20 a la 25. Estas posiciones las pode-
mos obtener con
c(7,9,20:25)
## [1] 7 9 20 21 22 23 24 25
x[c(7,9,20:25)]
Puede que nuestro inters en ver los datos no venga dado por
la posicin que ocupan sino por su valor. Por ejemplo, queremos
saber cuntos de estos datos superan o son iguales a 35. Cmo lo
hacemos? Lo lgico es comparar los valores de x con 35. Lo hacemos
con
24 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
x >= 35
Nos devuelve los datos que ocupan las posiciones donde se da-
ba la condicin, donde la condicin era cierta. Podemos saber qu
valores toman los datos que son mayores que 37 con
o bien los datos que son mayores que 35 y menores o iguales que
37.
9 9
El resto de operadores lgicos los
encontramos en la ayuda de Logical
Operators: & (&&) corresponde con la
interseccin, | (||) corresponde con la
unin y la negacin de una condicin la
obtenemos con !.
r y bioconductor 25
sort(x)
sort(x,index.return = TRUE)
## $x
## [1] 27.52009 28.34059 28.95458 29.45515 30.05730
## [6] 30.44356 31.21475 31.54865 32.58105 32.76480
## [11] 33.13809 33.15148 33.87558 34.26828 34.80034
## [16] 34.83630 35.84122 35.86523 35.94576 36.02971
## [21] 36.17373 36.73312 38.70321 38.75483 39.34035
## [26] 39.48182 39.55091 40.52086 41.92718 43.46855
##
## $ix
## [1] 7 24 2 13 12 19 21 9 8 17 4 22 11 27 15
## [16] 29 1 16 18 3 23 10 14 20 26 6 5 25 28 30
## $x
## [1] 43.46855 41.92718 40.52086 39.55091 39.48182
## [6] 39.34035 38.75483 38.70321 36.73312 36.17373
## [11] 36.02971 35.94576 35.86523 35.84122 34.83630
## [16] 34.80034 34.26828 33.87558 33.15148 33.13809
## [21] 32.76480 32.58105 31.54865 31.21475 30.44356
## [26] 30.05730 29.45515 28.95458 28.34059 27.52009
##
## $ix
## [1] 30 28 25 5 6 26 20 14 10 23 3 18 16 1 29
## [16] 15 27 11 22 4 17 8 9 21 19 12 13 2 24 7
6
5
4
26 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
Frequency
3
2
1
De cmo guardar un dibujo Primero hemos de hacerlo. Supongamos
0
que hacemos un histograma de los datos que tenemos en el vector x.
30 35 40
Lo tenemos en la figura 2.1. x
El dibujo anterior podemos querer guardarlo en un fichero externo
Figura 2.1: Histograma
posiblemente para incorporarlo despus a un documento. 10 En el 10
Espero que no sea un documento
siguiente cdigo lo guardamos en un fichero pdf. Word. Pero presumo que, por desgracia,
lo ser.
pdf("histograma_ejemplo.pdf") #Fijamos el nombre del fichero
hist(x)
dev.off()
help.start()
?hist
O simplemente,
help(hist)
source("http://www.bioconductor.org/biocLite.R")
biocLite()
source("http://www.bioconductor.org/biocLite.R")
biocLite("ALL")
chooseBioCmirror()
setRepositories()
data(golub,package = "multtest")
golub.cl
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [24] 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
class(golub.cl)
## [1] "numeric"
(golub.fac = factor(golub.cl,levels=0:1,labels=c("ALL","AML")))
## [1] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL
## [12] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL
## [23] ALL ALL ALL ALL ALL AML AML AML AML AML AML
## [34] AML AML AML AML AML
## Levels: ALL AML
table(golub.fac)
## golub.fac
## ALL AML
## 27 11
summary(golub.fac)
## ALL AML
## 27 11
library(ggplot2)
qplot(golub.fac)
class(golub)
count
## [1] "matrix" 10
ALL AML
golub.fac
nrow(golub)
## [1] 3051
ncol(golub)
## [1] 38
dim(golub)
## [1] 3051 38
golub[2000,12]
## [1] 0.19595
qplot(muestra,y2000)
o con
golub[2000,golub.fac == "AML"]
qplot(muestra,y2000,colour=golub.fac)
golub.df = data.frame(muestra,y2000,golub.fac)
golub.gnames[2000,]
class(golub.gnames)
## [1] "matrix"
dim(golub.gnames)
## [1] 3051 3
Cada fila nos da informacin con el gen del cual tenemos su perfil
de expresin en la matriz golub. En concreto, qu tenemos en la fila
2000?
golub.gnames[2000,]
(a) (b)
golub.gnames[2000,2]
golub.gnames[2000,3]
## [1] "X74794_at"
rownames(golub) = golub.gnames[,3]
colnames(golub) = golub.fac
Qu pretendemos hacer? Vamos a realizar dos dibujos. En absci- mos son base::lapply y base::sapply.
mean(golub[2000,])
## [1] 0.02080211
median(golub[2000,])
## [1] 0.147145
2.5 Ejercicios
4. Qu nos indicaran los genes tales que sus puntos asociados estn fuera
de la regin {( x, y) : |y x | > }.
Ejercicio 3. Consideremos los datos golub. Se pide:
1. Determinar la desviacin estndar de las expresiones de cada gen.
nombre.funcion = function(argumentos){
CODIGO
resultado
}
MediaDesviacion = function(x){
resultado = c(mean(x),sd(x))
resultado
}
x = rnorm(23,mean=12,sd=1.3)
MediaDesviacion(x)
Y la utilizamos.
MediaDesviacionPercentil(x)
MediaDesviacionPercentil(x,ordenpercentil=.7)
y = matrix(1:16,ncol=4)
is.vector(y)
## [1] FALSE
MediaDesviacionPercentilError(y)
Y la probamos.
r y bioconductor 39
MediaDesviacionPercentilErrorLista(x)
## $media
## [1] 12.99296
##
## $de
## [1] 0.7748631
x.des = MediaDesviacionPercentilErrorLista(x)
x.des$media
## [1] 12.99296
x.des$de
## [1] 0.7748631
tami.GenDE
Vamos a definir una funcin que va nos realiza un anlisis de
expresin diferencial aplicando distintas correcciones y nos devuelve
la lista de genes que se declaran con expresin diferencial.
Primero necesitamos cargar un ExpressionSet para trabajar. Utili-
zamos los datos GSE20986.
data(gse20986,package="tamidata")
gse = gse20986
pacman::p_load("multtest","genefilter")
(tejido = pData(gse20986)[,"tissue"])
is.element(tejido,c("iris","huvec"))
gse = gse[,is.element(tejido,c("iris","huvec"))]
(irishuvec = tejido[is.element(tejido,c("iris","huvec"))])
(irishuvec = factor(irishuvec))
alpha = 0.05
tt = rowttests(gse,irishuvec)
p1 = mt.rawp2adjp(tt$p.value,"BH")
sel = which(p1$adjp[p1$index,2] < alpha)
Y ahora la probamos
tami.GenDE(gse,irishuvec,0.05,"BH")
x = 1:25
tami.GenDE(x,irishuvec,0.05,"BH")
fac = rep(1:2,3)
tami.GenDE(gse,fac,0.05,"BH")
ncol(gse)
## Samples
## 6
length(irishuvec)
## [1] 6
Modificamos la funcin.
tami.GenDE(gse,rep(1:2,4))
tami.Report
En esta seccin proponemos una funcin que tiene como argumen-
tos un Biobase::ExpressionSet, su anotacin y nos devuelve un fichero
con el smbolo, su nombre y enlaces a Ensembl y Entrez.
data(gse20986,package="tamidata")
pacman::p_load("annotate","R2HTML","hgu133plus2.db")
Definimos la funcin.
Ejecutamos25 la funcin. 25
Aunque, sin duda, Pepe Isbert lo
hara mucho mejor que nosotros.
tami.Report(gse20986,sel.sig = c(45,78,378),file="prueba.html")
if(local){
load(localgsc) ## Previamente guardado como gsc
if(subsetting){
gsc1 = sapply(gsc,subsettingGeneSet,sysids)
gsc = GeneSetCollection(gsc1)
}
} else {
frame = toTable(org.Sc.sgdGO)
goframeData = data.frame(frame$go_id, frame$Evidence,
frame$systematic_name)
if(subsetting)
goframeData = goframeData[is.element(frame$systematic_name,sysids),]
goFrame = GOFrame(goframeData, organism = "Saccharomyces cerevisiae")
goAllFrame = GOAllFrame(goFrame)
gsc = GeneSetCollection(goAllFrame, setType = GOCollection())
}
44 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
if(sizefilt)
which(sapply(geneIds(gsc),length) > 10)
gsc = gsc[which(sapply(geneIds(gsc),length) > sizemin)]
gsc
}
subsettingGeneSet = function(gs0,fn0){
geneIds(gs0) = geneIds(gs0)[is.element(geneIds(gs0),fn0)]
gs0
}
data(gse6647,package="tamidata")
3.1 AnnotationDbi
pacman::p_load("AnnotationDbi")
pacman::p_load("hgu133a.db")
ls("package:hgu133a.db")
hgu133a.db
## ChipDb object:
## | DBSCHEMAVERSION: 2.1
## | Db type: ChipDb
## | Supporting package: AnnotationDbi
## | DBSCHEMA: HUMANCHIP_DB
## | ORGANISM: Homo sapiens
## | SPECIES: Human
## | MANUFACTURER: Affymetrix
## | CHIPNAME: Human Genome U133 Set
## | MANUFACTURERURL: http://www.affymetrix.com/support/technical/byproduct.affx?product=hgu133
## | EGSOURCEDATE: 2015-Sep27
## | EGSOURCENAME: Entrez Gene
## | EGSOURCEURL: ftp://ftp.ncbi.nlm.nih.gov/gene/DATA
## | CENTRALID: ENTREZID
## | TAXID: 9606
## | GOSOURCENAME: Gene Ontology
## | GOSOURCEURL: ftp://ftp.geneontology.org/pub/go/godatabase/archive/latest-lite/
## | GOSOURCEDATE: 20150919
## | GOEGSOURCEDATE: 2015-Sep27
## | GOEGSOURCENAME: Entrez Gene
## | GOEGSOURCEURL: ftp://ftp.ncbi.nlm.nih.gov/gene/DATA
## | KEGGSOURCENAME: KEGG GENOME
## | KEGGSOURCEURL: ftp://ftp.genome.jp/pub/kegg/genomes
## | KEGGSOURCEDATE: 2011-Mar15
## | GPSOURCENAME: UCSC Genome Bioinformatics (Homo sapiens)
## | GPSOURCEURL: ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19
## | GPSOURCEDATE: 2010-Mar22
## | ENSOURCEDATE: 2015-Jul16
## | ENSOURCENAME: Ensembl
## | ENSOURCEURL: ftp://ftp.ensembl.org/pub/current_fasta
## | UPSOURCENAME: Uniprot
## | UPSOURCEURL: http://www.uniprot.org/
## | UPSOURCEDATE: Thu Oct 1 23:31:58 2015
48 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
columns(hgu133a.db)
No todas las variables que hemos obtenido con columns son utili-
zables para realizar consultas. Aquellas utilizables para las consultas
las podemos conocer con keytypes. A estas variables las llamamos
llaves (keys).
keytypes(hgu133a.db)
head(keys(hgu133a.db,keytype="ENTREZID"))
head(keys(hgu133a.db,keytype="ENSEMBL"))
anotacin 49
AnnotationDbi::select(hgu133a.db,keys=ids,columns=c("ENTREZID","ENSEMBL","SYMBOL"),keytype="PROBEID")
3.2 ChipDb
pacman::p_load(hgu133a.db)
mappedProbes = mappedkeys(hgu133aENTREZID)
mappedProbesList = as.list(hgu133aENTREZID[mappedProbes])
## $`1053_at`
## [1] "5982"
mappedProbesList[4567]
## $`205255_x_at`
## [1] "6932"
Si hacemos
ls("package:hgu133a.db")
pacman::p_load("hgu95av2.db")
columns(hgu95av2.db)
keytypes(hgu95av2.db)
Los identificadores que tenamos eran los AffyID, esto es, los iden-
tificadores de las sondas utilizadas o PROBEID. Podemos plantearnos
su correspondencia con el smbolo o nombre del gen y las protenas
asociadas en la base de datos PFAM.
columns = c("PFAM","SYMBOL")
AnnotationDbi::select(hgu95av2.db, keys=ids, columns, keytype="PROBEID")
3.3 OrgDb
pacman::p_load(org.Hs.eg.db)
columns(org.Hs.eg.db)
O bien con
keytypes(org.Hs.eg.db)
head(keys(org.Hs.eg.db, keytype="ENTREZID"))
head(keys(org.Hs.eg.db, keytype="ENSEMBL"))
Y en Gene Ontology.
anotacin 53
head(keys(org.Hs.eg.db, keytype="GO"))
AnnotationDbi::select(org.Hs.eg.db,keys=ids,column="SYMBOL",keytype='ENTREZID')
## ENTREZID SYMBOL
## 1 1 A1BG
## 2 2 A2M
## 3 3 A2MP1
## 4 9 NAT1
## 5 10 NAT2
(id = "ENSG00000171428")
## [1] "ENSG00000171428"
res[,"GO"]
pacman::p_load(GO.db)
3.4 TxDb
pacman::p_load("TxDb.Dmelanogaster.UCSC.dm3.ensGene")
## [1] "TxDb"
## attr(,"package")
## [1] "GenomicFeatures"
txdb = TxDb.Dmelanogaster.UCSC.dm3.ensGene
class(txdb)
## [1] "TxDb"
## attr(,"package")
## [1] "GenomicFeatures"
txdb
## TxDb object:
## # Db type: TxDb
anotacin 55
columns(txdb)
y con
keytypes(txdb)
pacman::p_load(GenomicFeatures)
seqlevels(txdb)
## [1] "chr2L"
seqlevels(txdb) = "chr2L"
(txdb.tr = transcripts(txdb))
txdb.tr[c(1:3,1000)]
## tx_id tx_name
## <integer> <character>
## [1] 1 FBtr0300689
## [2] 2 FBtr0300690
## [3] 3 FBtr0330654
## [4] 1000 FBtr0079533
## -------
## seqinfo: 1 sequence from dm3 genome
(txdb.ex = exons(txdb))
txdb.ex[123]
(txdb.cds = cds(txdb))
length(txdb.cds)
## [1] 11003
strand(txdb.cds)
transcriptsBy(txdb, by="gene")
## -------
## seqinfo: 1 sequence from dm3 genome
exonsBy(txdb, by="gene")
cdsBy(txdb, by="tx")
## $3
## GRanges object with 2 ranges and 3 metadata columns:
## seqnames ranges strand | cds_id
## [1] chr2L [7680, 8116] + | 1
## [2] chr2L [8229, 8610] + | 4
## cds_name exon_rank
## [1] <NA> 1
## [2] <NA> 2
##
## ...
## <4948 more elements>
## -------
## seqinfo: 1 sequence from dm3 genome
intronsByTranscript(txdb)
fiveUTRsByTranscript(txdb)
threeUTRsByTranscript(txdb)
3.5 BSgenome
BSgenome.Dmelanogaster.UCSC.dm3
pacman::p_load(BSgenome.Dmelanogaster.UCSC.dm3)
tx2seqs = extractTranscriptSeqs(BSgenome.Dmelanogaster.UCSC.dm3,TxDb.Dmelanogaster.UCSC.dm3.ensGene)
tx2seqs[[1]]
tx2seqs[[1]][1000:1020]
suppressWarnings(translate(tx2seqs[[1]]))
suppressWarnings(translate(tx2seqs))
BSgenome.Hsapiens.UCSC.hg19
Estos paquetes contienen datos de secuencias para organismos
secuenciados.
pacman::p_load(BSgenome.Hsapiens.UCSC.hg19)
Hsapiens
## Human genome:
## # organism: Homo sapiens (Human)
## # provider: UCSC
## # provider version: hg19
## # release date: Feb. 2009
## # release name: Genome Reference Consortium GRCh37
## # 93 sequences:
## # chr1 chr2
## # chr3 chr4
## # chr5 chr6
## # chr7 chr8
## # chr9 chr10
## # ... ...
## # chrUn_gl000241 chrUn_gl000242
## # chrUn_gl000243 chrUn_gl000244
## # chrUn_gl000245 chrUn_gl000246
## # chrUn_gl000247 chrUn_gl000248
## # chrUn_gl000249
## # (use 'seqnames()' to see all the sequence names,
## # use the '$' or '[[' operator to access a given
## # sequence)
seqNms = seqnames(Hsapiens)
head(seqNms)
getSeq(Hsapiens, seqNms[1:2])
3.6 OrganismDb
pacman::p_load(Homo.sapiens)
transcripts(Homo.sapiens, columns=c("TXNAME","SYMBOL"))
## -------
## seqinfo: 93 sequences (1 circular) from hg19 genome
3.7 biomaRt
pacman::p_load(biomaRt)
listMarts(host="www.ensembl.org")
## biomart version
## 1 ENSEMBL_MART_ENSEMBL Ensembl Genes 87
## 2 ENSEMBL_MART_MOUSE Mouse strains 87
## 3 ENSEMBL_MART_SNP Ensembl Variation 87
## 4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 87
## 5 ENSEMBL_MART_VEGA Vega 67
(ensembl = useMart("ENSEMBL_MART_ENSEMBL",host="www.ensembl.org"))
head(listDatasets(ensembl))
## dataset
## 1 oanatinus_gene_ensembl
## 2 cporcellus_gene_ensembl
## 3 gaculeatus_gene_ensembl
## 4 lafricana_gene_ensembl
## 5 itridecemlineatus_gene_ensembl
## 6 choffmanni_gene_ensembl
## description version
## 1 Platypus genes (OANA5) OANA5
anotacin 71
(ensembl = useMart("ENSEMBL_MART_ENSEMBL",dataset="hsapiens_gene_ensembl",
host="www.ensembl.org"))
head(listAttributes(ensembl))
De hecho, son
nrow(listAttributes(ensembl))
affyids=c("202763_at","209310_s_at","207500_at")
A qu genes corresponden?
getBM(attributes=c('affy_hg_u133_plus_2', 'entrezgene'),
filters = 'affy_hg_u133_plus_2',
values = affyids, mart = ensembl)
3.8 KEGGREST
pacman::p_load("Biobase","AnnotationDbi","BiocGenerics")
data(gse1397,package="tamidata")
Biobase::annotation(gse1397)
## [1] "hgu133a"
Lo cargamos.20 20
En https://www.bioconductor.org/
packages/3.3/data/annotation/ te-
nemos el listado de los paquetes de
pacman::p_load("hgu133a.db")
anotacin de los que dispone Biocon-
ductor.
Como hemos visto en 3.1 con AnnotationDbi::columns podemos
ver la informacin que tenemos y con AnnotationDbi::keytypes las
llaves con las que podemos realizar consultas.
columns(hgu133a.db)
keytypes(hgu133a.db)
Vemos que, en este caso coinciden columns y keys. Los valores los
tenemos con
head(keys(hgu133a.db,keytype="PROBEID"))
head(featureNames(gse1397))
Coinciden todos?
table(featureNames(gse1397) == keys(hgu133a.db,keytype="PROBEID"))
##
## FALSE TRUE
## 53 22230
head(featureNames(gse1397)[control])
## [1] "AFFX-hum_alu_at"
## [2] "AFFX-HUMGAPDH/M33197_3_at"
## [3] "AFFX-HUMGAPDH/M33197_5_at"
## [4] "AFFX-HUMGAPDH/M33197_M_at"
## [5] "AFFX-HUMISGF3A/M97935_3_at"
## [6] "AFFX-HUMISGF3A/M97935_5_at"
probeid2entrez = AnnotationDbi::select(hgu133a.db,keys=featureNames(gse1397),
columns="ENTREZID",keytype="PROBEID")
class(probeid2entrez)
## [1] "data.frame"
head(probeid2entrez)
## PROBEID ENTREZID
## 1 1007_s_at 780
_ _
## 2 1007 s at 100616237
## 3 1053_at 5982
## 4 117_at 3310
## 5 121_at 7849
## 6 1255_g_at 2978
indices = match(featureNames(gse1397),probeid2entrez$PROBEID)
Cmo se ha resuelto?
anotacin 75
head(featureNames(gse1397))
head(probeid2entrez$PROBEID,n=7)
head(indices)
## [1] 1 3 4 5 6 7
eset = gse1397
fData(eset) = probeid2entrez[indices,]
all.equal(fData(eset)$PROBEID,featureNames(eset))
## [1] TRUE
3.10 Ejercicios
* Ej. 1 Determinar los cdigos Entrez, Gene Ontology y Ensembl
para los genes BRCA1 y BRCA2 implicados en el cncer de mama.
Datos
4
Microarrays
4.1 Introduccin
library(Biobase); library(affy)
annotation(gse21779raw)
## [1] "hgu133plus2"
dim(exprs(gse21779raw))
## [1] 1354896 18
image(gse21779raw[,1])
head(probeNames(gse21779raw))
Figura 4.1: Imagen a niveles de gris
correspondiente al primer array de los
Nos fijamos en la sonda que aparece en la posicin 400. datos gse21779.
ID = probeNames(gse21779raw)[400]
sum(probeNames(gse21779raw) == ID)
## [1] 11
counts = table(probeNames(gse21779raw))
table(counts)
## counts
## 8 9 10 11 13 14 15 16
## 5 1 6 54130 4 4 2 482
## 20 69
## 40 1
indexProbes(gse21779raw,"both",ID)[[1]]
(posiciones = indexProbes(gse21779raw,"pm",ID)[[1]])
indexProbes(gse21779raw,"mm",ID)[[1]]
(a) (b)
(c) (d)
Figura 4.2: (a)Image CEL correspon-
Vamos a representar los niveles de expresin PM correspondientes diente al primer array o chip. Cada
pixel corresponde con una sonda distin-
a un mismo conjunto de sondas de un array dado (figura 4.2(b)). ta. Los cuadrados verdes nos localizan
un conjunto de sondas asociadas al mis-
library(ggplot2) mo gen. (b) Los valores (o intensidades)
pmID = probes(gse21779raw[,1],"pm",ID) PM para un grupo de sondas en el pri-
mer array de nuestras muestras. (c) Los
df1 = data.frame(sondas = 1:11,intensidad = pmID[,"GSM542488.CEL.gz"])
valores (o intensidades) PM para un
ggplot(df1,aes(x=sondas,y=intensidad))+geom_line() mismo grupo de sondas en los distintos
arrays. Cada lnea corresponde con un
array distinto. En abscisas tenemos la
En abscisas tenemos el nmero de la sonda (de un mismo conjun- misma sonda en cada uno de los arrays.
to) y en ordenadas su expresin. Si no hubiera ningn tipo de ruido (d) En la primera muestra de gse21779
mostramos los valores PM y, en las mis-
mas localizaciones, los valores MM. No
siempre PM es mayor que MM como
sera de esperar.
84 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
lo que se debe observar sera una lnea horizontal, unos mismos nive-
les de expresin. Pero no es as.
El dibujo 4.2(b) se refiere a la variabilidad intra array (utilizando
las sondas de un mismo conjunto) para un mismo gen. Vamos super-
poner (una lnea por muestra) las expresiones del mismo gen pero
para todas las muestras. De este modo ilustramos la variabilidad
entre muestras. En la figura 4.2(c) mostramos este dibujo.5 5
Observad el uso de la funcin resha-
pe::melt para obtener el data.frame.
pm0 = probes(gse21779raw,"pm",ID)
pm0 = data.frame(pm0,sondas=1:11)
pm1 = reshape::melt(pm0,id="sondas")
ggplot2::ggplot(data=pm1,aes(x=sondas,y=value,colour=variable))+
geom_line()+ylab("Intensidad")
png(paste(dirTamiFigures,"gse217791arrays.png",sep=""))
pm0 = probes(gse21779raw,"pm",ID)
pm0 = data.frame(pm0,sondas=1:11)
pm1 = reshape::melt(pm0,id="sondas")
ggplot2::ggplot(data=pm1,aes(x=sondas,y=value,colour=variable))+
geom_line()+ylab("Intensidad")
dev.off()
library(reshape)
pmm = data.frame(sondas=1:11,pm = probes(gse21779raw[,1],"pm",ID),
mm = probes(gse21779raw[,1],"mm",ID))
df2 = reshape::melt(pmm,id="sondas")
levels(df2[,"variable"]) = c("pm","mm")
ggplot(df2,aes(x=sondas,y=value,colour=variable,linetype=variable))
+geom_line()
Podemos hacer una valoracin global para todos los arrays que
tenemos. Qu proporcin de sondas son tales que el valor PM es
menor que el correspondiente valor MM?
##
## FALSE TRUE
## 4460757 6415887
Ejemplo 1 (MA plot). Vamos a ilustrar el uso de los dibujo MA con los
datos gse21779. En la figura 4.3 podemos ver una comparacin entre los dos
primeros microarrays del experimento.
MAplot(gse21779raw[,1:2],pairs=TRUE,plot.method="smoothScatter")
affy::hist(gse21779raw[,1])
affy::hist(gse21779raw)
affy::boxplot(gse21779raw)
En este caso los genes con una alta (anormalmente grande) expre-
sin corresponden con el bigote superior en los diagramas de caja
que acabamos de representar.
mos en http://wwww.uv.es/ayala/
docencia/tami/reports/Report_for_
library(arrayQualityMetrics)
gse21779/index.html.
arrayQualityMetrics(expressionset = gse21779raw,
outdir = "Report_for_gse21779raw", ## Fija directorio de salida
force = TRUE, ## Sobreescribe
do.logtransform = TRUE) ## Transforma a log2
apply(probes(gse21779raw,"pm"),2,min)
## GSM542488.CEL.gz GSM542555.CEL.gz
## 32 31
## GSM542556.CEL.gz GSM542557.CEL.gz
## 34 33
## GSM542558.CEL.gz GSM542559.CEL.gz
## 21 39
## GSM542560.CEL.gz GSM542561.CEL.gz
## 67 60
## GSM542562.CEL.gz GSM542563.CEL.gz
## 74 82
## GSM542570.CEL.gz GSM542571.CEL.gz
## 26 27
## GSM542572.CEL.gz GSM542573.CEL.gz
## 26 27
## GSM542574.CEL.gz GSM542575.CEL.gz
## 28 29
## GSM542576.CEL.gz GSM542577.CEL.gz
## 28 32
Fijamos una seal objetivo, Sc, que por defecto se toma Sc = 500.
Se calcula el siguiente factor de escala para el grupo de sondas i.
Sc
s fi =
MediaAjustada{2SignalLogValuei , 0,02, 0,98}
ReportedValue(i ) = s f i 2SignalLogValuei
(12 + 11 + 19)/ 3
## [1] 14
(10 + 10 + 16) /3
## [1] 12
(7 + 9 + 15)/3
## [1] 10.33333
la nueva expresin de dicha sonda viene dada por yi0 = F 1 ( G (yi )).
Cuando F corresponde a la uniforme en el intervalo [0, 1] esto recibe
el nombre de transformacin integral de la probabilidad.
4.8.3 Resumen
Ya hemos realizado la correccin de fondo ( 4.8.1). A los valo-
res obtenidos les hemos aplicado una normalizacin de cuantiles
( 4.8.2). Ahora nos queda obtener el resumen de las distintas son-
das dentro de cada conjunto (de sondas) y para cada microarray. Se
aplica el mtodo median polish de Tukey.20 Previamente necesitamos 20
31.3.
algo de notacin. En cada array tendremos N sondas y suponemos
que tenemos n arrays. Por tanto la matriz de expresin a nivel de
sonda ser: x = [ xij ]i=1,...,N;j=1,...,n . La sonda i-sima en el array j-
simo tiene una expresin o intensidad xij . Las sondas las suponemos
agrupadas en grupos correspondientes a un mismo gen. Denotamos
el grupo k-simo de sondas con Sk . Por tanto, Sk {1, . . . , N }. Por
ejemplo, el conjunto Sk = {i1 , . . . , i|Sk | }, es decir, corresponde con las
filas {i1 , . . . , i|Sk | } de la matrix x original. Por simplificar la notacin
tomaremos yrj = xir ,j y por tanto
1. la mediana de { j : j = 1, . . . , n} es nula,
Una vez estimados estos parmetros los estimadores (en escala loga-
rtmica en base 2) de la expresin del grupo de sondas k en el array j
viene dada por
+ j .
Es un mtodo que no nos proporciona estimaciones de error de los
estimadores. Es muy rpido de implementar. Al utilizar medianas es
menos sensibles a observaciones extremas. Sin embargo, el resultado
puede ser distinto segn empecemos por filas o columnas.
gse21779_rma = affy::rma(gse21779raw)
gse21779_mas5 = affy::mas5(gse21779raw)
98 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
save(gse21779_rma,file=paste(dirTamiData,"gse21779_rma.rda",sep=""))
save(gse21779_mas5,file=paste(dirTamiData,"gse21779_mas5.rda",sep=""))
load(paste(dirTamiData,"gse21779_rma.rda",sep=""))
load(paste(dirTamiData,"gse21779_mas5.rda",sep=""))
library(geneplotter)
geneplotter::multidensity(exprs(gse21779_rma))
geneplotter::multidensity(exprs(gse21779_mas5))
graphics::boxplot(exprs(gse21779_rma))
graphics::boxplot(exprs(gse21779_mas5))
bgcorrect.methods()
normalize.methods(gse21779raw)
microarrays 99
(a) (b)
(c) (d)
Figura 4.5: a) Estimadores kernel de
densidad para los chips una vez hemos
aplicado el procedimiento RMA a
los datos gse21779. b) Lo mismo con
el mtodo MAS5. c) Boxplot para
los niveles de expresin de los datos
gse21779 con mtodo RMA. d) Lo
mismo que el punto (c) pero con el
mtodo MAS5.
100 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
pmcorrect.methods()
express.summary.stat.methods()
mas5
annotation(gse1397raw)
## [1] "GPL96"
library(limma)
exprs1 = normalizeBetweenArrays(exprs(gse1397raw),method = "quantile")
O bien podemos hacer que coincidan las medianas de los distintos arrays
con
5.1 Introduccin
5.2 sample.ExpressionSet
library(Biobase)
data(sample.ExpressionSet)
help(sample.ExpressionSet)
varLabels(sample.ExpressionSet)
sample.ExpressionSet$type
phenoData(sample.ExpressionSet)
exprs(sample.ExpressionSet)
annotation(sample.ExpressionSet)
## [1] "hgu95av2"
table(sample.ExpressionSet$sex)
##
## Female Male
## 11 15
table(sample.ExpressionSet$type)
##
## Case Control
## 15 11
summary(sample.ExpressionSet$score)
data(golub,package= "multtest")
o bien que
m2 m1 500
golub[1,]
golub.gnames[1,]
## [1] "36"
## [2] "AFFX-HUMISGF3A/M97935_MA_at (endogenous control)"
## [3] "AFFX-HUMISGF3A/M97935_MA_at"
golub.cl
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [24] 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
golub.cl
## [1] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL
## [12] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL
## [23] ALL ALL ALL ALL ALL AML AML AML AML AML AML
## [34] AML AML AML AML AML
## Levels: ALL AML
108 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
3 3
El script de R con todo el preproce-
En el paquete Golub [2016] tenemos los datos originales. Tanto las sado descrito podemos encontrarlo en
http://svitsrv25.epfl.ch/R-doc/
muestras que se utilizaron para entrenar el procedimiento como las library/multtest/doc/golub.R y en
que se utilizaron para evaluarlo. la documentacin del paquete Pollard
et al. [2016].
library(Biobase)
library(ALL)
data(ALL)
bcell = grep("^B",as.character(ALL$BT))
types = c("NEG","BCR/ABL")
moltyp = which(as.character(ALL$mol.biol) %in% types)
bcrneg = ALL[,intersect(bcell,moltyp)]
ExpressionSet
Es una estructura de datos que nos permite mantener en un solo
objeto toda la informacin que relativa a un experimento con micro-
arrays.
Para poder utilizar esta clase necesitamos el paquete Gentleman
et al. [2016b, Biobase]. Lo cargamos (la clase y los mtodos que luego
vamos a utilizar).
pacman::p_load(Biobase)
Qu necesitamos?
Supongamos que tenemos la informacin por separado y quere-
mos construir un ExpressionSet. Qu datos nos describen un ex-
110 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
pacman::p_load("tamidata")
finput = system.file("extdata","n06_expr.txt",package="tamidata")
exprs0 = read.table(file = finput,header = TRUE,sep="\t")
class(exprs0)
## [1] "data.frame"
exprs0 = as.matrix(exprs0[,-1])
class(exprs0)
## [1] "matrix"
dim(exprs0)
## [1] 22215 54
colnames(exprs0)
Y podemos ver
head(exprs0,n=1)
finput = system.file("extdata","n06_gene_attributes.txt",package="tamidata")
rn = read.table(file = finput,header = TRUE,sep="\t")
rownames(exprs0) = rn[,1]
Datos fenotpicos
Es la informacin que tenemos de las distintas muestras. Ser
una matriz de datos (un data.frame) con tantas filas como muestras,
n, y con tantas columnas como variables tenemos. Estas variables
que nos describen las muestras podemos llamarlas covariables (una
denominacin muy estadstica).
En nuestro caso los datos fenotpicos los tenemos en el fichero
sample_attributes.txt. Los leemos.
finput = system.file("extdata","n06_sample_attributes.txt",
package="tamidata")
pd0 = read.table(finput,sep = "\t",header=TRUE)
dim(pd0)
## [1] 54 14
rownames(pd0) = colnames(exprs0)
datos de microarrays 113
summary(pd0)
## 3rd Qu.:5.000
## Max. :9.000
## NA's :23
sapply(pd0,class)
sampleNames(datosfenotipo)
head(pData(datosfenotipo))
## CAMA1 5 <NA> NA
## DU4475 6 <NA> NA
save(neve06,file="neve06.rda")
data(gse6647,package="tamidata")
dim(gse6647)
## Features Samples
## 6103 8
head(pData(gse6647))
## type
## GSM153907.CEL.gz wt
## GSM153908.CEL.gz edc3D
## GSM153909.CEL.gz wt
## GSM153910.CEL.gz edc3D
## GSM153911.CEL.gz wt
## GSM153912.CEL.gz edc3D
geneplotter::multidensity(exprs(gse6647))
boxplot.matrix(exprs(gse6647))
library(reshape);library(ggplot2)
df = data.frame(gene = featureNames(gse6647),exprs(gse6647))
df1 = melt(df,id=c("gene"))
ggplot(df1,aes(x=value,colour=variable,group=variable)) +
118 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
(a) (b)
Figura 5.2: Datos gse6647: estimadores
de densidad y diagramas de cajas.
geom_density(kernel = "epanechnikov",fill=NA) ## Estimadores densidad
ggplot(df1,aes(x=variable,y = value)) + geom_boxplot() +
coord_flip()
(a) (b)
Figura 5.3: Datos gse6647: estimadores
de densidad y diagramas de cajas
utilizando Wickham and Chang [2016,
ggplot2].
5.7 De cmo utilizar un ExpressionSet
library(ALL)
ALL
exprs(ALL)
pData(ALL)
annotation(ALL)
## [1] "hgu95av2"
names(pData(ALL))
ALL$BT
## [1] B2 B2 B4 B1 B2 B1 B1 B1 B2 B2 B3 B3 B3 B2 B3
## [16] B B2 B3 B2 B3 B2 B2 B2 B1 B1 B2 B1 B2 B1 B2
## [31] B B B2 B2 B2 B1 B2 B2 B2 B2 B2 B4 B4 B2 B2
## [46] B2 B4 B2 B1 B2 B2 B3 B4 B3 B3 B3 B4 B3 B3 B1
## [61] B1 B1 B1 B3 B3 B3 B3 B3 B3 B3 B3 B1 B3 B1 B4
## [76] B2 B2 B1 B3 B4 B4 B2 B2 B3 B4 B4 B4 B1 B2 B2
## [91] B2 B1 B2 B B T T3 T2 T2 T3 T2 T T4 T2 T3
## [106] T3 T T2 T3 T2 T2 T2 T1 T4 T T2 T3 T2 T2 T2
## [121] T2 T3 T3 T3 T2 T3 T2 T
## Levels: B B1 B2 B3 B4 T T1 T2 T3 T4
ALL[,selcol]
## phenoData
## sampleNames: 01010 04007 ... LAL4 (74
## total)
## varLabels: cod diagnosis ... date last
## seen (21 total)
## varMetadata: labelDescription
## featureData: none
## experimentData: use 'experimentData(object)'
## pubMedIds: 14684422 16243790
## Annotation: hgu95av2
5.9 GSE21779
library(GEOquery)
gcel = getGEOSuppFiles("GSE21779")
Descomprimimos.
library(affy)
gse21779 = ReadAffy()
save(gse21779,file = "gse21779.rda")
save(gse21779,file=paste(dirTamiData,"gse21779.rda",sep=""))
library(ArrayExpress)
geod21779 = ArrayExpress("E-GEOD-21779")
geod21779.rma = rma(geod21779)
save(geod21779.rma,file=paste(dirTamiData,"geod21779.rma.rda",sep=""))
datos de microarrays 123
5.10 GSE1397
11 El sndrome de Down es una enfermedad causada por la apa- 11
El uso de estos datos y parte del
ricin de un copia extra total o parcial del cromosoma 21. Analiza- anlisis aparecen en un documento que
se puede encontrar en esta direccin.
remos si los genes de este cromosoma muestra una sobre expresin. Tambin he utilizado parte del anlisis
Adems se ver que solamente es especfica de estos genes y no de que propone Rodrigo Santamara.
otros que aparecen en otros cromosomas. Los datos se pueden ob-
tener de GEO y el identificador del experimento es GSE1397. Los
utilizaremos en distintos temas pero de un modo muy importante
en ??. Los resultados que se obtienen son realmente bonitos e intere-
santes. Los datos a nivel de sonda (raw data) no estn disponibles.
Nos hemos de traer unos datos preprocesados. En el experimento se
utilizaron arrays Affymetrix GeneChip U133A. Los obtenemos con
pacman::p_load("Biobase","GEOquery")
gse1397raw = getGEO("GSE1397")[[1]]
annotation(gse1397raw) = "hgu133a"
Los datos fenotpicos de las muestras los podemos ver con (no
mostramos)
pData(gse1397raw)
varLabels(gse1397raw)
head(pData(gse1397raw)[,"title"])
exprs(gse1397raw)
(ts21=c(grep("T.*21.*cerebrum", as.character(pData(gse1397raw)[,"title"])),
grep("TS21.*cerebellum", as.character(pData(gse1397raw)[,"title"]))))
(eu=c(grep("Euploid.*cerebrum)", as.character(pData(gse1397raw)[,"title"])),
grep("Euploid.*[Cc]erebellum", as.character(pData(gse1397raw)[,"title"]))))
pData(gse1397raw)[eu,"title"]
pData(gse1397raw)[ts21,"title"]
gse1397raw = gse1397raw[,c(eu,ts21)]
tissue = factor(rep(c(1,2,1,2),c(4,3,4,3)),levels=1:2,
labels=c("Cerebrum","Cerebellum"))
type = factor(c(rep(1,7),rep(2,7)),levels=1:2,labels=c("Euploid","TS21"))
GROUP = as.numeric(type) - 1
pData(gse1397raw) = data.frame(tissue,type)
save(gse1397raw,file="gse1397raw.rda")
library(affyPLM)
library(limma)
gse1397 = gse1397raw
exprs(gse1397) = normalizeBetweenArrays(exprs(gse1397raw))
df = data.frame(gene = featureNames(gse1397),exprs(gse1397))
df1 = melt(df,id=c("gene"))
ggplot(df1,aes(x=value,colour=variable,group=variable)) +
geom_density(kernel = "epanechnikov",fill=NA) + xlim(0,1000)
13
Los autores introdujeron informacin adicional sobre las filas
(genes) que podemos ver (no lo mostramos) con
fData(gse1397raw)
Figura 5.4: Estimadores de las den-
sidades de las distintas muestras de
Es un data.frame que contiene las siguientes variables sobre los GSE1397 normalizadas.
genes. 13
En http://www.uv.es/ayala/
docencia/tami/Rmd/gse1397.html
tenemos un script que reproduce los
names(fData(gse1397raw)) pasos anteriores.
## [1] "ID"
## [2] "GB_ACC"
## [3] "SPOT_ID"
## [4] "Species Scientific Name"
## [5] "Annotation Date"
## [6] "Sequence Type"
## [7] "Sequence Source"
## [8] "Target Description"
## [9] "Representative Public ID"
## [10] "Gene Title"
## [11] "Gene Symbol"
## [12] "ENTREZ_GENE_ID"
## [13] "RefSeq Transcript ID"
## [14] "Gene Ontology Biological Process"
## [15] "Gene Ontology Cellular Component"
## [16] "Gene Ontology Molecular Function"
tes necesarios.
pacman::p_load("Biobase","GEOquery")
gcel = getGEOSuppFiles("GSE20986")
setwd("GSE20986/")
Adems nos ha bajado un fichero tar del cual hemos de extraer los
distintos ficheros CEL. En Linux lo haremos con16 16
En Windows podemos usar el Winrar.
gse20986raw = affy::ReadAffy()
save(gse20986raw,file="gse20986raw.rda")
pacman::p_load("gcrma","hgu133plus2probe")
gse20986 = gcrma::gcrma(gse20986raw)
html.
5.12 GSE34764
library(GEOquery)
getGEOSuppFiles("GSE34764")
setwd("GSE30129/")
Para leer los datos vamos a utilizar el paquete Carvalho and Iri-
zarry [2016, oligo].
library(oligo)
celFiles = list.celfiles()
gse34774 = read.celfiles(celFiles)
save(gse34774,file="gse34774.rda")
128 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
5.13 ArrayExpress
5.14 Varios
data(gse1397,package="tamidata")
write.exprs(gse1397,file="gse1397.txt")
Y luego podemos abrir este fichero con Calc21 o con nuestra apli- 21
La versin libre de Excel que tenemos
cacin preferida. en LibreOffice.
5.15 Ejercicios
Ej. 3 Se pide construir un ExpressionSet. Este ExpressionSet ha de
tener la siguiente matriz de expresin.
datos de microarrays 129
6.1 Introduccin
1. Diseo experimental.
3. Cmo bajarlos?
6.3 Repositorios
DDBJ http://www.ddbj.nig.ac.jp
En lo que sigue utilizamos fundamentalmente la primera base de
datos y, a veces, la segunda. Cada una de estas bases de datos puede
ser consultada en lnea y bajar los datos desde la propia pgina.
Tambin usaremos en lo que sigue herramientas para hacerlo desde
R, por ejemplo, Zhu and Davis [2016, SRAdb].
En las secciones 6.4, 6.5 y ?? comentamos distintos formatos
para almacenar lecturas cortas. Tambin comentamos paquetes R/-
Bioconductor para trabajar con estos formatos.
cia a una de las cuatro bases.5 En Ewing and Green [1998] tenemos 5
En ingls base call es el proceso me-
la explicacin del mtodo de asignacin. Si P denota la probabilidad6 diante el cual se asigna el pico de
fluorescencia a la base.
para una base dada de ser mal asignada o clasificada entonces el 6
No es realmente una probabilidad. Es
valor con el que se trabaja es una cuantificacin de la calidad de la
asignacin y no ms.
Q = 10 log10 P. (6.1)
Utilizando ShortRead
Para trabajar con el formato FASTQ es til el paquete Morgan
et al. [2017, ShortRead].
library(ShortRead)
fq0 = readFastq("SRR1293399_1.fastq")
fqsample = FastqSampler("SRR1293399_1.fastq",10000)
fq0 = yield(fqsample)
class(fq0)
## [1] "ShortReadQ"
## attr(,"package")
## [1] "ShortRead"
fq0
## class: ShortReadQ
## length: 10000 reads; width: 50 cycles
fq0[1]
## class: ShortReadQ
## length: 1 reads; width: 50 cycles
fq0[3:10]
## class: ShortReadQ
## length: 8 reads; width: 50 cycles
sread(fq0[1000])
sread(fq0)
width(fq0)
quality(fq0[1000])
## class: SFastqQuality
## quality:
## A BStringSet instance of length 1
## width seq
## [1] 50 ffffffffffffffffeff...fffeffefffff`ddbdd
encoding(quality(fq0))
## ; < = > ? @ A B C D E F G H I J
## -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
## K L M N O P Q R S T U V W X Y Z
## 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
## [ \\ ] ^ _ ` a b c d e f g h i
## 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
fls = dir(paste(dirTamiData,"SRP042140/fastq",sep=""),"*fastq$",full=TRUE)
show(SRP042140_1.qa)
## class: FastqQA(10)
## QA elements (access with qa[["elt"]]):
## readCounts: data.frame(1 3)
## baseCalls: data.frame(1 5)
## readQualityScore: data.frame(512 4)
## baseQuality: data.frame(94 3)
## alignQuality: data.frame(1 3)
## frequentSequences: data.frame(50 4)
## sequenceDistribution: data.frame(357 4)
## perCycle: list(2)
## baseCall: data.frame(249 4)
## quality: data.frame(1800 5)
## perTile: list(2)
## readCounts: data.frame(0 4)
## medianReadQualityScore: data.frame(0 4)
## adapterContamination: data.frame(1 1)
SRP042140_1.qa[["readCounts"]]
SRP042140_1.qa[["baseCalls"]]
## A C G
_
## SRR1293399 1.fastq 10600637 12762822 12873094
## T N
## SRR1293399_1.fastq 13753938 9509
head(SRP042140_1.qa[["frequentSequences"]])
## sequence
## 1 GTGTCAGTCACTTCCAGCGGTCGTATGCCGTCTTCTGCTTGAAAAAAAAA
## 2 TAGCTTATCAGACTGATGTTGACGTGTCAGTCACTTCCAGCGGTCGTATG
## 3 TGTAAACATCCCCGACTGGAAGCGTGTCAGTCACTTCCAGCGGTCGTATG
## 4 AACTGGCCCTCAAAGTCCCGCTGTGTCAGTCACTTCCAGCGGTCGTATGC
## 5 TGTCAGTCACTTCCAGCGGTCGTATGCCGTCTTCTGCTTGAAAAAAAAAA
## 6 TGTAAACATCCCCGACTGGAAGCTGTGTCAGTCACTTCCAGCGGTCGTAT
datos de rna-seq 139
head(SRP042140_1.qa[["perCycle"]]$baseCall,n=10)
head(SRP042140_1.qa[["perCycle"]]$quality,n=10)
6.6 SRAdb
14
Vamos a ver cmo podemos buscar y bajar datos de secuencias 14
En esta seccin seguimos Zhu et al.
con el paquete Zhu and Davis [2016, SRAdb]. Por defecto trabaja [2013] as como la vieta de Zhu and
Davis [2016, SRAdb] y Sinha [2014, pg.
235].
140 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
con NCBI SRA aunque tambin podemos utilizarlo para bajar datos
de EBI ENA En la bsqueda que vamos a hacer consideraremos
datos que tengan que con cancer de mama y y en particular con
la actividad de los microRNA en este tipo de cncer. Cargamos el
paquete.
library(SRAdb)
Veamos cmo utilizarlo para bajar datos de SRA. Al ser una ba-
se de datos que se actualiza permanentemente hemos de bajar el
fichero fichero SRAdb SQLite de SRA. Lo hacemos con la funcin
SRAdb::getSRAdbFile. Fijamos el nombre del fichero local (por defec-
to, SRAmetadb.sqlite)
sqlfile = "SRAmetadb.sqlite"
SRAdb::dbDisconnect.
sraCon = dbConnect(SQLite(),sqlFile)
(sraTables = dbListTables(sraCon))
dbListFields(sraCon,"experiment")
## [1] "experiment_ID"
## [2] "bamFile"
## [3] "fastqFTP"
## [4] "experiment_alias"
## [5] "experiment_accession"
datos de rna-seq 141
## [6] "broker_name"
## [7] "center_name"
## [8] "title"
## [9] "study_name"
## [10] "study_accession"
## [11] "design_description"
## [12] "sample_name"
## [13] "sample_accession"
## [14] "sample_member"
## [15] "library_name"
## [16] "library_strategy"
## [17] "library_source"
## [18] "library_selection"
## [19] "library_layout"
## [20] "targeted_loci"
## [21] "library_construction_protocol"
## [22] "spot_length"
## [23] "adapter_spec"
## [24] "read_spec"
## [25] "platform"
## [26] "instrument_model"
## [27] "platform_parameters"
## [28] "sequence_space"
## [29] "base_caller"
## [30] "quality_scorer"
## [31] "number_of_levels"
## [32] "multiplier"
## [33] "qtype"
## [34] "sra_link"
## [35] "experiment_url_link"
## [36] "xref_link"
## [37] "experiment_entrez_link"
## [38] "ddbj_link"
## [39] "ena_link"
## [40] "experiment_attribute"
## [41] "submission_accession"
## [42] "sradb_updated"
dbGetQuery(sraCon,'PRAGMA TABLE_INFO(experiment)')
study.
class(busqueda)
## [1] "data.frame"
El nmero de registros es
dim(busqueda)
## [1] 12089 23
names(busqueda)
## [1] 186 66
datos de rna-seq 143
unique(busqueda[,"study"])
table(busqueda[,"study"])
##
## DRP002326 DRP002330 DRP002835 ERP002221 ERP004396
## 4 32 2 6 4
## ERP004399 ERP013303 SRP011278 SRP013022 SRP014142
## 4 8 6 4 15
## SRP016507 SRP017190 SRP018427 SRP022047 SRP023533
## 2 4 6 10 8
## SRP033584 SRP034635 SRP036035 SRP042140 SRP045204
## 1 6 6 9 4
## SRP051374 SRP060224 SRP062974
## 2 4 39
busqueda[busqueda[,"study"] == "SRP042140","sample"]
Los bajamos.
144 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
rs[1,]
listSRAfile(muestras,sraCon,fileType = 'sra')
dirTamiActual = getwd()
setwd(dirTamiData) ##Fijamos dnde queremos los datos
getSRAfile( muestras, sraCon, fileType='sra')
setwd(dirTamiActual)
c a t f i l e s | p a r a l l e l j 7 f a s t q dump s p l i t f i l e s
, { } . s r a
SRR1293399
SRR1293400
SRR1293401
SRR1293402
SRR1293403
SRR1293404
SRR1293405
SRR1293406
SRR1293407
1. Instalamos STAR.
6. Supongamos que:
SRR1293399_1 . bam
SRR1293400_1 . bam
SRR1293401_1 . bam
library(Rsamtools)
dirActualData = paste(dirTamiData,"SRP042140_sra/",sep="")
sampleTable = read.table(paste(dirActualData,"bamfiles.txt",sep=""))
fls = paste(dirActualData,"aligned/",sampleTable[,1],sep="")
bamLst = BamFileList(fls, index=character(),yieldSize=100000,obeyQname=TRUE)
library(GenomicFeatures)
datos de rna-seq 147
gtffile = paste(dirTamiData,
"ENSEMBL.homo_sapiens.release-75/Homo_sapiens.GRCh37.75.gtf",sep="")
6.10 Bowtie2
28 28
http://bowtie-bio.sourceforge.
net/bowtie2/manual.shtml
Es una herramienta software para alinear lecturas cortas sobre
secuencias de referencia largas. Soporta distintos modos de alinea-
miento: con huecos29 , locales y con lecturas apareadas30 . La salida 29
gapped
del programa la realiza en formato SAM. 30
Paired-end
El programa bowtie2 utiliza un fichero de ndices de clase Bow-
tie 2 y ficheros con lecturas secuenciadas y produce un fichero en
formato SAM.
Qu es alinear? Tomamos una lectura o secuencia corta y preten-
demos encontrar en una secuencia larga donde es ms similar, en que
punto hay una mayor similitud respecto de la secuencia larga o de
referencia. Cul es el resultado que obtenemos despus de alinear?
La secuencia corta es colocada sobre una parte de la secuencia de
referencia indicando en qu puntos se produce una correspondencia
e indicando los huecos31 que se han tenido que introducir en una 31
Gaps.
u otra de las secuencias para conseguir la mejor correspondencia
posible entre dichas secuencias.
Read: GACTGGGCGATCTCGACTTCG
||||| |||||||||| |||
Reference: GACTG--CGATCTCGACATCG
4. Alineamos con
t o p h a t 2 o f i l e _ t o p h a t _ o u t genome SRR479053_1 .
, f a s t q SRR479053_2 . f a s t q
samtools s o r t n f i l e _ t o p h a t _ o u t / a c c e p t e d _ h i t s .
, bam_sorted
Alineamos.
t o p h a t 2 o f i l e _ t o p h a t _ o u t genome SRR479053_1 . f a s t q
, SRR479053_2 . f a s t q
samtools s o r t n f i l e _ t o p h a t _ o u t / a c c e p t e d _ h i t s .
, bam_sorted
datos de rna-seq 151
load("maqc_eset.RData")
library(Biobase)
pData(maqc.eset)[,"tissue"]
data(parathyroidGenesSE,package="parathyroidSE")
se = parathyroidGenesSE
class(se)
## [1] "RangedSummarizedExperiment"
## attr(,"package")
## [1] "SummarizedExperiment"
Es un SummarizedExperiment::RangedSummarizedExperiment
y ser nuestra clase de referencia cuando trabajamos con datos de
RNA-seq.36 Cuntos genes y muestras tenemos? 36
Es muy conveniente leer la vieta de
Morgan et al. [2016b, SummarizedExpe-
riment].
152 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
dim(se)
## [1] 63193 27
Veamos las tres primeras filas (genes) y las tres primeras columnas
(muestras).
assay(se)[1:3,1:3]
colData(se)
Es un IRanges::DataFrame.
class(colData(se))
## [1] "DataFrame"
## attr(,"package")
## [1] "IRanges"
names(colData(se))
colData(se)[,"treatment"]
colData(se)$treatment
rowRanges(se)
rownames(se)
head(rownames(se))
39 39
En esta seccin hemos visto cmo
manejar un la clase GenomicRan-
ges::SummarizedExperiment y sus
6.14 GSE64099 mtodos asociados.
Construimos un ExpressionSet.
library(Biobase)
exprs0 = CountAll
rownames(exprs0) = EntrezAll
colnames(exprs0) = c("GSM1564328","GSM1564331","GSM1564329","GSM1564332",
"GSM1564327","GSM1564330","GSM1564333")
type = c(2,1,2,1,1,2,2)
type = factor(type,levels=1:2,labels=c("Wild-type","Smchd1"))
type = data.frame(type)
rownames(type) = colnames(exprs0)
datosfenotipo = new("AnnotatedDataFrame", data = type)
sampleNames(datosfenotipo)
datosexperimento = new('MIAME',name='GSE64099',
lab='Molecular Medicine Division, The Walter and Eliza Hall Institute
of Medical Research',
contact ='mritchie@wehi.edu.au',
title = ' Transcriptome profiling for genes transcriptionally
regulated by Smchd1 in lymphoma cell lines',
url = 'http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE64099')
gse64099 = new("ExpressionSet",exprs=exprs0,phenoData = datosfenotipo,
experimentData = datosexperimento,annotation = "MusMusculus")
nullsum = apply(exprs(gse64099),1,sum)==0
gse64099 = gse64099[!nullsum,]
x = read.table(file="GSE63776_PANC1_counts.txt",header=TRUE)
exprs0 = as.matrix(x[,-1])
rownames(exprs0) = x[,"Gene"]
type = factor(rep(1:2,each=3),levels=1:2,labels=c("siControl","siTCF7L2"))
pd0 = data.frame(type)
rownames(pd0) = colnames(exprs0)
datosfenotipo = new("AnnotatedDataFrame", data = pd0)
datosexperimento = new('MIAME',name='GSE63776',
lab='Seth Frietze and Farnham P',
contact ='seth.frietze@unco.edu',
title = ' ',abstract = 'We have compared the genome-wide effects on the
transcriptome after treatment with ICG-001 (the specific CBP inhibitor)
versus C646, a compound that competes with acetyl-coA for the Lys-coA
binding pocket of both CBP and p300. We found that both drugs cause
large-scale changes in the transcriptome of HCT116 colon cancer cells and
PANC1 pancreatic cancer cells, and reverse some tumor-specific changes in
gene expression. Interestingly, although the epigenetic inhibitors affect
cell cycle pathways in both the colon and pancreatic cancer cell lines,
the WNT signaling pathway was affected only in the colon cancer cells.
Notably, WNT target genes were similarly down-regulated after treatment
of HCT116 with C646 as with ICG-001.',
url = 'http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE63776',
other = list(notes = 'Public on Jan 07, 2015'))
gse63776 = new("ExpressionSet",exprs=exprs0,phenoData = datosfenotipo,
experimentData = datosexperimento,annotation =
"Illumina HiSeq 2000 (Homo sapiens)")
save(gse63776,file="gse63776.rda")
Cules son los efectos que pueden influir en las distintas mues- normalizar.
cN L cN2 L
= 1 L.
cN1 L + cN2 L
Es decir, es proporcional a la raiz cuadrada de la longitud del gen.
Puede pensarse que un correccin simple como sera dividir el conteo
por la longitud del gen corrige este efecto. Si aplicamos esta correc-
cin no se resuelve el problema ya que entonces la diferencia sera
D 0 = XL1 XL2 . Como es bien conocido47 tenemos que la media y 47
21
varianza de Xi /Ni son
Xi EXi Xi var ( Xi )
E = y var =
L L L L2
Por tanto el cociente entre la media y la desviacin estndar de D 0 no
se modifica y vale
cN L cN2 L
= 1 L.
cN1 L + cN2 L
158 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
6.16.1 RPKM
48 El primer mtodo de normalizacin se propuso en Mortazavi 48
Reads per kilobase per million.
et al. [2008]. Supongamos que denotamos el conteo de inters por C.
Es el nmero de lecturas alineadas sobre la caracterstica de inters
(exon, gen, etc.). El total de lecturas que podemos alinear es N (o
tamao de la librera). Y denotamos por L la longitud de la caracte-
rstica de inters en bp. Se define el RPKM como el siguiente cociente
109 C
RPKM = . (6.4)
NL
Esta cuantificacin de la expresin del gen nos permite comparar
genes entre s dentro de una misma muestra o librera.
ij Li
E Xij = mj,
cj
(r ) xij /m j
Mij = log2 = log2 ( xij /m j ) log2 ( xir /mr ),
xir /mr
y
(r ) 1
Aij = log2 ( xij /m j ) + log2 ( xir /mr )
2
(r )
Se eliminan los valores extremos tanto de los Mij como de los
(r )
Aij .49 En concreto eliminamos un porcentaje de los Mi ms peque- Recordemos que vara solamente i y
49
6.16.4
6.17.1 SRP064411
51 En esta seccin vamos a obtener los datos, mapear las lecturas, 51
Todo el anlisis incluido en
contar y finalmente normalizar los conteos para los datos SRP064411. esta seccin lo tenemos http:
//www.uv.es/ayala/docencia/tami/
La descripcin la podemos encontrar en http://www.ncbi.nlm.nih. org/SRP064411.html y podemos re-
gov/geo/query/acc.cgi?acc=GSE73681. producirlo ejecutando el cdigo como
se indica all. No se puede reproducir
1. Los datos los podemos bajar de ftp://ftp-trace.ncbi.nlm. exclusivamente con el material de esta
seccin.
nih.gov/sra/sra-instant/reads/ByStudy/sra/SRP%2FSRP064%
2FSRP064411/. Tambin los podemos bajar de http://www.ebi.ac.
uk/arrayexpress/experiments/E-GEOD-73681/?page=1&pagesize=
500.
bowtie2 x d i r I n d i c e U SRR2549634_1 . f a s t q S
, SRR2549634_1 . sam
library(Rsamtools)
library(GenomicFeatures)
sampleTable = read.table("bamfiles.txt")
dirActualData = "/home/gag/DOCENCIA/tami-data/SRP064411/sra/"
fls = paste(dirActualData,sampleTable[,1],sep="")
bamLst = BamFileList(fls, index=character(),yieldSize=100000,obeyQname=TRUE)
gtfFile = "~/DOCENCIA/tami-data/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf"
txdb = makeTxDbFromGFF(gtffile, format="gtf")
genes = exonsBy(txdb, by="gene")
library(GenomicAlignments)
SRP064411_SE = summarizeOverlaps(features = genes, read=bamLst,
mode="Union",
singleEnd=TRUE, ## No son lecturas apareadas
ignore.strand=TRUE,
fragments=FALSE)
10. Tenemos que aadir los metadatos o datos fenotpicos. Son los
siguientes donde lo que aparece en la primera columna es el nom-
bre que tiene la muestra en nuestro SummarizedExperiment, los
colnames.
162 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
SampleName = c("GSM1900735","GSM1900737","GSM1900739","GSM1900736",
"GSM1900738","GSM1900740")
Run = c("SRR2549634","SRR2549636","SRR2549638","SRR2549635",
"SRR2549637","SRR2549639")
Treatment = factor(c(0,0,1,0,1,1),levels=0:1,labels=c("wild-type","sec66del"))
Rep = c(1,3,2,2,1,3)
colData(SRP064411_SE) = DataFrame(SampleName,Run,Treatment,Rep)
save(SRP064411_SE,file="SRP064411_SE.rda")
Expresin diferencial
7
Expresin diferencial marginal
7.1 Introduccin
{i : i = 1, . . . , N; ui q p1 (u); vi q p2 (v)},
pacman::p_load("Biobase","ALL")
data(ALL)
bcell = grep("^B",as.character(ALL$BT))
types = c("NEG","BCR/ABL")
moltyp = which(as.character(ALL$mol.biol) %in% types)
bcrneg = ALL[,intersect(bcell,moltyp)]
bcrneg.iqr = apply(exprs(bcrneg),1,IQR)
bcrneg.median = apply(exprs(bcrneg),1,median)
sel.median = (bcrneg.median > quantile(bcrneg.median,0.5))
bcrneg.sd = apply(exprs(bcrneg),1,sd)
sel.sd = (bcrneg.sd > quantile(bcrneg.sd,0.5))
bcrneg.mean = apply(exprs(bcrneg),1,mean)
sel.mean = (bcrneg.mean > quantile(bcrneg.mean,0.5))
bcrneg2 = bcrneg[sel.sd & sel.mean,]
k sobre A
Otra opcin natural sera fijar un nivel de actividad mnima para
un gen y quedarnos con aquellos que superen este nivel mnimo de
actividad. Consideremos el siguiente criterio: si el nivel de expresin
mnimo es c y tenemos n muestras podemos pedir que un gen deter-
minado se considere activo si en al menos k muestras del total de n
su nivel de expresin supere este nivel mnimo de actividad.
Cmo hacerlo con R? Empezamos fijando el nivel mnimo c. Y
cmo? Podemos ver los percentiles de todas las expresiones (todos
los genes y todas las muestras).
expresin diferencial marginal 169
quantile(exprs(bcrneg))
c = 5.468801
overc[433,]
count.c = apply(overc,1,sum)
head(count.c)
table(sel.c)
## sel.c
## FALSE TRUE
## 4736 7889
library(Biobase)
library(genefilter)
f1 = kOverA(5, 5.468801)
ffun = filterfun(f1)
wh1 = genefilter(exprs(bcrneg), ffun)
table(wh1)
## wh1
## FALSE TRUE
## 4736 7889
f1 = kOverA(5, 200)
f2 = sdOverc(150)
f3 = iqrOverc(72)
ffun = filterfun(f1,f2,f3)
wh123 = genefilter(exprs(bcrneg), ffun)
table(wh123)
## wh123
## FALSE
## 12625
(para todas las muestras) es mayor que la mediana de los rangos in-
tercuartlicos. Luego vamos a necesitar conocer la anotacin de los
genes. Si esto es as podemos filtrar aquellos genes de los cuales des-
conocemos su anotacin. Para ello necesitamos conocer primero el
paquete de anotacin que utilizan nuestros datos.5 5
En http://www.bioconductor.org/
packages/release/data/annotation/
tenemos un listado de paquetes de
annotation(ALL)
anotacin.
## [1] "hgu95av2"
library(hgu95av2.db)
bcrneg.filt2 = nsFilter(bcrneg,var.func=sd,var.cutoff=0.5,
require.GOBP=TRUE)
sel = intersect(featureNames(bcrneg.filt1),
featureNames(bcrneg.filt2))
bcrneg1 = bcrneg[sel,]
7.4 Fold-change
7 Queremos comparar dos grupos. Denotamos los valores de ex- 7
Lo que comentamos en esta seccin
presin originales con xij (respectivamente yij ) para la i-sima carac- me ha costado de entender una en-
fermedad. Lo primero el porqu de
terstica en la j-sima muestra del primer grupo (respectivamente del utilizarlo y luego que hay una inde-
segundo grupo). A los logaritmos (en base 2 o log2) de los valores finicin en el trmino en la literatura.
Vamos a intentar aclarar qu signifi-
originales los denotamos por uij = log2 ( xij ) y vij = log2 (yij ). Para ca- ca antes de que se me olvide. Porque
da gen, tendremos una expresin media para la i-sima caracterstica mucho inters en usarlo no tengo.
expresin diferencial marginal 173
n x
en cada uno de los dos grupos xi = j=1 1 nij para la media en el pri-
1
mer grupo. Similarmente definimos yi , ui , vi . Qu se entiende por
fold-change? Dos son las interpretaciones de este valor. La primera
(Tusher et al. [2001]) lo define como
(1) xi
FCi = . (7.1)
yi
Lo definimos como el cociente de las medias de las expresiones en
la escala original. La segunda definicin (que no es equivalente a la
primera) es
(2)
FCi = ui vi , (7.2)
tenemos la diferencia de las medias de las log2 expresiones.
Un procedimiento8 que se ha utilizado frecuentemente en la lite- 8
Que no es estadstico y que por tanto
ratura de microarrays consiste en tomar el log2 del fold-change en la no vamos a considerar en este manual.
xi
2c ,
yi
o bien que
yi
2c .
xi
En este segundo caso el gen i se sobre expresa en el grupo 2 en re-
lacin con el primer grupo. El trmino que se utiliza es sobre re-
gulacin en el primer caso y de infra regulacin en el segundo.9 Se 9
Up (down) regulation.
utiliza con mucha frecuencia. Es sencillo, entendible y fcil de usar.
Pero no es una buena opcin. Lo fundamental, no se tiene en cuenta la
variabilidad de las medias que estamos comparando. Una opcin ms
correcta la vemos posteriormente en este tema y es la utilizacin de
un test de la t para comparar las medias de las dos poblaciones que
estamos comparando. O versiones modificadas del t-test clsico co-
mo la propuestas en Tusher et al. [2001] o en Smyth [2004] en donde
esencialmente se modifica la estimacin del error estndar.
174 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
data(golub,package="multtest")
golub.cl
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [24] 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
golub.cl = factor(golub.cl,levels=0:1,labels=c("ALL","AML"))
## [1] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL
## [12] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL
## [23] ALL ALL ALL ALL ALL AML AML AML AML AML AML
## [34] AML AML AML AML AML
## Levels: ALL AML
grep('Gdf5',golub.gnames[,2])
## [1] 2058
xGdf5 = golub[2058,]
(a) (b)
## [1] 1042
xCCND3 = golub[1042,]
tt = genefilter::rowttests(golub,golub.cl)
head(tt)
## statistic dm p.value
## 1 -2.5021067 -0.49226310 0.01702767
## 2 -1.1561671 -0.21787189 0.25522811
## 3 0.1099865 0.01993869 0.91303095
## 4 0.2726576 0.16946771 0.78667437
## 5 1.1866275 0.72659579 0.24314666
## 6 1.0922403 0.62997545 0.28198332
##
## FALSE TRUE
## 2006 1045
178 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
Con GeneSelector::RankingTstat
Vamos a obtener todos los t-tests con GeneSelector::RankingTstat.
pacman::p_load(GeneSelector)
data(golub,package="multtest")
ordT = RankingTstat(golub, golub.cl, type="unpaired")
class(ordT)
## [1] "GeneRanking"
## attr(,"package")
## [1] "GeneSelector"
Los Slots que contiene esta clase GeneRanking son los siguientes.
getSlots("GeneRanking")
## x y statistic ranking
## "matrix" "factor" "numeric" "numeric"
## pval type method
## "vector" "character" "character"
show(ordT)
## Ranking by ordinaryT,
## number of genes: 3051.
expresin diferencial marginal 179
toplist(ordT)
SS( Entre)/( I 1)
F=
SS( Intra)/(n I )
Bajo la hiptesis nula de que todas las medias son la misma (y puesto que
asumimos una misma varianza) tendramos una distribucin comn
bajo todas las condiciones. Asumiendo la hiptesis nula el estadstico
F se distribuye como un F con I-1 y n-I grados de libertad,
F FI 1,n I .
data(gse20986,package="tamidata")
y = exprs(gse20986)[678,]
summary(aov(y ~ pData(gse20986)[,"tissue"]))
## Df Sum Sq Mean Sq
## pData(gse20986)[, "tissue"] 3 0.00531 0.001770
## Residuals 8 0.02022 0.002527
## F value Pr(>F)
## pData(gse20986)[, "tissue"] 0.7 0.578
## Residuals
library(multtest)
library(genefilter)
gse20986.aov =
rowFtests(gse20986, pData(gse20986)[,"tissue"])
head(gse20986.aov,n=2)
## statistic p.value
_ _
## 1007 s at 9.778743 0.004720765
## 1053_at 14.134099 0.001459233
7.10 Ejercicios
Ej. 7 Con los datos multtest::golub y utilizando las funciones
base::apply, stats::sd, stats::IQR se pide:
1.Determinar para cada gen (esto es, las expresiones de una fila
dada) el rango intercuartlico.
2.Una vez hemos calculado el rango intercuartlico para gen calcular
el percentil de orden 0.50 (o mediana).
3.Determinar las filas correspondientes a los genes cuyo rango inter-
cuartlico supera el percentil que hemos calculado en el apartado
anterior.
4.Determinar aquellas filas donde al menos 10 muestras de las 38
superan una expresin de 0.
5.Seleccionar en la matriz de expresin golub las filas que verifican
los criterios dados en los puntos 3 y 4.
182 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
Hiptesis nula No rechazadas Rechazadas Total Tabla 8.1: Errores tipo I y II en contraste
de mltiples hiptesis
Verdadera U V N0
Falsa T S N N0 = N1
Total N-R R N
En esta tabla conocemos N, esto es, el nmero de contrastes de
hiptesis. Una vez hemos realizado todos los contrastes y tomado
una decisin sobre si rechazamos o no cada hiptesis nula podemos
observar R que nos indica cuntas hiptesis nulas hemos rechazado.
Obviamente R es una variable aleatoria. Distintos datos nos darn
distintos valores de R. Los valores de S, T, U, V son tambin alea-
torios. Sin embargo, estas variables no son observables. La variable
aleatoria V nos est dando el nmero (desconocido) de falsos positi-
vos o errores tipo I (no hay expresin diferencial pero decidimos que
la hay de un modo errneo) mientras que T nos da el nmero de fal-
sos negativos o error tipo II (genes que se expresan diferencialmente
pero no admitimos que no lo hacen). Ambas variables indican error y
son importantes.
Cuando realizamos un solo contraste el procedimiento consiste en
fijar una cota al error tipo I, el nivel de significacin, con un valor de-
terminado que solemos denotar por . Supongamos que denotamos
por pi el p-valor asociado al i-simo contraste. Entonces si aplicamos
la regla de rechazar Hi cuando pi y en otro caso aceptarla (o no
rechazarla como se prefiera). Con este procedimiento sabemos que
tenemos controlado el error tipo I para el contraste i-simo a un ni-
vel . Pero, y esto es fundamental, solamente para el ese contraste.
No sabemos nada de lo que ocurre simultneamente para todos los
contrastes. Supongamos que tenemos un estadstico Ti que utilizamos
para contrastar Hi y supongamos adems que rechazamos la hip-
tesis nula para valores grandes de | Ti |2 En este caso tendremos un 2
Una situacin as la tenemos cuando
valor c tal que rechazamos la hiptesis Hi cuando {| Ti | > c } y se observamos las muestras bajo dos
condiciones distintas y utilizamos un
tendr que test de la t de comparacin de medias.
P(| Ti | > c | Hi ) = .
Esto es, la probabilidad de rechazar cuando es cierta la hiptesis nula
es . O la probabilidad de no rechazar cuando es cierta la hiptesis
comparaciones mltiples 185
E (V )
PCER = ,
N
es la proporcin esperada de errores tipo I entre las m decisiones
que tomamos.
FWER = P(V 1 | i M0 Hi ),
que existe un conjunto N0 que nos da las que son ciertas y aquellos
que no estn en N0 son falsas. Y quin es N0 ? Ese es nuestro proble-
ma precisamente. En el control fuerte nos preparamos para cualquier
N0 sea el que sea. En lo que sigue cuando pongamos probabilidades
referidas a V (o cualquier otra variable) siempre han de entenderse
como probabilidades condicionadas a la realidad (desconocida para
nosotros), es decir, probabilidades condicionadas a i N0 Hi siendo
N0 el conjunto de hiptesis nulas ciertas (en nuestro caso, los genes
que estn en N0 no se expresan de un modo diferencial y s lo hacen
los que no estn en N0 ).
pi = P(| Ti | ti | Hi ).
m N
j=1 1/j
pri = mn mn prk , 1 .
k =i,...,N k
data(gse1397,package ="tamidata")
eset = gse1397; y = pData(gse1397)[,"type"]
tt = genefilter::rowttests(eset,y)
p0 = tt[,"p.value"]
tt1 = data.frame(tt,p.BH)
alpha = 0.05
p1 = p.adjust(p0, "BH")
## [1] 902
8.7 El q-valor
Qu es el q-valor?
Posiblemente el mejor modo de entender qu es el q-valor sea ver
un buen procedimiento para estimarlo propuesto en Storey and Tibs-
hirani [2003] e implementado en el paquete with contributions from
Andrew J. Bass et al. [2015, qvalue]. Fijamos un valor t y considere-
mos que rechazamos Hi cuando Pi t.11 Consideremos los siguien- 11
Como es habitual denotamos por Pi
tes valores el p-valor antes de ser observado, esto
es, el valor aleatorio antes de tomar los
datos.
V (t) = |{ Pi : Pi t; Hi es cierta; i = 1, . . . , N }| (8.6)
y
R(t) = |{ Pi : Pi t; i = 1, . . . , N }| (8.7)
R(t) = |{ pi : pi t}|
P( Pi t| Hi ) = t.
Por tanto
EV (t) = N0 t.
sobre todo el intervalo [0, 1], sin embargo, aquellos p-valores muy
pequeos, muy prximos a cero, es ms probable que correspondan
a hiptesis nulas falsas. Fijamos un valor [0, 1], un estimador
razonable para 0 es
|{ pi : pi > ; i = 1, . . . , N }|
0 = .
N (1 )
Podemos pues estimar pFDR con
\ = 0 Nt
pFDR .
|{ pi : pi t}|
El q-valor asociado a un contraste sera el mnimo valor de pFDR
que se alcanza cuando el contraste es rechazado. Es decir, el q-valor
asociado al test i-simo sera
q( pi ) = mn pFDR(t)
t pi
y su estimador sera
q( pi ) = mn pFDR
\ ( t ).
t pi
5. Calculamos
0 Nt
q( p(m) ) = mn = 0 p( N ) .
t p( N ) |{ pi : pi t}|
6. Para i = N 1, . . . , 1 calculamos
0 Nt 0 N p(i)
q( p(i) ) = mn = mn{ , q( p(i+1) )}.
t p (i ) |{ pi : pi t}| i
Calculando el q-valor
El mtodo de estimacin que hemos visto en 8.7 est implemen-
tado en el paquete with contributions from Andrew J. Bass et al.
[2015, qvalue].12 12
Tambin se pueden bajar programas
Utilizamos los datos tamidata::gse1397. que no requieren R para distintos
sistemas operativos. Se puede encontrar
en http://genomics.princeton.edu/
pacman::p_load("Biobase") storeylab/qvalue/.
data(gse1397,package="tamidata")
tt = genefilter::rowttests(gse1397,pData(gse1397)[,"type"])
pvalue = tt$p.value
pacman::p_load(qvalue)
qobj = qvalue(pvalue)
plot(qobj)
q.value = qvalue(pvalue)$qvalues
8.9 tami::tm.descrip
comparaciones mltiples 197
1.02 5
significant tests
1.00 4
^ 0()
3
0.98
2
0.96
^ 0 = 0.955
1
0.00 0.25 0.50 0.75 1.00 0.01 0.02 0.03 0.04
qvalue cutoff
expected false positives
0.04 0.20
0.15
qvalue
0.03
0.02 0.10
0.05
0.01
0.00
0e+00 3e06 6e06 9e06 1 2 3 4 5
pvalue significant tests
Figura 8.1: Distintos grficos asociados
a un objeto qvalue::qvalue.
198 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
library(tamidata)
eset = gse1397
y = pData(gse1397)[,"type"]
tm.descrip = function(eset,y){
if(class(eset) != "ExpressionSet") return("eset is not an ExpressionSet \n")
if(!is.factor(y) | nlevels(y) != 2) return("The covariable y is not a factor
or its number of levels is not equal to 2 \n")
## Calculate t-statistic and p-value
tt = rowttests(eset,y)
tstat = tt$statistic
p.value = tt$p.value
## Calculate the adjusted p-value (Benjamini-Hochberg)
p0 = mt.rawp2adjp(p.value, "BH")
adjp.value = p0$adjp[order(p0$index),2]
## Calculate the Storey q-value
q.value = qvalue(p.value)$qvalues
## Make the data.frame
result = data.frame(tstat,p.value,adjp.value,q.value)
## Names of the variables in the data.frame
names(result) = c("statistic","p","adj.p","q")
## Assign the names of the features
rownames(result) = featureNames(eset)
## Return the resulting data.frame
result
}
library(genefilter);library(multtest);library(qvalue)
z = tm.descrip(eset,y)
z = tm.descrip(gse1397,pData(gse1397)[,"type"])
head(z)
## statistic p adj.p
## 1007_s_at -0.6183648 0.54789263 0.9901883
## 1053_at 0.6022344 0.55822637 0.9901883
## 117_at 1.5635785 0.14389203 0.9901883
## 121_at -0.8738516 0.39934953 0.9901883
## 1255_g_at 0.3815208 0.70948639 0.9901883
## 1294_at 2.9096918 0.01308856 0.9901883
## q
## 1007_s_at 0.9453875
## 1053_at 0.9453875
## 117_at 0.9453875
## 121_at 0.9453875
## 1255_g_at 0.9453875
## 1294_at 0.9453875
8.10 Ejercicios
Ej. 10 Utilizando los datos tamidata::gse20986 se pide:
1.Seleccionar las muestras correspondientes a iris y huvec.
2.Aplicamos, a cada gen, un test de la t (asumiendo una misma va-
rianza). Obtener los t-estadsticos y los p-valores correspondientes.
14 14
Utilizad genefilter::rowttests.
y
1/n1 + 1/n2
a=
n1 + n2
202 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
Bajo la hiptesis nula de que no hay diferencias entre los dos gru-
pos los valores de d(i) y de d(i) debieran de ser similares.
y
l () = max{di : i es significativamente negativo}
expresin diferencial con microarrays 203
0 = mn{0 , 1}.
3 3
En la opcin en que estamos compa-
rando varios grupos que vemos ms
adelante los valores de d son todos
9. Multiplicamos la mediana, q0,5 (c), y el percentil 0.9, q0,90 (c), deter-
positivos y se trabaja con los percentiles
minados en el paso 7 por 0 . 0 y 0.5.
9.1.2 Clculo de s0
La seleccin de s0 se hace del siguiente modo:
a) Se calcula
1 ()
vj = MAD ({di : si [q j/100 (s), q( j+1)/100 (s)]})
0,64
para j = 1, . . . , 100 donde MAD es la mediana de las desviacio-
nes absolutas respecto de la mediana ( 20.4).
b) Calculamos el valor CV (), el coeficiente de variacin de los
valores v j .4 4
El coeficiente de variacin es el cocien-
te de la media y la desviacin estndar.
c) Se elige como valor de : que minimiza CV ().
d) Finalmente tomamos para s0 : s0 = q (s).
pacman::p_load("samr")
data(golub,package="multtest")
fac0 = golub.cl +1
samfit = SAM(golub,fac0,resp.type="Two class unpaired",
nperms=1000,fdr.output=.001)
Qu valor de se ha utilizado?
samfit$del
## delta
## 1.584171
(sigtabla = samfit$siggenes.table)
y por abajo indican los genes up y los genes down. En la figura 9.1
observed score
podemos ver los resultados.
0
plot(samfit)
donde s
nj=1 ( xij xij )2
i = , (9.8)
n2
y
xij = i0 + ri y j , (9.9)
i0 = xi ri y. (9.10)
9.1.5 Ejercicios
Ejercicio 4. Utilizando los datos tamidata::gse20986 se pide:
9.2 Limma
denotamos por
Xi = ( Xi1 , . . . , Xin )0 .
Los correspondientes valores observados los denotaremos utilizando
minsculas, es decir;
xi = ( xi1 , . . . , xin )0 .
El vector Xi es el vector respuesta para el i-simo ajuste que vamos
a realizar. 9 Denotamos, como es habitual, por E( Xi ) el vector de 9
Asumimos que se ha preprocesado
medias del vector Xi que tiene en cada componente la media de la corrigiendo fondo y normalizando y
que los datos estn en escala log2 .
variable Xij , es decir, EXi = ( EXi1 , . . . , EXin )0 . Se asume:
1.
E( Xi ) = Ai (9.11)
siendo A una matriz de diseo de rango completo en columnas10 10
Todas sus columnas linealmente
independientes.
y i es un vector de coeficientes.
var ( Xi ) = i2 Wi , (9.12)
i = C 0 i ,
y de su matriz de covarianzas es
var ( i ) = C 0 Vi Cs2i .
expresin diferencial con microarrays 209
1. ij | ij , i2 N ( ij , vij i2 ).
2
2. s2i |i2 di 2d siendo di los grados de libertad residuales del
i i
modelo ajustado para el i-simo gen.
ij
tij =
si vij
1 1 2
.
i2 d0 s20 d0
ij
tij = 2 .
si vij
P( ij 6= 0|tij,s2 )
i
Oij = . (9.14)
P( ij = 0|tij,s2 )
i
pj
vij
1/2 t2ij + d0 + di (1d0 +di )/2
Oij = vij (9.15)
1 pj vij + v0j t2ij v + d o + di
ij + voj
Finalmente los autores proponen trabajar con los log-odds dados por
9.15 y la definicin 9.16 es fcil ver que, asumiendo que los di y los vi
no varan entre genes16 , entonces los log-odds B son funciones mon- 16
O varan muy poco.
tonas de |tij . En resumen, la ordenacin de los genes que obtenemos
con los log-odds o con los estadsticos |tij es la misma.
Es claro que los log-odds tienen una interpretacin sencilla y, por
ello, son tiles. Sin embargo, para decidir qu genes son significativos
para el contraste en que estemos interesados es mejor opcin trabajar
con los t-estadsticos moderados.17 17
Cuya definicin es una especie de
Trabajar con los t-estadsticos moderados, t, en lugar de con los mezcla inteligente de Estadstica clsica
y bayesiana.
log-odds tiene otra ventaja. Los t dependen solamente de d0 y s20 . Sin
embargo, los log-odds dependen adems de v0j y de los p j . Obvia-
mente requerimos menos estimaciones previas de hiperparmetros.18 18
Cosa nada desdeable.
Lo ms importante, sin duda,el t-estadstico moderado tiene la
ventaja sobre el t-estadstico usual de que es menos probable que
aparezcan valores muy grandes simplemente porque las varianzas
muestrales infraestiman las varianzas poblaciones. Trabajamos con
pequeas muestras lo que hace que la estimacin de la varianza sea
poco precisa. Una infraestimacin notable de esta varianza ocasiona
que el estadstico sea muy grande aunque no tengamos una diferen-
cia de medias grande. Este mismo problema se comenta en 9.1. All
se propona aadir una constante (estimada a partir de los propios
datos) a la desviacin estndar de la diferencia de medias (el error
estndar). Esto es lo mismo? Es similar en espritu pero no es lo mis-
mo. Si los grados de libertad verifican do < + y di > 0 entonces los
t-estadsticos moderados tienen la siguiente expresin
1/2
d0 + d i ij
tij = q ,
di s2,i vij
siendo
d0 2
s2,i = s2i + s .
di 0
Cada varianza muestral es incrementada un valor positivo en prin-
cipio distinto para cada gen. La idea que vimos en 9.1 consista en
considerar
ij
t,ij =
(si + a) vij
donde a es un valor positivo determinado por un mtodo ad-hoc. En
este mtodo lo que se incrementa es la desviacin estndar y no la
varianza. El t-estadstico moderado incrementa la varianza. Adems
el incremento puede ser distinto para cada gen.
Y si queremos contrastar ms de un contraste al mismo tiempo?
En lugar de t-estadsticos moderados tendremos F-estadsticos mo-
derados. Se comprueba que los F-estadsticos moderados no son ms
que los F-estadsticos usuales en los cuales sustituimos las varianzas
212 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
data(gse44456,package="tamidata")
pData(gse44456)[,"postmortenint"]
Cargamos Limma.
library(limma)
head(design)
## intercept postmortenint
## 1 1 16.75
## 2 1 27.00
## 3 1 29.00
## 4 1 24.00
## 5 1 24.00
## 6 1 24.00
fit = lmFit(gse44456,design)
fit1 = eBayes(fit)
topTable(fit1,coef=2,adjust ="BH")
## logFC AveExpr t
## 7898750 -0.011508519 6.747570 -6.443278
## 8170468 0.013115884 6.012464 5.689956
## 7969651 -0.010989325 7.051056 -5.687741
## 8111415 0.008178560 2.540914 5.065649
## 7895171 0.012638970 8.895633 4.980637
## 7959012 0.012611550 4.428257 4.935664
## 7972269 -0.009755820 4.360153 -4.919346
## 8152664 -0.015744665 4.187651 -4.870722
## 7896252 -0.008523726 11.280638 -4.834066
## 7921533 -0.013989202 8.399406 -4.826789
## P.Value adj.P.Val B
## 7898750 1.016754e-07 0.003385485 6.398649
## 8170468 1.196673e-06 0.013378383 3.937214
## 7969651 1.205368e-06 0.013378383 3.930008
## 8111415 9.095965e-06 0.060272779 1.924620
## 7895171 1.195878e-05 0.060272779 1.654193
## 7959012 1.381685e-05 0.060272779 1.511583
## 7972269 1.455932e-05 0.060272779 1.459918
## 8152664 1.701344e-05 0.060272779 1.306232
## 7896252 1.912948e-05 0.060272779 1.190642
## 7921533 1.957948e-05 0.060272779 1.167723
pacman::p_load("limma")
data(gse44456,package="tamidata")
214 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
head(pData(gse44456))
Ajustamos el modelo.
fit = lmFit(gse44456,design)
expresin diferencial con microarrays 215
## Contrasts
## Levels dif
## control 1
## alcoholic -1
Estimamos.
fit2 = contrasts.fit(fit,contrast.matrix)
fit2 = eBayes(fit2)
topTable(fit2,coef=1,adjust="BH")
## logFC AveExpr t
## 7927186 -0.5424921 7.826424 -5.914411
## 8125919 -1.1358866 8.313619 -5.628792
## 8021081 -1.2885800 8.593822 -5.481851
## 7961595 0.5322101 4.180459 5.440839
## 7995838 -0.9825655 8.540374 -5.096932
## 8130867 0.5858452 7.566787 5.083113
## 8114814 0.3685955 7.694306 5.003841
## 7922889 0.5172199 8.438433 4.946850
## 8021741 0.7651623 9.183204 4.720399
## 8099476 0.5231415 5.584413 4.658028
## P.Value adj.P.Val B
## 7927186 5.718213e-07 0.01903993 5.029195
## 8125919 1.455678e-06 0.02236997 4.307423
## 8021081 2.351231e-06 0.02236997 3.935029
## 7961595 2.687326e-06 0.02236997 3.831026
## 7995838 8.199033e-06 0.04757580 2.959048
## 8130867 8.572989e-06 0.04757580 2.924055
## 8114814 1.106824e-05 0.05264847 2.723446
## 7922889 1.329382e-05 0.05533056 2.579390
## 8021741 2.741801e-05 0.10143750 2.008880
## 8099476 3.342454e-05 0.10201553 1.852423
table(pData(gse44456)[,"case"],pData(gse44456)[,"gender"])
##
## male female
## control 13 6
## alcoholic 14 6
casegender = vector("list",ncol(gse44456))
for(i in seq_along(casegender))
casegender[[i]] = paste(pData(gse44456)[,"case"][i],
pData(gse44456)[,"gender"][i],sep="")
casegender = factor(unlist(casegender))
fit = lmFit(gse44456,design)
cont.matrix = makeContrasts(
dif1 = controlmale - alcoholicmale,
dif2 = controlfemale - alcoholicfemale,
dif12 = (controlmale - alcoholicmale)- (controlfemale - alcoholicfemale),
levels = design)
fit2 = contrasts.fit(fit,cont.matrix)
fit2 = eBayes(fit2)
expresin diferencial con microarrays 217
topTable(fit2,coef=1,adjust="BH")
topTable(fit2,coef=2,adjust="BH")
topTable(fit2,coef=3,adjust="BH")
pacman::p_load("SummarizedExperiment")
data(PRJNA297664,package="tamidata")
se = PRJNA297664
rm(PRJNA297664)
220 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
colData(se)[,"treatment"]
pacman::p_load("edgeR")
pvalor13 = edgeR::binomTest(assay(se)[,1], assay(se)[,3])
Podemos hacernos una idea de cmo son estos p-valores con una
estimacin de su funcin de densidad con (figura 10.1).
pacman::p_load(ggplot2)
df = data.frame(pvalor13)
ggplot2::ggplot(df,aes(x=pvalor13)) + geom_density()
pares = rbind(c(1,3),c(1,5),c(1,6),c(2,3),c(2,5),c(2,6),c(4,3),
c(4,5),c(4,6))
aux = function(rr) binomTest(assay(se)[,rr[1]], assay(se)[,rr[2]])
pvalores = apply(pares,1,aux)
10.2 edgeR
2 nj
li ( ) = log (yijk + 1 ) + log (n j 1 )
j =1 k =1
1 1
log (zij + n j ) n j log ( ) . (10.3)
Hi : i1 = i2 ,
Ki : i1 6= i2 .
W L(i ) = li (i ) + l (i ), (10.5)
expresin diferencial con datos rnaseq 225
2 li ( )
Ii () = E( Ji ), siendo Ji = . (10.7)
2
N
Si (0 )
Ii (0 )(1 + Ii (0 )02 )
1 = 0.
i =1
4. Fijamos
N
1/ = 02 Ii (0 ).
i =1
data(PRJNA297664,package="tamidata")
pacman::p_load("edgeR","SummarizedExperiment")
dge = DGEList(counts=assay(PRJNA297664),
group=colData(PRJNA297664)[,"treatment"])
dge.c = estimateCommonDisp(dge) ##Estimamos dispersin comn
dge.c$common.dispersion
## [1] 0.01170892
topTags(et.c)
topTags(et.t)
library(Biobase)
load("maqc_eset.RData")
library(edgeR)
dge = DGEList(counts=exprs(maqc.eset),group=pData(maqc.eset)[,"tissue"])
228 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
En dge$counts tenemos una matriz con los conteos por gen sien-
do las etiquetas de las filas los cdigos del gen en Ensembl.14 En 14
Como los autores haban indicado en
dge$samples tenemos un data.frame donde la variable group es el su ExpressionSet.
head(apply(dge$counts,2,sum))
dge.c = estimateCommonDisp(dge)
dge.c$common.dispersion
## [1] 0.0005323165
head(dge.c$pseudo.counts,n=1)
## SRX016359.1 SRX016359.2
## ENSG00000000003 1.382062 1.957434
## SRX016359.3 SRX016359.4
## ENSG00000000003 2.931757 4.692939
## SRX016359.6 SRX016359.7
## ENSG00000000003 2.855939 1.885639
## SRX016359.8 SRX016367.1
## ENSG00000000003 2.169403 14.07605
## SRX016367.2 SRX016367.3
## ENSG00000000003 19.29528 24.89897
## SRX016367.4 SRX016367.6
## ENSG00000000003 35.4524 19.05291
## SRX016367.7 SRX016367.8
## ENSG00000000003 11.25658 21.67744
Que son16 16
Podemos comprobar que el objeto que
vamos obteniendo cada vez contiene
la informacin previa ms informacin
head(dge.t$tagwise.dispersion)
adicional en cada paso.
(et.c = exactTest(dge.c))
(et.t = exactTest(dge.t))
10.4 SAMseq
Sera el muestreo Poisson. Para evitar empates entre los valores gene-
rados se sustituyen estos valores por
Xij0 + eij
1. Calculamos T1 , . . . , TN
a partir de nuestros datos.
[ (c) = 0 V .
FDR (10.13)
R
expresin diferencial con datos rnaseq 233
2 iN=1 1|T |q
i
0 = ,
N
siendo q la mediana de {| Ti (s)| : i = 1, . . . , N; s = 1, . . . , S}.
pacman::p_load("SummarizedExperiment","samr")
data(PRJNA297664,package="tamidata")
print(PRJNA297664samseq)
plot(PRJNA297664samseq)
10.5 DESeq
ij = qi,( j) s j , (10.14)
2. Sobre la varianza:
ij2 = ij + s2j i,( j) . (10.15)
234 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
En http://www.bioconductor.org/help/workflows/rnaseqGene/
tenemos un ejemplo completamente desarrollado con este ejemplo.
10.6 DESeq2
Lo instalamos con
apt g e t i n s t a l l c u f f l i n k s
10.8 baySeq
10.9 NOIseq
10.10 Limma
10.11 Cuffdiff 2
25 25
En Debian/Ubuntu instalamos el
paquete cufflinks. Las direcciones
importantes son https://github.
10.12 EBSeq com/cole-trapnell-lab/cufflinks y
http://cole-trapnell-lab.github.
io/cufflinks/manual/.
10.13 Material adicional
library(Biobase)
data(gse20986,package="tamidata")
eset = gse20986
library(genefilter)
library(multtest)
eset = gse20986[, c(2, 3, 5, 10:12)]
tissue = factor(rep(1:2, each = 3), levels = 1:2,
labels = c("retina", "huvec"))
tt = rowttests(eset, tissue)
p.BH = mt.rawp2adjp(tt$p.value, "BH")
sig = which(p.BH$adjp[p.BH$index, 2] < 0.05)
head(sig)
El nmero de significativos es
nsig = length(sig)
pvalor = p.BH$adjp[1:nsig,1]
pajustado = p.BH$adjp[1:nsig,2]
library(annotate)
annotation(eset)
## [1] "hgu133plus2"
library(hgu133plus2.db)
ID = featureNames(eset)[sig]
head(ID)
O en Gene Ontology?
ls("package:hgu133plus2.db")
12.2 R2HTML
library(R2HTML)
ID = featureNames(eset)[sig] ## AffyID
Symbol = getSYMBOL(ID,"hgu133plus2.db") ## Smbolo
Name = as.character(lookUp(ID, "hgu133plus2.db", "GENENAME")) # Nombre
Ensembl = as.character(lookUp(ID, "hgu133plus2.db", "ENSEMBL")) # Ensembl
entrezid = as.character(lookUp(ID, "hgu133plus2.db", "ENTREZID")) # Entrez
Podemos tener campos vacos que hay que declarar como datos
faltantes.
tmp[tmp=="NA"] = NA
HTML(tmp,"reports/prueba.html",append=F)
browseURL("reports/prueba.html")
browseURL("reports/prueba.html")
12.3 ReportingTools
library(ReportingTools)
ID = featureNames(eset)[sig]
Name = as.character(lookUp(ID,"hgu133plus2.db", "GENENAME"))
entrezid = as.character(lookUp(ID, "hgu133plus2.db", "ENTREZID"))
ID[ID == "NA"] = NA
Name[Name == "NA"] = NA
entrezid = ifelse(entrezid == "NA",NA,
paste("<a href='http://www.ncbi.nlm.nih.gov/gene/?term=",
entrezid,"'>",entrezid,"</a>",sep=""))
foutput = "gse20986.DE"
htmlRep1 = HTMLReport(shortName = foutput,title = foutput,
reportDirectory = "./reports")
publish(df,htmlRep1)
finish(htmlRep1)
## [1] "./reports/gse20986.DE.html"
5 5
La funcin tami::tm.report1 contiene
una implementacin de esta seccin.
12.4 Ejercicios
3. Elegir al azar 100 genes con la funcin sample. Determinar sus AffyIDs
y los correspondientes en Ensembl, Gene Ontology y NCBI.
Reduccin de dimensin y
clasificacin
13
Componentes principales
13.1 Introduccin
library(multtest)
data(golub)
sel = grep("Cyclin",golub.gnames[,2])
golub.red = golub[sel,1:2]
1.5
1.0
golub.red[,2]
0.5
plot(golub.red)
0.0
en las dos muestras como xi = ( xi1 , xi1 ). Tenemos n filas y por lo 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2.0
tanto nuestros datos son xi con i = 1, . . . , n. golub.red[,1]
medias = colMeans(golub.red)
medias = apply(golub.red,2,mean)
golub.red = sweep(golub.red,2,medias)
plot(golub.red)
abline(v=mean(golub.red[,1]),col="red")
abline(h=mean(golub.red[,2]),col="red")
a.pca = prcomp(golub.red)
a.pca$rotation
## PC1 PC2
## [1,] -0.7619878 0.6475914
## [2,] -0.6475914 -0.7619878
colMeans(golub.red)
a.pca = prcomp(golub.red)
a.pca$rotation
## PC1 PC2
## [1,] -0.7619878 0.6475914
## [2,] -0.6475914 -0.7619878
predict(a.pca)
## PC1 PC2
## [1,] -2.50309193 -1.541823e-01
## [2,] 0.01368602 -2.024163e-01
## [3,] -2.38702381 3.714339e-03
## [4,] 0.33489688 -6.847077e-05
## [5,] 0.76608286 2.806154e-01
## [6,] 0.27144878 2.899820e-02
## [7,] 0.31169639 -2.876394e-01
## [8,] 2.22052303 -8.232084e-02
## [9,] -0.93221244 1.836866e-01
## [10,] -0.39946389 -7.239549e-03
## [11,] 0.08293509 3.191733e-01
## [12,] 2.22052303 -8.232084e-02
a.pca$sdev^2
var(golub.red[,1])
## [1] 1.266931
var(golub.red[,2])
## [1] 0.9245807
cuya suma es
var(golub.red[,1]) + var(golub.red[,2])
## [1] 2.191512
sum(a.pca$sdev^2)
## [1] 2.191512
variacion.total = sum(a.pca$sdev^2)
a.pca$sdev^2 / variacion.total
golub.pca = prcomp(golub,scale=FALSE,center=TRUE)
summary(golub.pca)
## Importance of components:
## PC1 PC2 PC3
## Standard deviation 5.0436 1.44073 1.11734
## Proportion of Variance 0.6694 0.05462 0.03285
## Cumulative Proportion 0.6694 0.72405 0.75691
## PC4 PC5 PC6
## Standard deviation 1.03505 0.85821 0.74399
## Proportion of Variance 0.02819 0.01938 0.01457
## Cumulative Proportion 0.78510 0.80448 0.81905
## PC7 PC8 PC9
## Standard deviation 0.72104 0.69232 0.63819
## Proportion of Variance 0.01368 0.01261 0.01072
## Cumulative Proportion 0.83273 0.84534 0.85606
## PC10 PC11 PC12
254 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
a = predict(golub.pca)
a[1,]
a = a[,1:5]
256 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
5
plot(a[,1],a[,2],xlab="Primera componente",ylab="Segunda componente")
Segunda componente
0
Es interesante observar los valores del vector asociado a la primera
componente.
golub.pca$rotation[,1]
5 0 5 10 15 20
## [1] 0.1715179 0.1690829 0.1650131 0.1726783 Primera componente
golub.pca$rotation[,2]
cada gen, la media de los niveles de expresin sobre los datos ALL
(leucemia linfoblstica aguda) con la media sobre los datos AML
(leucemia mieloide aguda).
tgolub.pca = prcomp(t(golub),scale=FALSE,center=TRUE)
summary(tgolub.pca)
## Importance of components:
## PC1 PC2 PC3
## Standard deviation 13.0934 10.17462 9.40357
## Proportion of Variance 0.1645 0.09934 0.08485
## Cumulative Proportion 0.1645 0.26385 0.34870
## PC4 PC5 PC6
## Standard deviation 7.9010 6.82616 6.62780
## Proportion of Variance 0.0599 0.04471 0.04215
## Cumulative Proportion 0.4086 0.45332 0.49547
## PC7 PC8 PC9
## Standard deviation 6.30435 5.83194 5.79413
## Proportion of Variance 0.03814 0.03264 0.03222
## Cumulative Proportion 0.53361 0.56625 0.59846
## PC10 PC11 PC12
## Standard deviation 5.15726 5.01893 4.90719
## Proportion of Variance 0.02552 0.02417 0.02311
258 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
20
library(affycoretools)
plotPCA(golub,legend = FALSE)
10
PC2
plotPCA(t(golub),legend = FALSE)
10
ducen los grupos que sabemos que previamente tenemos (aqu no hemos PC1
realizado ningn anlisis cluster previo). En la figura 13.6 mostramos la Figura 13.4: Dos primeras componentes
principales de los datos golub utilizan-
misma figura 13.4 pero diferenciando el tipo de muestra (segn el tipo de
do como variables las expresiones en
leucemia). los genes.
5
Podemos ver cmo la primera componente principal diferencia bastante
PC2
13.5 Tipificamos los datos?
5 0 5 10 15 20
Hemos trabajado hasta ahora con los datos centrados (restamos la
PC1
media muestral a cada variable) pero no hemos tipificado, esto es, no
Figura 13.5: Dos primeras componentes
hemos dividido cada variable por su desviacin estndar. Si los datos
principales de los datos golub utilizan-
tienen una escala similar esta es la opcin razonable. Para matrices de do como variables las expresiones en las
expresin esto es as, estamos midiendo lo mismo en distintas mues- muestras.
es scale = TRUE.
PC2
golub.pca = prcomp(golub,scale=TRUE,center=TRUE)
10
summary(golub.pca)
tgolub.pca = prcomp(t(golub),scale=TRUE,center=TRUE) 20 10 0 10 20
summary(tgolub.pca) PC1
data(gse20986,package="tamidata")
pData(gse20986)[,"tissue"]
groupnames = c("iris","retina","choroides","huvec"))
iris
100
retina
choroides
huvec
Llama la atencin la clara diferenciacin de las tres muestras corres-
50
pondientes a huvec. Aparecen dispersas pero separadas de los dems las
PC2
correspondientes a la retina. Finalmente las muestras de iris y coroides no
50
Vemos que son informativas pero: qu proporcin de la variacin total
explican? Realizamos unas componentes principales de las muestras. Note- 60 40 20 0 20 40 60 80
que de lo contrario las componentes se estaran realizando sobre las mues- Figura 13.7: Datos GSE20986. Com-
tras. ponentes principales de los genes. Se
aprecia como el grupo huvec (tejido de
vena umbilical) se diferencia claramente
a.pca = prcomp(t(exprs(gse20986))) de los dems.
summary(a.pca)
## Importance of components:
## PC1 PC2 PC3
## Standard deviation 64.0229 58.2172 32.70677
## Proportion of Variance 0.3536 0.2924 0.09229
## Cumulative Proportion 0.3536 0.6461 0.73835
## PC4 PC5 PC6
## Standard deviation 27.38272 24.78311 21.58422
## Proportion of Variance 0.06469 0.05299 0.04019
## Cumulative Proportion 0.80304 0.85603 0.89622
## PC7 PC8 PC9
## Standard deviation 18.60405 17.9184 15.86808
## Proportion of Variance 0.02986 0.0277 0.02172
## Cumulative Proportion 0.92608 0.9538 0.97551
## PC10 PC11
componentes principales 261
data(gse1397,package="tamidata")
pData(gse1397)
pData(gse1397)[,'type']
pData(gse1397)[,'tissue']
Euploid
## Levels: Cerebrum Cerebellum
TS21
10000
el tipo de alteracin.
Las dos primeras componentes vemos como no nos diferencian el tipo de Figura 13.8: Dos primeras compo-
nentes principales de datos GSE1397
alteracin. Sin embargo, cuando consideramos el tejido de donde obtuvimos diferenciando el diagnstico.
262 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
20000
Cerebrum
Cerebellum
10000
library(affycoretools)
plotPCA(gse1397, groups = pData(gse1397)[,'tissue'],
PC2
0
groupnames = levels(pData(gse1397)[,'tissue']))
20000 10000
PC1
T 0 T = = diag(1 , . . . , d ), (13.1)
Demostracin.
En cuanto al apartado primero tenemos que
Y 0 = (y1 , . . . , yn ) = T 0 ( x1 x, . . . , xn x ) (13.3)
kj=1 j
, con k = 1, . . . , d,
dj=1 j
14.1 Introduccin
14.2 Datos
library(cluster)
data(ruspini)
150
En la figura 14.1 mostramos estos datos.
100
plot(ruspini)
50
Son datos bivariantes. Visualmente vemos cmo se agrupan los
puntos. Parece (muy) claro que podemos distinguir cuatro grupos.
0
0 20 40 60 80 100 120
x
14.2.2 Un ejemplo con muestras
Figura 14.1: Datos ruspini
Un ejemplo con los datos golub. Empezamos cargando los datos.
library(multtest)
data(golub)
## [1] 1042
grep("Zyxin",golub.gnames[,2])
## [1] 2124
cz.data = data.frame(golub[1042,],golub[2124,])
colnames(cz.data) = c("CCND3 Cyclin D3","Zyxin")
plot(cz.data)
Zyxin
library(multtest)
data(golub)
x = apply(golub[,golub.cl == 0],1,mean)
y = apply(golub[,golub.cl == 1],1,mean)
sel = grep("Cyclin",golub.gnames[,2])
golub.gnames[sel,2]
cyclin.data = data.frame(x[sel],y[sel])
colnames(cyclin.data) = c("meanALL","meanAML")
plot(cyclin.data)
1.0
No parece, al menos visualmente, que tengamos muchos grupos.
De eso se trata. De saber si hay grupos y encontrarlos.
0.5
meanAML
0.0
14.3 Disimilaridades
0.5
1.0
d
d M ( x, y) = | x k y k |. (14.2)
k =1
1. d( x, y) = 1 r x,y ,
2. d( x, y) = (1 r x,y )/2,
3. d( x, y) = 1 |r x,y |,
q
4. d( x, y) = 1 r2x,y .
5 De un modo similar podemos definir disimilaridades sustituyendo 5
En http://research.
stowers-institute.org/efg/R/
el coeficiente de correlacin de Pearson con el coeficiente de correla-
Visualization/cor-cluster/ po-
cin de Spearman. demos encontrar un breve estudio
comparativo del funcionamiento de
estas disimilaridades en clustering
14.3.3 Matriz de disimilaridades jerrquico.
d ( x i , x j ) = d ( x j , x i ),
D = [d( xi , x j )]i,j=1,...,n
d( xi , xi ) = 0,
cz.dist.euclidea = dist(cz.data,method="euclidian")
De qu clase es cz.dist.euclidea.
class(cz.dist.euclidea)
## [1] "dist"
cz.dist.euclidea
cz.dist.manhattan = dist(cz.data,method="manhattan")
data(golub,package="multtest")
golub.cor1 = 1-cor(t(golub))
golub.cor2 = (1-cor(t(golub)))/2
golub.cor3 = 1-abs(cor(t(golub)))
golub.cor4 = sqrt(1-cor(t(golub))^2)
En este caso cz.dist s es una matriz completa (con todas sus filas
y columnas). La vamos a transformar a un objeto de clase dist.
golub.cor1 = as.dist(golub.cor1)
golub.cor2 = as.dist(golub.cor2)
golub.cor3 = as.dist(golub.cor3)
golub.cor4 = as.dist(golub.cor4)
d( A, B) = mn d( a, b)
a A,b B
d( A, B) = max d( a, b)
a A,b B
1
d( A, B) =
| A| | B| d( a, b)
a A,b B
Hay una representacin grfica muy utilizada para describir los re-
sultados de un cluster jerrquico aglomerativo como el que acabamos
de describir. Esta representacin tiene el nombre de dendograma. En
el dendograma se va mostrando a qu valor de la medida de disimi-
laridad se produce la unin de los grupos y simultneamente qu
grupos se estn uniendo para esa disimilaridad. Tambin nos permite
una valoracin rpida de cuntos grupos puede haber en el banco de
datos. Simplemente trazando una linea horizontal a la altura en que
tengamos el nmero de grupos que pensamos que puede haber.
100
ruspini.ag = agnes(ruspini,metric = "euclidean",method="average")
80
Representamos el dendograma en la figura 14.4.
60
Height
40
plot(ruspini.ag,which=2)
20
0
43 44
45
61
38 41
9 7
60 58
35
1320
1
4746
6663
64
3531
65
2
14
8
1911
72
75
73
74
40
53
57
Supongamos que decidimos quedarnos con cuatro grupos. Las clasifica-
21
22
48
15
17
42
10
12
62
52
64
68
70
71
37
16
25
26
50
54
32
36
39
67
69
29
30
59
23
24
33
34
49
51
27
28
55
56
18
ciones de los datos son las siguientes donde la etiqueta que se asigna a cada
grupo es arbitraria. ruspini
Agglomerative Coefficient = 0.95
150
Y ahora podemos representar los datos de modo que ponemos en un mis-
mo color los datos que hemos clasificado en un grupo. Lo mostramos en la
100
figura 14.5.
50
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1
1.0
21
## [24] 1 1 1 1 3 4 3 3 3 3 3 5 3 3 3
35
0.8
0.6
Height
29
34
0.2
30
25
26
4
38
22
2
14
plot(cz.data,col=cutree(cz.ag,5),pch=cutree(cz.ag,5))
17
18
24
37
13
15
0.0
33
28
31
32
36
16
7
9
11
23
20
8
27
1
10
19
3
6
5
12
Zyxin
276 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
data(golub,package="multtest")
golub.cor1 = as.dist(1-cor(t(golub)))
golub.ag = agnes(golub.cor1,diss=TRUE,method="single")
plot(golub.ag,which=2)
cyclin.cofe = cophenetic(cyclin.ag)
cor(cyclin.manhattan,cyclin.cofe)
## [1] 0.8501727
k
dE (x j , xCi )2 , (14.3)
i =1 jCi
278 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
ruspini.km = kmeans(ruspini,4)
ruspini.km$cluster
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
## 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4
## 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
## 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2
## 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
## 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1
## 65 66 67 68 69 70 71 72 73 74 75
## 1 1 1 1 1 1 1 1 1 1 1
cz.km = kmeans(cz.data,2)
cz.km$cluster
## [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [24] 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1
1
Zyxin
plot(cz.data,col=cz.km$cluster,pch=cz.km$cluster)
0
Supongamos que probamos con tres grupos.
1
cz.km = kmeans(cz.data,3) 0.5 0.0 0.5 1.0 1.5 2.0 2.5
CCND3 Cyclin D3
plot(cz.data,col=cz.km$cluster,pch=cz.km$cluster)
Figura 14.8: Clasificacin obtenida
utilizando el mtodo de las k-medias
Y finalmente con cuatro.
aplicada a los datos cz.data.
cz.km = kmeans(cz.data,4)
plot(cz.data,col=cz.km$cluster,pch=cz.km$cluster)
2
14.7.2 Particionamiento alrededor de los mediodes
1
Zyxin
guraciones de puntos distintas? Cmo promediamos dos formas
distintas descritas numricamente? Cuando el concepto de promedio 0.5 0.0 0.5 1.0 1.5 2.0 2.5
Ci = {l : d( xl , xi ) = mn d( xl , x j )}.
Zyxin
j 6 =i
0
k
d ( x j , x mi ). (14.5) 0.5 0.0 0.5
CCND3 Cyclin D3
1.0 1.5 2.0 2.5
i =1 jCi
Figura 14.10: Clasificacin obtenida
utilizando el mtodo de las k-medias
aplicada a los datos cz.data con cuatro
grupos.
280 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
ruspini.pam = pam(ruspini,4)
cz.pam = pam(cz.data,2)
2
Y representamos los resultados de la clasificacin en la figura 14.11
1
plot(cz.data,col=cz.pam$cluster,pch=cz.pam$cluster)
Zyxin
los resultados.
14.8 Silueta
2
po C consideramos
Zyxin
d ( x i , x j ),
d(i, C ) =
|C |
1
jC
la disimilaridad media i con los elementos del grupo C. Para cada 0.5 0.0 0.5 1.0 1.5 2.0 2.5
CCND3 Cyclin D3
observacin i, sea A el cluster al cual lo ha asignado el procedimiento
cluster que empleamos y calculamos a(i ) la disimilaridad media Figura 14.12: Clasificacin de los datos
cz.data con mtodo PAM y tres grupos.
de i con todos los dems individuos del grupo A, a(i ) = d(i, A).
Obviamente estamos asumiendo que A contiene al menos otro objeto.
Consideremos d(i, C ) para todos los grupos C 6= A y seleccionemos el
que tiene el mnimo valor:
b(i ) = mn d(i, C ).
C 6= A
anlisis cluster 281
a (i )
s (i ) = 1 si a(i ) < b(i ), (14.6)
b (i )
= 0 si a(i ) = b(i ), (14.7)
b (i )
= 1 si a(i ) > b(i ). (14.8)
a (i )
b (i ) a (i )
s (i ) = .
max{ a(i ), b(i )}
ruspini.pam = pam(ruspini,4)
summary(silhouette(ruspini.pam))
1 : 20 | 0.73
Tambin podemos representarla grficamente en la figura 14.13.
2 : 23 | 0.75
plot(silhouette(ruspini.pam))
3 : 17 | 0.67
4 : 15 | 0.80
14.9 Anlisis cluster y datos de expresin de gen 0.0 0.2 0.4 0.6 0.8 1.0
Silhouette width si
7 Average silhouette width : 0.74
14.10 Ejemplos
library("ALL")
data("ALL")
class(ALL)
## [1] "ExpressionSet"
## attr(,"package")
## [1] "Biobase"
bcell = grep("^B",as.character(ALL$BT))
types = c("NEG","BCR/ABL")
moltyp = which(as.character(ALL$mol.biol) %in% types)
all = ALL[,intersect(bcell,moltyp)]
tipos = ALL$mol.biol[intersect(bcell,moltyp)]
tipos = factor(tipos) ## Eliminamos categoras vacas
class(all)
## [1] "ExpressionSet"
## attr(,"package")
## [1] "Biobase"
14.10.1).
## 502 272
2
0.58110
Max.
## -0.09901
Min.
502
library(cluster)
de las expresiones. 8
0.24290
1st Qu.
all1 = alltemp1$eset
plot(all1.ag,which=2)
## 0.4035008 0.2844927
272
table(all1.km$cluster)
molecular como en el otro.
plot(muestras.ag,which=2)
0.41450
Median
all1.km = kmeans(exprs(all1),2)
all1.ag = agnes(all1.d,diss=TRUE)
muestras.ag = agnes(t(exprs(all1)))
Y mostramos la silueta en figura 14.14.
0.36170
Mean
plot(silhouette(all1.km$cluster,all1.d))
summary(silhouette(all1.km$cluster,all1.d))
0.49140
3rd Qu.
all1.d = dist(exprs(all1),method = "manhattan")
8
Height
alltemp1 = nsFilter(alltemp0$eset,var.func = IQR, var.cutoff = 0.7)
41654_at
1287_at
37034_at
35312_at
39777_at
37348_s_at
36188_at
38826_at
38368_at
36654_s_at
38893_at
241_g_at
35323_at
35809_g_at
33447_at
39174_at
459_s_at
36181_at
181_g_at
37023_at
36963_at
37311_at
41485_at
36949_at
41320_s_at
32716_at
37159_at
38342_at
39045_at
35260_at
932_i_at
39327_at
37579_at
38521_at
34224_at
31528_f_at
32819_at
38671_at
37384_at
35769_at
37754_at
160029_at
38924_s_at
39897_at
32171_at
33456_at
36684_at
35271_at
39744_at
40861_at
36614_at
32563_at
140_s_at
37416_at
32804_at
0.0
36975_at
37318_at
39376_at
1512_at
840_at
32508_at
288_s_at
36198_at
32085_at
33543_s_at
34804_at
35325_at
37336_at
38357_at
41241_at
38114_at
38992_at
38075_at
37672_at
34745_at
33788_at
35163_at
40140_at
n = 774
35253_at
40437_at
39037_at
40122_at
39040_at
33770_at
31802_at
37100_at
34740_at
33821_at
40128_at
276_at
40063_at
32832_at
39163_at
36928_at
35787_at
39243_s_at
39131_at
34397_at
41651_at
39147_g_at
38704_at
40610_at
33683_at
41283_at
32597_at
37729_at
35848_at
32808_at
36938_at
35341_at
2039_s_at
31898_at
2042_s_at
227_g_at
39428_at
40268_at
946_at
36958_at
33943_at
39003_at
38661_at
39436_at
40076_at
Figura 14.14:
41155_at
34819_at
37569_at
36608_at
35983_at
32236_at
36620_at
35760_at
1695_at
1309_at
40891_f_at
38094_at
32756_at
39685_at
40774_at
36102_at
38251_at
34811_at
36170_at
38085_at
947_at
723_s_at
40096_at
38451_at
503_at
1310_at
39184_at
36992_at
32579_at
33931_at
38060_at
38610_s_at
31432_g_at
36589_at
34651_at
38287_at
384_at
38621_at
1506_at
35017_f_at
32070_at
37329_at
922_at
1268_at
36162_at
36482_s_at
1984_s_at
32794_g_at
37121_at
35816_at
1081_at
36537_at
37984_s_at
32842_at
33866_at
33305_at
38119_at
39070_at
38767_at
34033_s_at
32542_at
38994_at
41734_at
35350_at
40570_at
40936_at
35939_s_at
38359_at
38789_at
41356_at
40729_s_at
33705_at
35733_at
36174_at
32843_s_at
40369_f_at
35807_at
41724_at
32157_at
32336_at
2025_s_at
351_f_at
39767_at
411_i_at
0.2
35261_at
38976_at
33131_at
36937_s_at
935_at
41295_at
38733_at
36139_at
36899_at
2035_s_at
34400_at
32715_at
41221_at
32736_at
1795_g_at
32140_at
33813_at
37967_at
36678_at
37281_at
1373_at
38017_at
37988_at
34210_at
41609_at
36773_f_at
36785_at
37147_at
41213_at
1096_g_at
41202_s_at
41179_at
39507_at
40885_s_at
34278_at
40864_at
32833_at
32241_at
38050_at
36942_at
32183_at
36634_at
40841_at
38666_at
39044_s_at
36179_at
34782_at
40828_at
33102_at
40468_at
40203_at
2031_s_at
37294_at
39839_at
1636_g_at
39231_at
960_g_at
40698_at
40419_at
39072_at
277_at
36979_at
37645_at
32977_at
34183_at
40518_at
1105_s_at
33439_at
1005_at
2094_s_at
36669_at
37028_at
40490_at
32786_at
31870_at
1519_at
33304_at
40396_at
35974_at
39420_at
40790_at
37536_at
38374_at
36021_at
34891_at
1065_at
41266_at
538_at
33232_at
37027_at
39182_at
33273_f_at
36023_at
32824_at
34892_at
34349_at
41635_at
32807_at
38393_at
39150_at
32628_at
37748_at
37670_at
32835_at
1463_at
32172_at
39691_at
41205_at
41823_at
35847_at
35145_at
35722_at
36578_at
34386_at
35289_at
41343_at
33443_at
33340_at
35268_at
35790_at
35719_at
41699_f_at
35739_at
32125_at
38980_at
34889_at
33337_at
34785_at
41335_at
35153_at
37683_at
40832_s_at
33830_at
35697_at
160_at
38805_at
41447_at
37676_at
1426_at
33799_at
39628_at
38098_at
37305_at
38031_at
40456_at
36913_at
34355_at
32569_at
1468_at
37757_at
32173_at
35843_at
0.4
40129_at
37955_at
40417_at
1449_at
41460_at
41302_at
36185_at
40521_at
39079_at
41569_at
40587_s_at
1516_g_at
39109_at
40195_at
37910_at
36687_at
39009_at
37692_at
36633_at
38764_at
41379_at
36093_at
37229_at
36814_at
37031_at
39762_at
36032_at
37242_at
32224_at
37338_at
40615_at
37615_at
36628_at
32849_at
40074_at
1801_at
38313_at
32623_at
37001_at
37343_at
41715_at
39779_at
32112_s_at
40522_at
39043_at
34176_at
41396_at
37981_at
577_at
32844_at
40955_at
36125_s_at
39112_at
1100_at
37507_i_at
735_s_at
752_s_at
all1.d
1185_at
37003_at
430_at
32941_at
429_f_at
40514_at
175_s_at
36962_at
1318_at
35266_at
35763_at
34716_at
32506_at
854_at
40742_at
41438_at
40777_at
402_s_at
32533_s_at
38391_at
35869_at
40296_at
34814_at
38443_at
38011_at
36172_s_at
32695_at
40824_at
38990_at
33867_s_at
38864_at
36641_at
40160_at
40506_s_at
35321_at
31936_s_at
33380_at
36635_at
35802_at
40811_at
38688_at
35682_at
33885_at
36511_at
34306_at
37509_at
37035_at
40108_at
36585_at
35656_at
35937_at
35316_at
traspuesta de la matriz A.
41638_at
34654_at
37598_at
31851_at
35750_at
781_at
32160_at
36033_at
41372_at
35845_at
40048_at
34326_at
35306_at
33861_at
39746_at
34735_at
41253_s_at
32621_at
1039_s_at
1940_at
41634_at
38659_at
507_s_at
760_at
149_at
41454_at
1797_at
0.6
1622_at
40476_s_at
37585_at
31845_at
1814_at
40030_at
33924_at
41409_at
Silhouette width si
41542_at
34333_at
32156_at
1433_g_at
39814_s_at
36601_at
37497_at
38392_at
37532_at
37359_at
32643_at
32668_at
40928_at
40961_at
35633_at
34337_s_at
1456_s_at
41503_at
2003_s_at
34268_at
40979_at
37947_at
33255_at
41400_at
34338_at
40546_s_at
41322_s_at
283_at
1470_at
37766_s_at
37668_at
41223_at
35723_at
34311_at
35297_at
34773_at
39337_at
35818_at
36676_at
39092_at
1446_at
824_at
34368_at
37640_at
40827_at
32662_at
40198_at
1643_g_at
39348_at
38745_at
35731_at
1085_s_at
32245_at
35741_at
37543_at
41406_at
1564_at
41829_at
39089_at
39180_at
39835_at
1830_s_at
36959_at
1630_s_at
41200_at
1498_at
37040_at
32825_at
41139_at
32207_at
40117_at
1884_s_at
38116_at
41812_s_at
35340_at
38149_at
39929_at
37467_at
40143_at
32562_at
37716_at
32593_at
317_at
33977_at
38032_at
32319_at
1102_s_at
599_at
40088_at
39175_at
1520_s_at
32775_r_at
32860_g_at
40505_at
1107_s_at
40007_at
40782_at
32749_s_at
1402_at
bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
1693_s_at
36155_at
38717_at
38454_g_at
32184_at
40019_at
41690_at
40631_at
37524_at
1292_at
39411_at
1633_g_at
33690_at
39695_at
33891_at
39809_at
34786_at
39822_s_at
36207_at
38037_at
41779_at
37018_at
36347_f_at
34308_at
33352_at
1505_at
0.8
33774_at
315_at
38035_at
37312_at
41048_at
37324_at
37025_at
34378_at
39827_at
32186_at
32227_at
37583_at
1403_s_at
245_at
40916_at
1911_s_at
39032_at
34362_at
37544_at
41097_at
35164_at
39331_at
32773_at
32035_at
37641_at
36412_s_at
36493_at
34168_at
38242_at
40607_at
36650_at
41193_at
36398_at
34460_at
307_at
266_s_at
39389_at
38354_at
37701_at
1369_s_at
36103_at
33284_at
41096_at
38363_at
37285_at
33336_at
33516_at
37280_at
36711_at
280_g_at
39120_at
38604_at
36638_at
37006_at
38514_at
41214_at
38355_at
32223_at
36224_g_at
1424_s_at
32272_at
37026_at
37420_i_at
35175_f_at
40771_at
32318_s_at
32321_at
151_s_at
36624_at
31481_s_at
35363_at
37720_at
36576_at
36131_at
37033_s_at
37344_at
39864_at
38778_at
34392_s_at
39370_at
38438_at
38065_at
36795_at
32806_at
35625_at
1173_g_at
40448_at
36097_at
595_at
1.0
2 : 272 | 0.28
1 : 502 | 0.40
tipos.ag = cutree(muestras.ag,2)
table(tipos,tipos.ag)
## tipos.ag
## tipos 1 2
## BCR/ABL 33 4
## NEG 27 15
heatmap(exprs(all1),hclustfun=agnes) 41205_at
39691_at
41823_at
32172_at
35847_at
35145_at
34386_at
36578_at
35722_at
35289_at
41343_at
41638_at
33340_at
33443_at
35739_at
41699_f_at
35719_at
41635_at
34349_at
37670_at
38393_at
32807_at
39150_at
37748_at
32628_at
36023_at
32824_at
34892_at
35790_at
35268_at
35153_at
37683_at
41335_at
34889_at
33337_at
38980_at
40832_s_at
33830_at
1463_at
35697_at
160_at
34326_at
35845_at
35306_at
40048_at
33861_at
781_at
35750_at
34735_at
31851_at
41253_s_at
41372_at
32160_at
507_s_at
36033_at
1039_s_at
32621_at
1940_at
41634_at
32835_at
34786_at
39809_at
33799_at
39628_at
38805_at
38098_at
36641_at
40160_at
40506_s_at
149_at
41454_at
1797_at
1622_at
31845_at
40476_s_at
37585_at
1814_at
37035_at
40108_at
36585_at
37509_at
35793_at
35316_at
38659_at
39746_at
35656_at
35937_at
1456_s_at
34337_s_at
32125_at
36511_at
38441_s_at
34306_at
41381_at
38908_s_at
33885_at
41000_at
33267_at
40961_at
35633_at
32643_at
755_at
36062_at
1825_at
1252_at
35747_at
33228_g_at
34654_at
37598_at
40030_at
34866_at
40777_at
760_at
41438_at
1633_g_at
37497_at
33690_at
41569_at
40587_s_at
1516_g_at
dos grupos para las muestras. Vamos a clasificar con cada uno de
36537_at
38789_at
38359_at
41356_at
41734_at
35350_at
38767_at
34033_s_at
38994_at
32542_at
40570_at
40936_at
35939_s_at
40729_s_at
39070_at
33705_at
36942_at
38050_at
32241_at
32183_at
1512_at
840_at
36634_at
38666_at
40841_at
40203_at
32833_at
40128_at
39231_at
39044_s_at
36179_at
40828_at
34782_at
41179_at
41202_s_at
40885_s_at
39507_at
40864_at
34278_at
40468_at
35809_g_at
33102_at
37294_at
39839_at
1636_g_at
32977_at
277_at
960_g_at
276_at
40490_at
37028_at
2031_s_at
36979_at
32786_at
1005_at
2094_s_at
36669_at
37645_at
34210_at
1105_s_at
40518_at
41221_at
32715_at
34400_at
2035_s_at
32736_at
35733_at
38733_at
41295_at
935_at
1795_g_at
38017_at
37967_at
33813_at
36678_at
36139_at
36899_at
32140_at
32843_s_at
40369_f_at
35807_at
36174_at
37281_at
37344_at
41609_at
36773_f_at
36937_s_at
41213_at
1096_g_at
37988_at
1373_at
36785_at
37147_at
31870_at
40396_at
33304_at
1519_at
35974_at
34891_at
40790_at
39420_at
37536_at
38374_at
33439_at
40365_at
33131_at
1065_at
538_at
41266_at
36398_at
37027_at
33232_at
33336_at
37285_at
33516_at
36711_at
280_g_at
38968_at
los mtodos e intentar ver si hay relacin con la variabel tipos que
40202_at
39120_at
33273_f_at
37280_at
38604_at
37006_at
36638_at
38514_at
36131_at
37033_s_at
31481_s_at
36624_at
37720_at
36576_at
35363_at
38065_at
34392_s_at
38778_at
39864_at
38438_at
39370_at
595_at
36795_at
32806_at
35625_at
36224_g_at
32223_at
1424_s_at
32272_at
37026_at
37420_i_at
40771_at
35175_f_at
32318_s_at
32321_at
151_s_at
36097_at
40448_at
1173_g_at
40103_at
649_s_at
36629_at
31511_at
319_g_at
39755_at
41745_at
34091_s_at
32588_s_at
31508_at
1461_at
41138_at
41164_at
675_at
36591_at
1389_at
36021_at
37043_at
39318_at
41214_at
38355_at
32052_at
28001
28042
28023
43012
28031
16009
64002
01010
68001
25006
48001
04010
33005
09008
28035
28037
28019
30001
28021
57001
49006
65005
03002
04016
36002
84004
08001
04007
28024
28007
28047
28005
27004
28044
43004
62001
27003
28006
28036
28043
24022
09017
31011
26003
62002
24017
20002
22010
24018
22009
08024
26001
06002
04008
15001
24008
08012
22011
24001
11005
24011
64001
08011
12007
25003
12019
01005
43007
12026
12012
22013
14016
37013
68003
62003
15005
43001
12006
24010
contiene la biologa molecular.
##
## tipos 1 2
## BCR/ABL 26 11
## NEG 24 18
all1.km = kmeans(t(exprs(all1)),2)
table(tipos,all1.km$cluster)
##
## tipos 1 2
## BCR/ABL 27 10
## NEG 21 21
data(gse20986,package="tamidata")
gse = gse20986
library(genefilter)
gse0 = nsFilter(gse,var.func = mean, var.cutoff = 0.7)
gse1 = nsFilter(gse0$eset,var.func = IQR, var.cutoff = 0.7)
gse = gse1$eset
dim(exprs(gse))
## [1] 1846 12
d0 = dist(t(exprs(gse)),method = "manhattan")
Y aplicamos PAM.
library(cluster)
gse.pam = pam(d0,diss = TRUE,k=4)
La clasificacin original es
tipo0 = rep(1:4,rep(3,4))
table(tipo0,gse.pam$clustering)
##
## tipo0 1 2 3 4
## 1 1 1 1 0
## 2 2 1 0 0
## 3 3 0 0 0
## 4 0 0 0 3
14.12 Ejercicios
2. Quedarse con los genes (filas) que verifiquen las siguientes condiciones:
15.1 Introduccin
library(GSEABase)
data(gse20986,package="tamidata")
eset = gse20986
345:405
## [1] 345 346 347 348 349 350 351 352 353 354 355
## [12] 356 357 358 359 360 361 362 363 364 365 366
## [23] 367 368 369 370 371 372 373 374 375 376 377
## [34] 378 379 380 381 382 383 384 385 386 387 388
## [45] 389 390 391 392 393 394 395 396 397 398 399
## [56] 400 401 402 403 404 405
grupos de genes 293
head(geneIds(egs))
details(egs)
## setName: Burjasot
## geneIds: 1552739_s_at, 1552740_at, ..., 1552822_at (total: 61)
## geneIdType: Annotation (hgu133plus2)
## collectionType: ExpressionSet
## setIdentifier: orugacanora:17046:Fri Mar 24 12:34:31 2017:16749
## description:
## organism: Homo sapiens
## pubMedIds:
## urls:
## contributor:
## setVersion: 0.0.1
## creationDate:
gsc
## GeneSetCollection
## names: GO:0000002, GO:0000003, ..., GO:2001070 (16426 total)
## unique identifiers: 1555591_at, 201917_s_at, ..., 1552675_at (36685 total)
## types in collection:
## geneIdType: AnnotationIdentifier (1 total)
## collectionType: GOCollection (1 total)
gsc[["GO:0000122"]]
## setName: GO:0000122
## geneIds: 1487_at, 1552338_at, ..., AFFX-HUMISGF3A/M97935_MB_at (total: 1785)
## geneIdType: Annotation (hgu133plus2)
## collectionType: GO
## ids: GO:0000122 (1 total)
## evidenceCode: EXP IDA IPI IMP IGI IEP ISS ISO ISA ISM IGC IBA IBD IKR IRD RCA TAS NAS IC ND IEA
## ontology: CC MF BP
## details: use 'details(object)'
head(geneIds(gsc),n=1)
grupos de genes 295
## $`GO:0000002`
## [1] "80119" "55186" "291" "4358" "1890"
## [6] "4205" "9361" "4976" "10000" "63875"
## [11] "84275" "92667"
head(sapply(geneIds(gsc), length))
geneIds(gsc.filt)
library(org.Sc.sgd.db)
frame = toTable(org.Sc.sgdGO)
goframeData = data.frame(frame$go_id, frame$Evidence, frame$systematic_name)
goFrame = GOFrame(goframeData, organism = "Saccharomyces cerevisiae")
goAllFrame = GOAllFrame(goFrame)
gscSc = GeneSetCollection(goAllFrame, setType = GOCollection())
Y lo guardamos.
Habitualmente cuando queramos utilizar estos grupos tendremos
que hacer dos cosas:
data(gse6647,package="tamidata")
data(gse1397,package="tamidata")
library(annotate)
annotation(gse1397)
## [1] "hgu133a"
library(hgu133a.db)
library(GSEABase)
gse1397.gsc = GeneSetCollection(gse1397,setType=GOCollection())
names(gse1397.gsc) = unlist(lapply(gse1397.gsc,setName))
data(gse1397.gsc,package="tamidata")
gsc = gse1397.gsc
length(gsc)
## [1] 12681
(g1 = gsc[[1]])
## setName: GO:0000002
## geneIds: 202825_at, 203466_at, ..., 219393_s_at (total: 11)
## geneIdType: Annotation (hgu133a)
## collectionType: GO
## ids: GO:0000002 (1 total)
## evidenceCode: EXP IDA IPI IMP IGI IEP ISS ISO ISA ISM IGC IBA IBD IKR IRD RCA TAS NAS IC ND IEA
## ontology: CC MF BP
## details: use 'details(object)'
geneIds(g1)
unlist(mget(geneIds(g1),hgu133aENTREZID))
unlist(mget(geneIds(g1),hgu133aENSEMBL))
## 202825_at 203466_at
## "ENSG00000151729" "ENSG00000115204"
## 204858_s_at 208328_s_at
## "ENSG00000025708" "ENSG00000068305"
## 209017_s_at 212607_at1
## "ENSG00000196365" "ENSG00000117020"
## 212607_at2 212609_s_at1
298 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## "ENSG00000275199" "ENSG00000117020"
## 212609_s_at2 214684_at
## "ENSG00000275199" "ENSG00000068305"
## 214821_at 217497_at
## "ENSG00000151729" "ENSG00000025708"
## 219393_s_at1 219393_s_at2
## "ENSG00000117020" "ENSG00000275199"
head(table(sapply(geneIds(gsc),length)))
##
## 1 2 3 4 5 6
## 2336 1661 1296 1039 740 608
Podemos ver que de tamao uno tenemos 2336 grupos. Nos que-
damos con aquellos grupos que, al menos, tienen 50 genes.
library(org.Sc.sgd.db)
frame = toTable(org.Sc.sgdGO)
goframeData = data.frame(frame$go_id, frame$Evidence, frame$systematic_name)
goFrame = GOFrame(goframeData, organism = "Saccharomyces cerevisiae")
goAllFrame = GOAllFrame(goFrame)
gscSc = GeneSetCollection(goAllFrame, setType = GOCollection())
save(gscSc,file="gscSc.rda")
data(gscSc,package="tamidata")
gsc1[[1]]
## setName: GO:0000001
## geneIds: YNL304W, YAL048C, ..., YNR035C (total: 29)
## geneIdType:
## collectionType: GO
## ids: GO:0000001 (1 total)
## evidenceCode: EXP IDA IPI IMP IGI IEP ISS ISO ISA ISM IGC IBA IBD IKR IRD RCA TAS NAS IC ND IEA
## ontology: CC MF BP
## details: use 'details(object)'
save(gscHs,file = paste(dirTamiData,"gscHs.rda",sep=""))
pacman::p_load(EnrichmentBrowser)
hsaKEGGgsc=get.kegg.genesets("hsa")
Qu tenemos?
300 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
class(hsaKEGGgsc)
## [1] "list"
head(names(hsaKEGGgsc))
## [1] "hsa00010_Glycolysis_/_Gluconeogenesis"
## [2] "hsa00020_Citrate_cycle_(TCA_cycle)"
## [3] "hsa00030_Pentose_phosphate_pathway"
## [4] "hsa00040_Pentose_and_glucuronate_interconversions"
## [5] "hsa00051_Fructose_and_mannose_metabolism"
## [6] "hsa00052_Galactose_metabolism"
hsaKEGGgsc[[3]]
o bien con
hsaKEGGgsc$"hsa00030_Pentose_phosphate_pathway"
sceKEGGgsc=get.kegg.genesets("sce")
a = sapply(dmeGOBPgsc,length)
summary(a)
## PC1 PC2
## Min. :-7.9557 Min. :-8.84381
## 1st Qu.:-3.7558 1st Qu.:-0.81496
## Median :-0.7212 Median :-0.04874
## Mean : 0.0000 Mean : 0.00000
## 3rd Qu.: 3.0001 3rd Qu.: 0.85050
## Max. :19.8234 Max. : 6.79110
## PC3 PC4
## Min. :-7.13739 Min. :-4.90172
## 1st Qu.:-0.54822 1st Qu.:-0.64990
## Median : 0.07139 Median : 0.03982
## Mean : 0.00000 Mean : 0.00000
## 3rd Qu.: 0.62206 3rd Qu.: 0.72823
## Max. : 8.14491 Max. : 4.95073
## PC5
## Min. :-5.003344
## 1st Qu.:-0.468157
## Median :-0.008315
## Mean : 0.000000
## 3rd Qu.: 0.486965
## Max. : 5.087878
pacman::p_load(EGSEAdata)
15.9 Ejercicios
Ej. 13 Construir los grupos basados en Gene Ontology y en
KEGG para el ratn (Mus musculus).
conteos = matrix(c(30,120,40,156),ncol=2)
fisher.test(conteos,alternative = "greater")
##
## Fisher's Exact Test for Count Data
##
## data: conteos
## p-value = 0.589
## alternative hypothesis: true odds ratio is greater than 1
## 95 percent confidence interval:
## 0.6018802 Inf
## sample estimates:
## odds ratio
## 0.9750673
fisher.test(conteos,alternative = "less")
##
## Fisher's Exact Test for Count Data
##
## data: conteos
## p-value = 0.5179
## alternative hypothesis: true odds ratio is less than 1
## 95 percent confidence interval:
## 0.000000 1.571751
## sample estimates:
## odds ratio
## 0.9750673
306 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
0.6
1.8
0.5
0.4
1.6
Odds ratio
pvalores
0.3
1.4
0.2
1.2
0.1
1.0
0.0
k k
16.3.1 GSE1397
Leemos los datos normalizados.
library(Biobase)
data(gse1397,package = "tamidata")
eset = gse1397
y = pData(eset)[,"type"]
remove(gse1397) ## Ahorramos memoria
library(genefilter);library(multtest)
tt = rowttests(eset,y)
p0 = tt$p.value
p1 = mt.rawp2adjp(p0, "BH")
orden.original = order(p1$index)
p.BH = p1$adjp[orden.original,2]
significativos = which(p.BH < 0.05)
Qu anotacin tienen?5 5
Es una base de datos asociada a un
chip.
annotation(eset)
## [1] "hgu133a"
308 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
library(hgu133a.db)
## [1] 6
## [1] 0
seleccionados = unlist(mget(featureNames(eset[significativos,]),
hgu133aENTREZID))
library(GO.db)
library(Category)
library(GOstats)
universeGeneIds = G2.entrezid,
annotation = annotation(eset), ontology = "BP",
pvalueCutoff = 0.001,conditional = FALSE,
testDirection = "over")
overRepresented = hyperGTest(params)
test de fisher unilateral 309
head(summary(overRepresented))
library(Rgraphviz)
plot(goDag(overRepresented))
library(Rgraphviz)
png(file=paste(dirTamiFigures,"GSE1397overRepresented.png",sep=""))
plot(goDag(overRepresented))
dev.off()
310 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
16.3.2 GSE20986
Leemos los datos normalizados y lo renombramos.
Biobase::annotation(gse)
## [1] "hgu133plus2"
library("hgu133plus2.db")
library(genefilter)
gse.filt = nsFilter(gse, var.func = IQR, var.cutoff = 0.6,
require.GOBP = TRUE)$eset
dim(gse.filt)
## Features Samples
## 6014 12
## [1] 0
## [1] 6
312 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## [1] 0
library(multtest)
gse.aov = rowFtests(gse.filt2, pData(gse20986)[,"tissue"])
p.originales = gse.aov[, 2]
p.BH = mt.rawp2adjp(p.originales, "BH")
pvalores = p.BH$adjp[p.BH$index, 2]
sig.1234 = which(pvalores < 0.001)
selected = unlist(mget(featureNames(gse.filt2[sig.1234,]), hgu133plus2ENTREZID))
library(GO.db);library(Category);library(GOstats)
fl = tempfile()
htmlReport(overRepresented, file = fl)
browseURL(fl)
test de fisher unilateral 313
16.3.3 ALL
Esta seccin se reproduce el anlisis propuesto en http://www.
bioconductor.org/help/course-materials/2009/SSCMay09/gsea/
HyperG_Lecture.pdf. Utilizamos los datos Li [2009, ALL]. En 5.4
se indica cmo conseguir los datos bcrneg en donde hemos seleccio-
nado algunas muestras. Los datos los tenemos en bcrneg. Veamos
nmero de genes y muestras.
dim(bcrneg)
## Features Samples
## 12625 79
dim(bcrneg.filt)
## Features Samples
## 4044 79
names(rttPrb) = featureNames(bcrneg.filt)
ids = featureNames(bcrneg.filt)
map = hgu95av2ENTREZID
library(GO.db)
GOTERM[["GO:0006468"]]
## GOID: GO:0006468
## Term: protein phosphorylation
## Ontology: BP
## Definition: The process of introducing a
## phosphate group on to a protein.
## Synonym: protein amino acid phosphorylation
library(Category)
library(GOstats)
Veamos el resumen.
head(summary(overRepresented), n = 3)
fl = tempfile()
htmlReport(overRepresented, file = fl)
browseURL(fl)
16.4 EnrichmentBrowser
pacman::p_load(EnrichmentBrowser)
data(gse1397,package="tamidata")
gse1397 =probe.2.gene.eset(gse1397)
gse1397 = de.ana(gse1397) ## t-test moderados (limma)
hsaKEGGgsc = get.kegg.genesets("hsa")
gs.ranking(gse1397KEGGora)
## 1 106 2 0.00106
## 2 115 2 0.00125
## 3 151 2 0.00215
## 4 162 2 0.00248
## 5 61 1 0.03250
## 6 69 1 0.03670
## 7 74 1 0.03940
save(hsaGOBPgsc,file=paste(dirTamiData,"hsaGOBPgsc.rda",sep=""))
gs.ranking(gse1397GOBPora)
## 6 34 1 1.20e-02
## 7 36 1 1.27e-02
## 8 40 1 1.41e-02
## 9 46 1 1.62e-02
## 10 74 1 2.60e-02
## 11 103 1 3.61e-02
16.5 goseq
library(goseq)
data(PRJNA297664,package="tamidata")
library(GenomicRanges)
View(supportedGenomes())
View(supportedGeneIDs())
library(edgeR)
dge = DGEList(counts=assay(PRJNA297664),group=colData(PRJNA297664)[,"treatment"])
dge.c = estimateCommonDisp(dge) ##Estimamos dispersin comn
dge.t = estimateTagwiseDisp(dge.c) ##Dispersiones por gen
et.t = exactTest(dge.t)
genes=as.integer(p.adjust(et.t$table$PValue[et.t$table$logFC!=0],
method="BH")<.01)
names(genes)=row.names(et.t$table[et.t$table$logFC!=0,])
table(genes)
## genes
## 0 1
## 6114 590
pwf=nullp(genes,"sacCer3","sgdGene")
0.15
Proportion DE
0.10
0.05
length_sc3 = getlength(rownames(PRJNA297664),"sacCer3","sgdGene")
library(ggplot2)
df1 = data.frame(length_sc3)
ggplot(df1,aes(x=length_sc3))+geom_density()
6e04
4e04
density
2e04
0e+00
16.6 Ejercicios
Ejercicio 16
Utilizamos los datos tamidata::gse20986. En el problema 10 he-
mos determinado los genes significativos con un FDR de 0.05 para
las comparaciones entre las muestras obtenidas en el iris, retina y
coroides con las muestras huvec. Tenemos pues tres grupos de genes
significativos que podemos denotar Siris , Sretina y Scoroides .
17.1 Introduction
1 1
Lo tratado en este captulo tiene
mucho que ver con la obra teatral
de Lope de Vega, Fuenteovejuna. Se
El problema abordado en este captulo corresponde a lo que recomienda el video http://www.
youtube.com/watch?v=-IcuFn57nAo. -
se conoce como anlisis de conjunto de genes.2 Estudiamos si hay Quin mat al Comendador?
relacin entre conjuntos de genes previamente definidos y fenoti- - Fuenteovejuna, seor.
-Quin es Fuenteovejuna?
po.3 Estos grupos vendrn definidos segn distintos criterios. Por - Todo el pueblo, a una. Esta frase
ejemplo, corresponder a una ruta metablica, o localizados en un aparece repetida en la obra y es bsica
mismo cromosoma o bien definidos utilizando trminos de Gene On- en este tema. Este tema va de esto,
de la accin conjunta de un conjunto
tology. De un modo genrico, un conjunto de genes que represente de genes. Unos pocos habitantes no
algo interpretable desde un punto de vista biolgico. Ya no estamos pueden pero todos los habitantes de
Fuenteovejuna s que pueden.
interesados en un anlisis marginal o gen a gen de los datos de expre-
sin. En un anlisis de expresin diferencial el resultado final es una 2
En la literatura se refieren a este
problema como gene set analysis, gene set
lista ordenada de genes de modo que una mayor asociacin con la enrichment analysis, set based enrichment
covariable fenotpica produce una posicin ms alta en la lista. Un analysis.
procedimiento de tests mltiples nos produce una clasificacin en 3
Donde fenotipo se entiende en un
sentido amplio como en todo el texto.
genes significativos y no significativos. En definitiva un valor de corte
de la lista. En esta aproximacin no usamos ningn conocimiento previo
sobre relaciones conocidas entre genes que podran ser esenciales a la
hora de determinar la asociacin no ya gen-fenotipo sino conjunto de
genes-fenotipo.
X = [ Xij ]i=1,...,N;j=1,...,n
322 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
x = [ xij ]i=1,...,N;j=1,...,n
comp
Hiptesis nula competitiva H0 : Los genes en un grupo dado S estn
como mucho tan frecuentemente expresados de un modo diferen-
cial como los genes en G c .
17.4 Ejemplos
N = 1000; n = 50
set.seed(280562) ## Para obtener los mismos valores generados
et1 = matrix(rnorm(N*n),nrow = N,ncol = n)
et1[1:10,26:50] = et1[1:10,26:50] + 2.5
et1.tt = genefilter::rowttests(et1,y.et)$statistic
pacman::p_load("ggplot2")
0.3
df = data.frame(et1.tt)
ggplot(df,aes(x=et1.tt))+geom_density()
density
0.2
0.1
N = 1000; n = 50
set.seed(280562)
indices.temp = (0:49)*20 + 1
indices = NULL
for(i in indices.temp) indices = c(indices,i:(i+9))
et2 = matrix(rnorm(N*n),nrow = N,ncol = n)
et2[indices,26:50] = et1[1:10,26:50] + 2.5
et2.tt = genefilter::rowttests(et2,y.et)$statistic
0.06
pacman::p_load("ggplot2")
0.04
df = data.frame(et2.tt)
density
ggplot(df,aes(x=et2.tt))+geom_density()
0.02
50 40 30 20 10 0
et2.tt
El primer paso es cuantificar la asociacin entre los niveles de Figura 17.2: Densidad estimada de
expresin de cada gen y el fenotipo. Esta cuantificacin ser un es- et1.tt.
tadstico (una funcin de los datos que son las expresiones en la fila
de la matriz de expresin) cuya definicin depender del tipo de
informacin fenotpica disponible. Por ejemplo, si tenemos dos condi-
ciones entonces este estadstico ser (habitualmente pero no siempre)
el estadstico t que se utiliza en la comparacin de medias de dos po-
blaciones normales ( 7.7.1). Pero no necesariamente, por ejemplo, si
los tamaos muestras n1 y n2 son muy pequeos entonces muy pro-
bablemente un estadstico como la diferencia de medias es suficiente
(y menos peligroso).
Si las muestras las tenemos clasificadas en ms de dos grupos
entonces podemos utilizar el valor del estadstico F del anlisis de la
varianza ( 7.9).
En 9.1 se estudiaba el mtodo SAM (en el contexto de la expre-
sin diferencial marginal). Este mtodo propone, dependiendo de las
326 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
|{b : tb > t0 }|
pr = . (17.2)
B
En el caso en que una mayor asociacin se exprese como un valor
muy grande (positivo) o muy pequeo (negativo) de t entonces el p
valor vendra dado por
|{b : |tb | > |t0 |}|
pr = , (17.3)
B
ya que tendramos un test bilateral.
Ejemplo 20. Consideremos el ejemplo 18, en concreto, los valores del pri-
mer gen. La covariable y nos indica la pertenencia a control o tratamiento.
Como medida de asociacin consideramos el estadstico t (con varianzas
desiguales). Notemos que una asociacin grande supone un valor o muy
grande (positivo) o muy pequeo (negativo).
u = et1[1,]
t0 = t.test(u ~ y.et)$statistic
t0 = abs(t0)
B = 100
tb = rep(0,B)
for(i in 1:B) tb[i] = t.test(u ~ sample(y.et))$statistic
tb = abs(tb)
## [1] 0
17.8 Limma::genSetTest
library(limma)
geneSetTest(1:20,et1.tt,alternative ="up")
## [1] 0.9984722
geneSetTest(1:20,et1.tt,alternative ="down")
## [1] 0.00153168
pvalores = NULL
for(i in 0:49){
indices = (i * 20 + 1): (i * 20 + 10)
p.temp = geneSetTest(indices,et1.tt,alternative ="down")
pvalores = c(pvalores,p.temp)
}
data(gse1397,package="tamidata")
data(gse1397.gsc,package="tamidata")
gsc = gse1397.gsc
330 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
indices = is.element(featureNames(gse1397),geneIds(gsc[[1]]))
library(genefilter)
fac0 = pData(gse1397)[,"type"]
gse1397.tt = rowttests(gse1397,fac0)$statistic
geneSetTest(indices,gse1397.tt,alternative ="mixed")
## [1] 0.988849
(numgrupos = length(gsc))
pvalores = NULL
for(i in 1:numgrupos){
indices = is.element(featureNames(gse1397),geneIds(gsc[[i]]))
p.temp = geneSetTest(indices,gse1397.tt,alternative ="mixed")
pvalores = c(pvalores,p.temp)
} density.default(x = pvalores)
pdf("figures/gse1397gscpvalores.pdf")
1.0
plot(density(pvalores),xlim=c(0,1))
0.8
dev.off()
0.6
Density
p-valores observados.
0.2
gsc.ordenada = gsc[orden]
names(gsc.ordenada[1:10])
17.9 Limma::wilcoxGST
wilcoxGST(1:20,et1.tt,alternative ="down")
## [1] 0.00153168
wilcoxGST(1:20,et1.tt,alternative ="up")
## [1] 0.9984722
wilcoxGST(1:20,et1.tt,alternative ="mixed")
## [1] 2.837697e-08
wilcoxGST(21:30,et1.tt,alternative ="down")
## [1] 0.09546351
wilcoxGST(21:30,et1.tt,alternative ="up")
## [1] 0.904723
wilcoxGST(21:30,et1.tt,alternative ="mixed")
## [1] 0.8181643
332 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
17.10 Limma::CAMERA
El mtodo fue propuesto en Wu and Smyth [2012].14 Es un pro- El nombre es un acrnimo Correlation
14
normal.
17.11 GSA
19 Se utiliza la distribucin de permutacin a la que aplican una 19
En el paquete Efron and Tibshirani
reestandarizacin. La medida de enriquecimiento que proponen por [2010, GSA] se implementa el mtodo
propuesto en Efron and Tibshirani
defecto 20 es la siguiente: partimos de los valores ti que miden aso- [2007].
ciacin gen-fenotipo. Definimos t+ = max{t, 0} y t = mn{t, 0}. 20
Aunque lleva el promedio de los ti s y
ti+ el promedio de |ti | como otras opciones.
Consideramos un conjunto de genes S. Definimos t+
S = i S nS y
t
t
S = iS niS .
Finalmente la medida de enriquecimiento (que llamare-
mos el estadstico maxmean) es
t (S) = max{t+
S , tS }. (17.7)
anlisis de conjuntos de genes 333
Ejemplo 24. Efron and Tibshirani [2007, pgina 119] La medida de en-
riquecimento que acabamos de definir es robusta frente al caso en que
tengamos una medida extrema. El ejemplo que proponen los autores es
el siguiente: supongamos que tenemos 100 genes, 99 de los valores ti s
son -0.5 y el valor restante es 10. Tenemos que t+
S = 10/100 = 0,1 y
t
S = 99 ( 0,5 ) /100 = 0,495. Vemos que los valores negativos dominan
pues son la mayor parte de los datos. Si se tomara la media de las partes
positivas t+ y la media de las partes negativas t tendramos los valores
10 y -0.5 (es decir, solamente consideramos cuando el valor no es nulo) y la
medida de enriquecimiento vendra dominada por valores extremos.
library(GSA)
head(et1.gsa$GSA.scores)
summary(et1.gsa$GSA.scores[-1])
Los p-valores obtenidos para lo que ellos llaman genes negativos que
corresponden con genes que en la clase 2 tiene expresiones menores. Podemos
obtenerlos con
head(et1.gsa$pvalues.lo)
head(et1.gsa$pvalues.hi)
summary(et1.gsa$pvalues.hi[-1])
head(et1.gsa$gene.scores)
variabilidad del primer grupo y que se solape por la parte inferior con el
1
resto de los genes. El anlisis de grupo que hemos realizado lo diferencia sin
0
problemas.
1
Grupo 1 Resto
0.500
0.050
Vemos cmo solamente admitimos un grupo con un valor bajo de FDR.
0.005
Ejemplo 26 (Ejemplo 19 con GSA). En el ejemplo 19 todos los grupos
0.001
considerados tienen el mismo comportamiento. Aunque todos tienen expre-
grupo = c(rep(1,25),rep(2,25))
et2.gsa = GSA(et2,grupo, genenames=genenames.et, genesets=gsc.et,
resp.type="Two class unpaired", nperms=100)
0.80
para los datos et2 (ejemplo 19).
0.75
False discovery rate
GSA.plot(et2.gsa)
0.70
Es claro que ningn grupo se diferencia de los dems.
0.65
Ejemplo 27 (Datos GSE1397 y GSA). Leemos los datos.
data(gse1397,package="tamidata") 0.05
0.10 0.20 0.50
pvalue
data(gse1397.gsc,package="tamidata")
gsc = gse1397.gsc Figura 17.6: Grupos significativos con
datos et2 en funcin de FDR.
gruposGrandes = which(sapply(geneIds(gsc),length) > 50)
gsc = gsc[gruposGrandes]
gse = gse1397
tipo.num = as.numeric(pData(gse)[,"type"])
GSA.plot(gse1397.gsa)
Fijamos una tasa de error de 0.05. Veamos qu grupos son los que o
0.500
bien con una asociacin negativa o bien con asociacin positiva son los que
0.050
y sin sndrome de Down). Primero determinar los ndices de los grupos en
nuestra coleccin.
0.005
0.001
(ind.lo = which(gse1397.gsa$pvalues.lo <.05))
pvalue
## [1] 10 11 40 101 103 143 159 187 311 332 348
## [12] 390 410 495 511 521 569 629 649 715 745 807 Figura 17.7: Grupos significativos con
## [23] 841 datos gse1397.
names(gsc[ind.lo])
y para otros
names(gsc[ind.hi])
Y ahora viene el trabajo del especialista para ver hasta qu punto lo que
sale tiene sentido o no. Y si no tiene sentido desde el punto de vista biolgico
se descarta.
data(gscSc,package="tamidata")
data(gse6647,package="tamidata")
subsettingGeneSet = function(gs0,fn0){
geneIds(gs0) = geneIds(gs0)[is.element(geneIds(gs0),fn0)]
gs0
}
gse6647.gsc = sapply(gscSc,subsettingGeneSet,fn0 = featureNames(gse6647))
gse6647.gsc = GeneSetCollection(gse6647.gsc)
GeneSets = reshape2::melt(geneIds(gsc))
gse6647.gsc.piano = loadGSC(GeneSets)
library(genefilter)
gse6647.rtt = rowttests(gse6647,pData(gse6647)[,"type"])
gse6647.t = data.frame(gse6647.rtt[,"statistic"])
gse6647.p = data.frame(gse6647.rtt[,"p.value"])
rownames(gse6647.t) = featureNames(gse6647)
rownames(gse6647.p) = featureNames(gse6647)
Mtodo
Empezamos ordenando el universo de genes de acuerdo al grado
de asociacin gen-fenotipo utilizando algunos de los estadsticos
propuestos en 17.5. Tendremos la lista de genes ordenada, L.
1
h S (i ) =
ri S | t i | p
|t j | p , (17.8)
ji;r j S
Calculamos tambin
1
m S (i ) = N nS
, (17.9)
ji;r j
/S
y
eSk ,i
e = |{k, i : eSk ,i < 0}|
.
k,i:eS <0
k ,i
y
eSk ,i , si e
Sk ,i > 0,
eSk ,i = eSe+,
k i , si eS , < 0.
e k i
Utilizando piano
En esta seccin realizamos un anlisis con el mtodo GSEA de los
datos tamidata::gse6647 utilizando el paquete Varemo and Nookaew
[2017, piano].
iS (ti tS )2 (nS 1)
E (2) = p N (0, 1) (17.12)
2( n S 1)
27 Tendremos un p-valor asociado a cada grupo de genes. Una vez 27
Bajo la hiptesis de que los ti son
tenemos todos los grupos tenemos un problema de comparaciones independientes, con una distribucin
comn con varianza unitaria entonces
el estadstico tiene una distribucin
aproximadamente normal estndar. En
el trabajo original dividen por 2(nS 1)
y no la raiz cuadrada. Entiendo que
debe ser una errata.
342 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
library(multtest)
library(genefilter)
Cargamos el ExpressionSet.
data(gse1397,package="tamidata")
data(gse1397.gsc,package="tamidata")
gsc = gse1397.gsc
gruposGrandes = which(sapply(geneIds(gsc),length) > 50)
gsc = gsc[gruposGrandes]
tstat = rowttests(exprs(gse1397),pData(gse1397)[,"type"])$statistic
fset = which(is.element(featureNames(gse1397),geneIds(gsc[[1]])))
tami.Irizarry09(tstat,fset)
Vemos que los p-valores obtenidos nos permiten afirmar que el grupo
tiene una asociacin con el fenotipo (en este caso el sndrome de Down).
Podemos calcularlo para todos los grupos.
anlisis de conjuntos de genes 343
allgsc = matrix(0,ncol=4,nrow=length(gsc))
colnames(allgsc) = c("E1","p1","E2","p2")
for(i in 1:length(gsc)){
fset = which(is.element(featureNames(gse1397),geneIds(gsc[[i]])))
a = tami.Irizarry09(tstat,fset)
allgsc[i,] = c(a$E1,a$p1,a$E2,a$p2)
}
tS
Z= (17.15)
con y dados en las ecuaciones 17.13 y 17.14. Bajo la hiptesis nula
de que no hay ningn gen diferencialmente expresado en el conjun-
to de genes S entonces Z tiene aproximadamente una distribucin
normal estndar.
Z N (0, 1). (17.16)
17.16 EnrichmentBrowser
pacman::p_load("EnrichmentBrowser")
data(gse1397,package="tamidata")
gse1397=probe.2.gene.eset(gse1397)
gse1397 = de.ana(gse1397)
load("hsaKEGGgsc.rda")
gs.ranking(gse1397KEGGgsea)
## 3 hsa04146_Peroxisome 0.01450
## 4 hsa04668_TNF_signaling_pathway 0.02460
## 5 hsa04064_NF-kappa_B_signaling_pathway 0.02540
## 6 hsa00600_Sphingolipid_metabolism 0.02670
## 7 hsa04310_Wnt_signaling_pathway 0.04830
load("hsaGOBPgsc.rda")
gs.ranking(gse1397GOBPgsea)
17.17 EGSEA
17.18 Piano
El paquete Piano31 Varemo and Nookaew [2017, piano] tiene como Platform for Integrative Analysis of
31
referencia asociada Varemo et al. [2013] y una vieta muy interesante. Omics data.
pacman::p_load(piano)
data(gse1397,package = "tamidata")
gse1397.rtt = genefilter::rowttests(gse1397,pData(gse1397)[,"type"])
gse1397.t = data.frame(gse1397.rtt[,"statistic"])
gse1397.p = data.frame(gse1397.rtt[,"p.value"])
rownames(gse1397.t) = featureNames(gse1397)
rownames(gse1397.p) = featureNames(gse1397)
head(gse1397.t)
## gse1397.rtt....statistic..
## 1007_s_at -0.6183648
## 1053_at 0.6022344
## 117_at 1.5635785
## 121_at -0.8738516
## 1255_g_at 0.3815208
## 1294_at 2.9096918
data(gse1397.gsc,package="tamidata")
gsc = gse1397.gsc
pacman::p_load("GSEABase")
GeneSets = reshape2::melt(geneIds(gsc))
gse1397.gsc.piano = loadGSC(GeneSets)
Reporter features
Media muestral
Mediana
Suma
gse1397.t.gsa.piano
names(gse1397.t.gsa.piano)
head(GSAsummaryTable(gse1397.t.gsa.piano),n=1)
View(GSAsummaryTable(gse1397.t.gsa.piano))
GSAsummaryTable(gse1397.t.gsa.piano)[820,]
Podemos ver que el grupo tiene Genes (tot) genes, el valor agre-
gado o estadstico del grupo con los valores originales es Stat (dist.dir).
Utilizamos aleatorizacin por filas (gene sampling). La significa-
cin del estadstico Stat (dist.dir) para un test unilateral ha-
cia valores mayores es de p (dist.dir.up) y si lo ajustamos (por
Benjamini-Hochberg) vale p adj (dist.dir.up). Para un test hacia
valores menores es muy significativo, p (dist.dir.dn) y ajusta-
do p adj (dist.dir.dn). En definitiva con los valores originales
y el enriquecimiento medio tenemos que es significativamente me-
nor este grupo que otros grupos del mismo tamao elegido al azar.
Ahora consideramos el mdulo de los valores originales. El estads-
tico agregado o enriquecido es Stat (non-dir.) con un p-valor de
p (non-dir.) que ajustado pasa a valer p adj (non-dir.). Del to-
tal de Genes (tot) genes que forman el grupo tenemos Genes (up)
352 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
con valor del estadstico (a nivel gen que en este caso es un t-valor)
positivo y Genes (down) negativos. Trabajando con los valores po-
sitivos y contrastando si son significativamente mayores tenemos
un estadstico deStat (mix.dir.up) que corresponde con un p va-
lor dep (mix.dir.up) que ajustado pasa a serp adj (mix.dir.up).
Si trabajamos con los mdulos de los estadsticos (a nivel gen) ne-
gativos entonces el valor agregado (en este caso su media) vale
Stat (mix.dir.dn) que corresponde con un p-valor de 0.9286 y
ajustado p adj (mix.dir.dn).
Si nos fijamos en una tasa de error FDR de 0.05: Cuntos y cules
de los grupos de genes son significativos?
gse1397.s = GSAsummaryTable(gse1397.t.gsa.piano)
##
## FALSE TRUE
## 845 39
##
## FALSE TRUE
## 878 6
nw = networkPlot(gse1397.t.gsa.piano,class="non",significance = 0.01)
anlisis de conjuntos de genes 353
17.19 GSVA
17.20 ReactomePA
YeastNet http://www.inetbio.org/yeastnet/2 2
Probabilistic Functional Gene Network
of Saccharomyces cerevisiae.
FunCoup http://funcoup.sbc.su.se/.
18.1 Grafos
18.2 NEAT
18.3 DEGraph
Mtodo
EG () = 0 QG , (18.1)
donde QG es L entonces
EG () = (i j )2 (18.2)
i,jV
358 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
EG () = 0 MG , (18.7)
1 0 0 1 0
siendo MG = ( I D A ) ( I D A ), D = diag(d1 , . . . , d
p)y
I = diag( I (d1 6= 0), . . . , I (d p 6= 0)) Una vez tenemos esta forma
6 6
El elemento I es no nulo si di 6= 0 y
cuadrtica podemos hacer su descomposicin en valores singulares, nulo en otro caso.
n1 n2
Tk2 = ( x x2 )0 U[k] (U[0k] SU[k] )1 U[0k] ( x1 x2 ) =
n1 + n2 1
n1 n2
( x x2 )0 U I[k] U 0 (U I[k] U 0 SU I[k] U 0 )+ U I[k] U 0 ( x1 x2 ). (18.10)
n1 + n2 1
Ejemplo
library(DEGraph)
Parte VI
Agregacin
19
Listas de caractersticas ordenadas
1 1
Este captulo est basado fundamen-
talmente en Boulesteix and Slawski
[2009] y su implementacin en el pa-
En temas anteriores hemos visto cmo cuando realizamos un quete Slawski and Boulesteix. [2016,
anlisis de cada caracterstica marginalmente obtenemos un estadsti- GeneSelector]. De hecho, no es ms que
un resumen. Una buena referencia es
co y un p-valor asociado. Por ejemplo, en la situacin ms simple de Chen et al. [2015].
comparacin de dos grupos de muestras (dos condiciones) podemos
utilizar un t-test (bilateral). De hecho ordenamos las caractersticas
segn el mdulo del estadstico es mayor o bien si el p-valor es ms
pequeo. Ambos criterios producen la misma ordenacin.2 2
Si es con el estadstico ordenamos de
En lo anterior estas listas las hemos usado slamente a fin de de- mayor a menor y si es con el p-valor la
ordenacin se hace de menor a mayor.
terminar en qu posicin cortar de modo que por encima del punto
de corte declaramos que un test es significativo y por debajo que no
lo es. Este es el nico uso que podemos realizar de esta ordenacin?
No, claro. Supongamos que obtenemos 1000 caractersticas signifi-
cativas con un FDR de 0.05. De qu nos sirve? El investigador va
a seguir estudiando cada uno de estos genes? No es probable que
tenga dinero para ello.3 Lo ms probable es que elija seguir estu- 3
Bueno, a lo mejor en Estados Unidos o
diando aquellos genes que aparecen en la parte superior de la lista Alemania. Eso dicen.
r j = i (i ) = j.
library(GeneSelector)
library(tamidata)
data(gse1397)
x = exprs(gse1397)
y = pData(gse1397)[,"type"]
fc = RankingFC(x,y)
tstat = RankingTstat(x,y)
limma = RankingLimma(x,y,proportion=0.01)
foxdimmic = RankingFoxDimmic(x,y,m=100)
shrinkt = RankingShrinkageT(x,y)
class(tstat)
## [1] "GeneRanking"
## attr(,"package")
## [1] "GeneSelector"
getSlots("GeneRanking")
## x y statistic ranking
## "matrix" "factor" "numeric" "numeric"
## pval type method
## "vector" "character" "character"
tstat@y
## [1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2
## Levels: 1 2
head(tstat@ranking)
head(tstat@statistic)
head(tstat@pval)
tstat@type
## [1] "unpaired"
tstat@method
## [1] "ordinaryT"
toplist(tstat,top=10)
fc.top = toplist(fc,top=10,show=FALSE)
tstat.top = toplist(tstat,top=10,show=FALSE)
limma.top = toplist(limma,top=10,show=FALSE)
foxdimmic.top = toplist(foxdimmic,top=10,show=FALSE)
shrinkt.top = toplist(shrinkt,top=10,show=FALSE)
global.top = cbind(fc.top[,"index"],tstat.top[,"index"],limma.top[,"index"],
foxdimmic.top[,"index"],shrinkt.top[,"index"])
colnames(global.top) = c("fc","tstat","limma","foxdimmic","shrinkt")
Y obtenemos.
global.top
lista = list(fc,tstat,limma,foxdimmic,shrinkt)
genesel = GeneSelector(lista,maxrank=10)
show(genesel)
listareducida = list(tstat,limma,foxdimmic,shrinkt)
genesel = GeneSelector(listareducida,maxrank=10)
show(genesel)
which(slot(genesel,"selected") == 1)
## [1] 6303
genesel = GeneSelector(listareducida,maxrank=50)
show(genesel)
which(slot(genesel,"selected") == 1)
set.seed(1979)
Aplicamos jackknife con dejando fuera cada vez una de las mues-
tras originales. 11 Observemos que se impone una restriccin a esto y 11
En definitiva, un leaving-one-out.
es que cada clase ha de tener un tamao de, al menos, 6 muestras.
leave1out.tstat = RepeatRanking(tstat,leave1out,scheme="subsampling")
nal y las que tiene con los nuevos datos perturbados o modificados.
Es la figura ??.
400
300
plot(leave1out.tstat)
200
100
Tambin generamos muestras bootstrap imponiendo la misma Lo que significa que asignamos esa
12
toplist(boot.tstat,show = FALSE)
Vemos que nos muestra la tabla original con los diez primeros
genes, el t-estadstico y el p-valor. La siguiente tabla de frecuencias
muestras los genes que han aparecido al menos una vez entre los 10
primeros y la frecuencia de veces que aparece en cada una de las 10
primeras posiciones.
En la figura 19.1 mostramos las ordenaciones originales en abscisas
frente a las observadas cuando modificamos los datos segn los dis-
tintos procedimientos. Es ms que evidente la tremenda variabilidad
que obtenemos en las ordenaciones.
par(mfrow=c(2,2))
plot(leave1out.tstat, col="blue",
pch=".", cex=2.5, main = "jackknife")
plot(change1.tstat, col="blue",
listas de caractersticas ordenadas 371
400
200
200
0
0
0 50 150 0 50 150
bootstrap ruido
Ranks in perturbed datasets
2000
200
0
puesto.
merged = MergeMethods(lista)
Hemos de agregar las ordenaciones. La opcin ms bsica sera Figura 19.2: Heatmap para las or-
promediar, por gen, los rdenes obtenidos. denaciones obtenidas con distintos
estadsticos.
Probabilidad y Estadstica
20
Estadstica descriptiva
20.1 Datos
library(Biobase)
data(gse44456,package="tamidata")
y = exprs(gse44456)[3109,]
Es el gen
featureNames(gse44456)[3109]
## [1] "7895629"
head(y)
## GSM1085665_HE32H001.CEL
## 8.339249
## _
GSM1085666 HE32H003.CEL
## 7.907181
## _
GSM1085667 HE32H004.CEL
## 7.816187
## GSM1085668_HE32H005.CEL
## 8.232150
## GSM1085669_HE32H006_2_.CEL
## 7.869529
## GSM1085670_HE32H007_2_.CEL
## 8.023928
376 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
(z = pData(gse44456)[,"case"])
df = data.frame(x =z,y=y)
20.2 Introduccin
1. De qu orden son?
mean(y)
## [1] 7.890915
length(y)
## [1] 39
sum(y)/length(y)
## [1] 7.890915
yy = c(y,3400)
mean(y)
## [1] 7.890915
mean(yy)
## [1] 92.69364
mean(y,trim=.1)
## [1] 7.89261
mean(y,trim=.1)
## [1] 7.89261
mean(yy,trim=.1)
## [1] 7.901745
estadstica descriptiva 379
20.3.3 Percentiles
Otro manera de localizar los datos es utilizar los percentiles mues-
trales. Supongamos que tomamos un valor p entre 0 y 1. El percentil
de orden p es un valor que tiene por debajo el 100 p por ciento de
los datos y por encima el 100 (1 p) por ciento. Denotaremos el
percentil de orden p como q p . Ordenamos nuestros datos de menor a
mayor con la funcin sort.
sort(y)
## [1] 0
median(y)
## [1] 7.880398
quantile(y,probs = 0.27)
## 27%
## 7.778698
O bien p = 0,76
380 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
quantile(y,probs = 0.76)
## 76%
## 8.005315
quantile(y,probs = c(0.25,0.75))
## 25% 75%
## 7.763305 8.001348
var(y)
## [1] 0.05017174
sd(y)
## [1] 0.2239905
20.3.5 Rango
El mnimo y el mximo lo podemos obtener con
range(y)
o bien con
estadstica descriptiva 381
min(y)
## [1] 7.320905
max(y)
## [1] 8.364369
max(y)-min(y)
## [1] 1.043464
o bien con
diff(range(y))
## [1] 1.043464
IQR(y)
## [1] 0.2380429
summary(y)
20.4 MAD
20.5 Ejercicios
Ej. 17 Consideremos los siguientes datos.
43.86 33.14 37.04 29.29 21.49 34.98 18.09 18.84 36.20 27.82 22.86 32.11
22.45 38.22 44.55 39.03 33.25 18.27 34.44 24.88 24.58 42.12 30.04 19.58
34.00 32.98 28.35 25.75 22.78 15.88 38.97 13.47 21.42 34.19 16.49 15.17
31.42 17.00 37.06 30.35 19.65 34.62 16.48 19.42 42.89 23.89 29.26 45.64
32.29 22.96 29.60 39.98 21.86 18.25 35.96 30.57 40.79 17.21 27.07 28.56
15.59 23.51 18.78 37.72 14.40 28.40 43.17 22.65 27.85 41.56 42.44 16.57
23.55 29.66 20.72 28.28 42.10 13.76 27.27 19.69 20.18 23.80 14.37 22.02
29.06 34.52 21.91 19.98 16.24 44.56 18.54 35.96 30.12 32.82 45.76 28.75
32.01 19.39 23.76 41.72 32.90 31.47 15.04 12.74 44.11 38.65 27.18 35.52
15.70 38.95 30.59 15.43 45.60 14.98 23.11 22.11 23.03 19.91 34.95 16.05
Se pide:
1.Leer los datos utilizando el mtodo que se prefiera.
2.Calcular la media, mediana, media recortada con una proporcin
del 0,05, los percentiles de orden 0,1 y 0,9.
3.Supongamos que se han seguido recogiendo datos. En concreto
una segunda muestra con los siguientes valores.
123.34 78.23 89.6 1.2
20.6.2 Frecuencias
La segunda variable que hemos introducido en el banco de datos
es la zona en que tomamos la medida. Es pues una variable categ-
rica que nos indica la pertenencia del dato a una categora, en este
caso, la zona en que se observa el dato. La descripcin bsica ms
simple son los conteos o frecuencias absolutas. Contamos el nmero de
veces que se repiten cada una de las categoras. Tendremos el nmero
de datos que se ha observado en cada zona. Los obtenemos de un
modo simple con la funcin table.
table(z)
## z
## control alcoholic
## 19 20
prop.table(table(z))
## z
## control alcoholic
## 0.4871795 0.5128205
sum(table(z))
## [1] 39
table(z)/sum(table(z))
## z
## control alcoholic
## 0.4871795 0.5128205
384 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
20
count
10
library(ggplot2)
df0 = data.frame(z) 5
20.6.3 Histograma
Para una variable cuantitativa una buena opcin para observar la
distribucin de los datos es un histograma. La idea de un histograma
es (demasiado) simple. Si x1 , . . . , xn son los datos de los cuales que-
remos construir el histograma consideramos el intervalo que va del
mnimo al mximo, es decir, el intervalo
[ a, b] = [mn{ x1 , . . . , xn }, max{ x1 , . . . , xn }]
[ a, a + ), [ a + , a + 2), . . . , [ a + (k 1), b]
donde
ba
=
k
Dependiendo del software que utilicemos los valores de a y b suelen
elegirse como un poco menos que el mnimo y un poco ms que el
mnimo. El nmero de clases se elige de un modo automtico pero
siempre modificable por el usuario. Contamos el nmero de datos
que hay en cada clase. Representamos una barras (que se representan
pegadas una con otra lo que tambin nos permite diferenciarlo de un
diagrama de barras) cuya base coincide con el subintervalo y cuya
altura es proporcional al nmero de datos que hemos observado en
dicho subintervalo. Este es el dibujo. Veamos cmo hacerlo con R.
Si no le indicamos nada el programa decide el nmero de clases o 6
4
df0 = data.frame(y)
ggplot(df0,aes(x=y))+geom_histogram()
count
df0 = data.frame(y)
qplot(t(y),geom="boxplot")
ggplot(df0,aes(y,group = z)) + geom_boxplot()
Figura 20.3: Diagrama de cajas.
1 1 2
K (u) = e 2 u .
2
Otros ejemplos de funciones kernel que podemos usar las podemos
ver en http://en.wikipedia.org/wiki/Kernel_%28statistics%29.
En la figura 20.4 aparece un estimador kernel de la densidad utili- 2.0
df = data.frame(y)
density
ggplot(df,aes(x=y)) + geom_density() 1.0
0.5
[ x 3s, x 3s],
## named numeric(0)
## named numeric(0)
Puede ser extremo por abajo si es menor que q25 1,5 IQR o por
arriba si es mayor que q75 + 1,5 IQR. Determinemos los extremos
del intervalo.
## 25%
## 7.40624
## 75%
## 8.358412
## GSM1085686_HE32H023_2_.CEL
## 7.320905
## GSM1085697_HE32H034.CEL
## 8.364369
20.7 Ejercicios
Ej. 18 Vamos a realizar distintas representaciones grficas con los
datos del ejercicio 17. Se pide lo siguiente:
1.Realizar distintos histogramas de los datos que aparecen en el
ejercicio 17 modificando el nmero de clases. Hay un comporta-
miento consistente en la representacin grfica?
2.Representar grficamente un estimador kernel de la densidad.
Observar el valor que se ha utilizado para el ancho de banda.
3.Modificar el valor del ancho de banda observado en el apartado 2
doblando su valor y volver a representar el estimador kernel de la
densidad.
388 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
Ej. 20 x
22.24 21.04 23.89 22.49 25.22 22.15 22.49 27.51 23.57 25.22 23.47 18.91
21.64 24.29 21.68 24.51 22.32 24.77 18.30 23.03 22.03 21.09 23.32 21.15
21.21 25.53 19.34 25.89 23.06 25.90 20.09 25.65 27.76 29.14 22.88 31.40
22.79 23.68 22.15 21.50 22.40 24.39 20.34 17.53 25.59 20.25 20.76 23.08
20.66 20.47
y
27.60 24.02 33.97 27.84 33.12 37.32 37.53 38.95 29.80 32.72 30.04 26.45
26.34 32.82 28.91 29.37 32.39 29.43 37.83 24.46 37.82 32.19 34.51 32.64
30.44 38.70 29.84 29.35 32.78 34.01 36.24 41.86 35.96 35.57 33.84 27.69
29.32 41.71 34.08 27.64 33.06 39.98 36.62 29.72 33.51 31.49 33.51 33.24
25.02 39.78 31.96 37.69 44.01 29.07 32.94 30.47 33.33 24.34 35.99 32.25
36.51 33.47 35.37 31.82 38.49 25.67 29.36 36.64 24.14 39.54
estadstica descriptiva 389
Se pide:
1.Representar en dos grficos distintos los estimadores kernel de
ambas densidades.
2.Repetir el apartado anterior pero en la misma grfica.
3.Representar las funciones de distribucin de la primera muestra.
Haced lo mismo con la funcin de distribucin de la segunda
muestra.
4.Representad las dos funciones de distribucin en un mismo grfi-
co.
21
Probabilidad
= {cara, cruz}.
A = {2, 4, 6}.
A = {4, 5, 6}.
3
P(Mayor o igual a 4) = P({5, 5, 6}) = .
6
Qu probabilidad tenemos de obtener una cara al lanzar una
moneda? Por el mismo razonamiento:
1
P(Cara) = P({Cara}) = .
2
Un resultado es favorable y dos resultados son posibles cuando
lanzamos la moneda.
Omega = c("cara","cruz")
sample(Omega,1)
## [1] "cruz"
sample(Omega,1)
## [1] "cruz"
sample(Omega,1)
## [1] "cara"
sample(Omega,30,replace=TRUE)
Y otras 30 veces.
sample(Omega,30,replace=TRUE)
Podemos contar cuntas veces nos ha salido cara y cruz (el que quiera
puede hacerlo manualmente).
x = sample(Omega,30,replace=TRUE)
table(x)
## x
## cara cruz
## 16 14
table(x) / 30
## x
## cara cruz
## 0.5333333 0.4666667
x = sample(Omega,100,replace=TRUE)
table(x) / 100
## x
## cara cruz
## 0.52 0.48
x = sample(Omega,1000,replace=TRUE)
table(x) / 1000
## x
## cara cruz
## 0.522 0.478
x = sample(Omega,100000,replace=TRUE)
table(x) / 100000
## x
## cara cruz
## 0.49986 0.50014
muestral.
(Omega = 1:6)
## [1] 1 2 3 4 5 6
sample(Omega,1)
## [1] 3
sample(Omega,20,replace=TRUE)
## [1] 6 1 4 1 5 4 4 1 3 4 3 6 5 2 1 1 5 6 5 3
x = sample(Omega,1000,replace=TRUE)
table(x) / 1000
## x
## 1 2 3 4 5 6
## 0.176 0.168 0.167 0.176 0.147 0.166
12 21 13 31 23 32
n ( n 1) . . . ( n k + 1).
n! = n (n 1) . . . 1.
12 21
{1,2} {2,1}
factorial(10)
## [1] 3628800
choose(10,5)
## [1] 252
13(42)(12
3 )4
3
.
(52
5)
## [1] 1098240
(casosposibles = choose(52,5))
## [1] 2598960
casosfavorables / casosposibles
## [1] 0.422569
(cartas = rep(1:13,4))
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2
## [16] 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4
## [31] 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6
## [46] 7 8 9 10 11 12 13
(mano = sample(cartas,5))
## [1] 11 10 12 8 11
Cmo s que tenemos una pareja? Una forma sencilla es contar la fre-
cuencia de cada nmero.
400 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
(conteosmano = table(mano))
## mano
## 8 10 11 12
## 1 1 2 1
length(conteosmano)
## [1] 4
nsimulaciones = 1000
exitos = 0
for(i in 1:nsimulaciones){
mano = sample(cartas,5)
conteosmano = table(mano)
if(length(conteosmano) == 4) exitos = exitos + 1
}
exitos / nsimulaciones
## [1] 0.416
2. P() = 1.
probabilidad 401
P ( A1 A2 ) = P ( A1 ) + P ( A2 ) P ( A1 A2 ). (21.4)
P ( A c ) = 1 P ( A ). (21.5)
21.2 Ejercicios
1
P({i }) = .
N
X: R
X ( ) = x.
x 0.000 1.000 2.000 3.000 4.000 5.000 6.000 7.000 8.000 9.000 10.000
P( X = x ) 0.107 0.268 0.302 0.201 0.088 0.026 0.006 0.001 0.000 0.000 0.000
Tabla 21.1: Funcin de probabilidad de
una variable discreta. En la primera fila
A partir de la funcin de probabilidad P( X = xi ) podemos calcu- el valor y en la segunda la probabilidad
lar cualquier otra probabilidad. Por ejemplo: de tomar este valor.
P ( X 2) = P ( X = 0) + P ( X = 1) + P ( X = 2),
404 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
o bien,
P( X 7) = P( X = 7) + P( X = 8) + P( X = 9) + P( X = 10).
Tambin
P (4 X 7) = P ( X = 4) + P ( X = 5) + P ( X = 6) + P ( X = 7).
P (4 < X 7) = P ( X = 5) + P ( X = 6) + P ( X = 7).
P (4 < X < 7) = P ( X = 5) + P ( X = 6).
De un modo genrico podemos escribir que
P( X A) = P ( X = x ),
x A
21.3.2 Ejercicios
Ejercicio 11. Consideremos el experimento aleatorio consistente en lanzar
dos veces un dado. Un resultado del experimento puede ser = (1, 3)
indicando que en primer lugar hemos obtenido un 1 y en el segundo lanza-
miento hemos obtenido un 3. Consideramos la variable aleatoria que asocia al
resultado obtenido la suma de los valores que obtenemos en el primer y en el
segundo lanzamiento. Si = (i, j) entonces X ( ) = i + j.
Z b Z b
P( a X b) = f ( x )dx = dx = b a, 0%
runif(1,min=0,max=1)
## [1] 0.6736497
c c ba ba
Figura 21.4: Funcin de densidad de
Otra vez la probabilidad de que el valor aleatorio de X est en el intervalo una variable uniforme en el intervalo
[2, 5].
[c, d] solamente depende de lo largo que es el intervalo y no de dnde est
dentro de [ a, b].
21.3.4 Ejercicios
Ej. 21 Consideremos una variable aleatoria uniforme en el inter-
valo [0, 1]. Se pide:
1.Qu probabilidad tenemos de que la variable sea menor o igual
que 0,5? En otras palabras: cunto vale P( X 0,5)?
2.Y P( X < 0,5)?
probabilidad 407
FX ( x ) = F ( x ) = P( X x ). (21.6)
FX ( x ) = P ( X = x i ),
xi :xi x
distribucin. Las probabilidades que aparecen en la tabla 21.1 aparecen repre- 0.2
FX ( x ) = f (t)dt. 0.0
La igualdad afirma que la probabilidad de que la variable sea es- stepfun(ee$x, c(0, cumsum(ee$probabilidad)))
trictamente mayor que a y menor o igual que b lo podemos obtener
1.0
0.6
F
0.4
0.2
0.0
0 2 4 6 8 10
x
408 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
en la figura 21.7.
0.8
0.6
Fn(x)
plot(ecdf(y))
0.4
Si queremos conocer el valor de Fn en un valor determinado, por
0.2
ecdf(y)(37) x
o bien en 40,
ecdf(y)(40)
## [1] 1
library(Hmisc)
Ecdf(y)
1.0
0.8
Proportion <= x
21.3.7 Ejercicios
0.6
0.4
Ej. 23 Consideremos el experimento aleatorio consistente en lan-
zar dos veces un dado. Un resultado del experimento puede ser
0.2
= (1, 3) indicando que en primer lugar hemos obtenido un 1 y
0.0
en el segundo lanzamiento hemos obtenido un 3. Consideramos la 7.4 7.6 7.8 8.0 8.2 8.4
variable aleatoria que asocia al resultado obtenido la suma de los n:39 m:0
y
valores que obtenemos en el primer y en el segundo lanzamiento. Si Figura 21.8: Funcin de distribucin
= (i, j) entonces X ( ) = i + j. Se pide: muestral con la funcin Ecdf.
x 0.00 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00
P( X = x ) 0.20 0.11 0.13 0.24 0.27 0.02 0.01 0.01 0.00 0.01
Tabla 21.2: Funcin de probabilidad
de la variable aleatoria que nos da el
Podemos simular la seleccin aleatoria de una vivienda en esa poblacin
nmero de personas que residen en una
utilizando la funcin sample. vivienda.
x = 0:9
probabilidades = c(0.20,0.11,0.13,0.24,0.27,0.02,0.015,0.009,
0.0009,0.0051)
sample(x,size=1,replace=TRUE,prob=probabilidades)
## [1] 4
n = 100
(y = sample(x,size=n,replace=TRUE,prob=probabilidades))
## [1] 2 9 1 4 2 3 4 0 4 1 3 3 0 1 3 4 4 4 9 0 2 4
## [23] 1 3 3 1 4 4 4 2 4 3 6 0 3 4 3 2 1 3 4 3 4 4
## [45] 7 1 0 4 0 3 2 0 3 5 2 3 4 0 2 4 4 3 1 3 0 3
## [67] 4 3 4 3 2 2 3 4 3 4 3 4 4 1 3 0 2 3 0 3 4 3
## [89] 2 4 0 3 4 4 4 2 4 4 4 0
prop.table(table(y))
## y
## 0 1 2 3 4 5 6 7 9
## 0.13 0.09 0.13 0.27 0.33 0.01 0.01 0.01 0.02
y = sample(x,size=1000,replace=TRUE,prob=probabilidades)
prop.table(table(y))
## y
## 0 1 2 3 4 5 6 7
## 0.190 0.100 0.133 0.259 0.265 0.023 0.013 0.008
## 8 9
## 0.002 0.007
probabilidad 411
n n
y nx
yn = ni = xn
i =1 x =0
## [1] 2.4761
= 1 p + 0 (1 p) = p.
+
var ( X ) = 2 = E( X )2 = ( x i )2 P ( X = x i ).
i =1
412 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
i =1
X ( ) = 1 A ( ),
X Bi (1, p).
X Bi (n, p).
Observemos que los valores que puede tomar esta variable son
0, 1, 2, . . . , n, esto es, desde cero xitos hasta n xitos. Qu proba-
bilidad tenemos de observar un nmero determinado de xitos? Esta
probabilidad, P( X = x ) es la funcin de probabilidad de la binomial
y se prueba que tiene la siguiente expresin.
n x
P( X = x ) = p (1 p ) n x . (21.10)
x
dbinom(70,size=123,prob=0.5)
## [1] 0.02230619
## [1] 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0 1
## [24] 1 1 1 0 1 0 0
rbinom(30,size=1,prob=.5)
## [1] 0 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 1 0 0 1 0 1
## [24] 1 0 1 1 1 1 0
rbinom(1,size=30,prob=.5)
## [1] 16
rbinom(1,size=30,prob=.5)
## [1] 16
rbinom(40,size=30,prob=.5)
## [1] 19 14 14 14 16 16 14 17 12 13 14 20 19 16 14
## [16] 17 11 22 13 13 15 15 16 16 17 13 20 18 11 13
## [31] 12 8 12 18 17 17 12 13 15 18
rbinom(40,size=30,prob=.6)
## [1] 18 20 17 21 20 20 24 20 19 17 22 22 16 17 15
## [16] 14 20 20 19 19 17 18 20 21 18 18 17 13 19 14
## [31] 19 17 17 22 20 15 25 18 18 17
dbinom(23,size=30,prob=.6)
## [1] 0.02634109
dbinom(0:30,size=30,prob=.6)
y
## [19] 1.473752e-01 1.396186e-01 1.151854e-01
## [22] 8.227527e-02 5.048710e-02 2.634109e-02 0.05
## [31] 2.210739e-07
0.00
0 10 20 30
x
En la figura 21.10 tenemos la representacin grfica de estas probabilida- Figura 21.10: Para una variable bino-
mial con n = 30 y una probabilidad de
des. xito de p = 0,6 mostramos la funcin
Tambin podemos obtener la funcin de la distribucin binomial en cual- de probabilidad que para cada x nos da
la probabilidad de que la variable tome
quier punto, es decir, la probabilidad P( X 12) es ese valor, P( X = x ).
pbinom(12,size=30,prob=.6)
20%
## [1] 0.02123988
15%
xito p = 0,6.
5%
21.6.1 Ejercicios
0%
Ej. 26 Se pide: 5 10
1.Simular 100 valores con distribucin binomial con 20 pruebas y Figura 21.11: Funcin de densidad de
una probabilidad de xito en cada prueba de 0,3. Guardar estos una normal con media 7 y varianza 4.
valores en el vector x.
1.00
0.25
0.00
0 10 20 30
x
X Po ().
e x
f X ( x ) = P( X = x ) = , si x = 0, 1, . . . (21.14)
x!
y cero en el resto. 8 8
Es fcil comprobar que la funcin que
La funcin de distribucin tiene por expresin acabamos de considerar en 21.14 es de
probabilidad. Es no negativa y
e n +
x +
x
FX ( x ) = n!
. e x!
x =0
= e
x =0 x!
= e e = 1.
n x
X Po ().
e x
lm P( Xn = x ) = .
n+ x!
Demostracin. Consideremos la sucesin de variables aleatorias Xn
Bi (n, pn ) en la que a medida que n aumenta, pn disminuye de forma
tal que npn . Ms concretamente, npn . Tendremos para la
funcin de probabilidad que
n x n!
P ( Xn = x ) = p n (1 p n ) n x = p x (1 p n ) n x ,
x x!(n x )! n
n x
x
n!
P ( Xn = x ) 1
x!(n x )! n n
x
n ( n 1) ( n x + 1) n x
= 1 1 .
x! nx n n
Al pasar al lmite,
n x
n ( n 1) ( n x + 1)
1, 1 e , 1 1,
nx n n
y tendremos
e x
lm f Xn ( x ) = .
n+ x!
P( X = 0) = P( A1 ) = p.
y cero en el resto.
k+r1 k
P( X = k) = p (1 p )r (21.15)
k
k+r1
=
k
( k + r 1) ! ( k + r 1) . . . r
= =
k!(r 1)! k!
(r )(r 1) . . . (r k + 1) r
(1)k = (1)k . (21.16)
k! k
Se demuestra que
pr
E( X ) = = , (21.17)
1 p
y que su varianza viene dada por
pr
var ( X ) = 2 = . (21.18)
(1 p )2
probabilidad 421
(k + r ) k
P( X = k) = p (1 p )r (21.19)
k!(r )
con k = 0, 1, . . .
En lo anterior hemos parametrizado la familia utilizando k y r. Su-
pongamos que parametrizamos utilizando y r. Tendremos entonces
p = /(r + ) y sustituyendo
k r
(k + r )
r
P( X = k) = . (21.20)
k!(r ) r+ r+
var ( X ) = 2 = + 2 . (21.22)
Nota 2 (La normal estndar). Una variable aleatoria Z se dice que tiene
una distribucin normal estndar cuando su media es cero y su varianza es
uno: Z N (0, 1). Su funcin de densidad es
0.4
1 1 2
0.3
f ( x ) = e 2 x . (21.24)
2
Densidad
0.2
La representacin grfica de esta densidad la tenemos en la figura 21.13.
0.1
Si Z es una normal estndar entonces la funcin de distribucin, esto es,
la funcin que para cada valor z nos da la probabilidad de que la variable sea
0.0
menor o igual que este valor z es la siguiente 6 4 2 0 2 4 6
x
Z z
1 1 2
(z) = e 2 x dx. (21.25) Figura 21.13: Funcin de densidad de
2 una normal estndar o tpica.
Dado un punto z el valor de la funcin (z) nos da el rea bajo la curva de
la densidad normal entre y el punto z. En la figura 21.14 hemos rayado
en negro esta zona para z = 1,3
Hay tablas que nos proporcionan el valor de esta funcin para diferentes
valores de z.12 Esto era necesario cuando no tenamos herramientas infor- 12
Simplemente poniendo en Google
mticas. Ahora lo lgico es utilizar software. En concreto el valor de (1,3) tablas de la normal nos aparecen un
montn de tablas. Cualquier libro de
(rea de la zona rayada en negro en la figura 21.14 lo obtendramos con R texto de hace unos aos lleva al final
del siguiente modo. del texto unas tablas de la normal.
pnorm(1.3) 0.4
0.2
X
aleatoria Z = sigue una distribucin normal con media 0 y con
varianza 1, esto es, se verifica 0.0
6 3 0 3 6
X x
100%
75%
50%
probabilidad 423
la variable aleatoria X.
En la figura 21.16 mostramos la densidad de una variable X normal con
media 7 y varianza 4 y la densidad de la variable tipificada Z.
60 56 X 56 63 56
P(60 X 63) = P =
3 3 3
60 56 63 56 63 56 60 56
P Z =P Z P Z .
3 3 3 3
(21.27) 40%
63 56 60 56 63 56 60 56
P Z P Z = .
3 3 3 3
20%
63 56 60 56
P(60 X 63) = ,
3 3 0%
0 10 20
b a
P( a X b) = , (21.28)
0.05
x0 = seq(10,22,1)
dnorm(x0,mean= 16, sd= 2)
10 20 30 40
## [1] 0.1586553
0.50
y
10 15 20
x
pnorm(1,mean=0,sd=1) - pnorm(-1,mean=0,sd=1)
## [1] 0.6826895
P( X + ) = 0,6826895. (21.31)
P( 2 X + 2) = P(2 Z 2) (21.32)
pnorm(2,mean=0,sd=1) - pnorm(-2,mean=0,sd=1)
## [1] 0.9544997
P( 3 X + 3) = P(3 Z 3) (21.33)
que es igual a
pnorm(3,mean=0,sd=1) - pnorm(-3,mean=0,sd=1)
## [1] 0.9973002
P( 3 X + 3 ) 0.9973002
21.10 Ejercicios
Ej. 30 Se pide:
1.Simular 100 valores con distribucin normal con media 20 y des-
viacin tpica 3. Guardar estos valores en el vector x.
2.Calcular la media y varianza muestrales de los valores generados.
3.Comparar la media muestral observada con 20 y la varianza mues-
tral observada con 9 que corresponden con la media y la varianza
tericas.
4.Repetir los apartados anteriores sustituyendo las 100 simulacio-
nes por 1000, por 10000 y por 100000. Comparar en cada caso los
valores tericos con los valores muestrales.
N=2374560
X = rbinom(N,size=1,prob=.034)
428 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
X[1:10]
## [1] 0 0 0 0 0 0 0 0 0 0
X[100000]
## [1] 0
n = 100
x = sample(X,n)
x
## [1] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## [23] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [45] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
## [67] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
## [89] 0 0 0 0 0 0 0 0 0 0 0 0
sum(x)
## [1] 4
x = sample(X,100)
sum(x)
## [1] 2
## [1] 3 5 5 2 3 2 3 7 6 4 4 0 4 4 2 4 6 3 3 2
sumas/n
## [1] 0.03 0.05 0.05 0.02 0.03 0.02 0.03 0.07 0.06
## [10] 0.04 0.04 0.00 0.04 0.04 0.02 0.04 0.06 0.03
## [19] 0.03 0.02
22.2.1 Ejercicios
Ej. 32 1 Muchos equipos de investigacin pretenden realizar un 1
Wilcox [2009, pg. 79, problemas 2-3]
estudio sobre el porcentaje de personas que tienen cncer de colon.
Si una muestra aleatoria de diez personas se pudo obtener, y si la
probabilidad de probabilidad de tener cncer de colon es 0,05, cul
es la probabilidad de que un equipo de investigacin obtenga p =
0,1? Y la de p = 0,05?
N = 237456
X = rnorm(N,mean=160,sd=10.23)
X[1:10] 20000
count
## [6] 172.3557 164.0881 176.9400 148.9404 142.8552
10000
Como conocemos toda la poblacin podemos conocer su media o 125 150 175 200
X
media poblacional y vale: Figura 22.1: Histograma de la poblacin
de alturas.
(mu=mean(X))
0.04
## [1] 160.0128
0.03
0.02
n = 100
x = sample(X,n) 0.01
## [1] 157.9384
x = sample(X,n)
mean(x)
## [1] 158.9058
160.5
Finalmente supongamos que tomamos muestras de tamao cre-
Media muestral
ciente y mostramos en abscisas el tamao de la muestra y en orde-
159.5
nadas la media muestral observada. En la figura 22.3 tenemos el
resultado. Lo repetimos. En la figura 22.4 tenemos las medias ob-
servadas. No obtenemos las mismas medias muestrales pero si un
158.5
comportamiento aleatorio similar. 0 5000 10000 15000 20000
Muestra
Si denotamos la muestra aleatoria que estamos extrayendo de la
poblacin con X1 , . . . , Xn entonces la media muestral (que utiliza- Figura 22.3: Generamos muestras
de tamao creciente. Calculamos la
remos para estimar la media poblacional) tiene una distribucin (o media muestral de cada muestra.
se distribuye como) una normal con media (la media poblacional) En el eje de abscisas mostramos el
2
y con varianza X2 = n , la varianza poblacional dividida por el tamao de la muestra que hemos
n generado. En el eje de ordenadas en
tamao de la muestra. De un modo resumido esto se expresa con valor observado de la media muestral.
La lnea horizontal muestra la media
2 poblacional. Vemos cmo las medias
Xn N (, ) (22.1) muestrales se aproximan a la media de
n
la poblacin.
si X1 , . . . , Xn son variables aleatorias independientes y con distribu-
cin
Xi N (, 2 ), con i = 1, . . . , n.
160.6
Xn
n N (0, 1) (22.2)
159.8
Nos interesa conocer probabilidades como
159.4
Muestra
Ejemplo 45. Por ejemplo, supongamos que nos interesa saber qu pro-
babilidad tiene la media muestral de ser menor que 162. Como estamos
suponiendo que conocemos toda la poblacin podemos tomar como varianza
la de toda la poblacin.
sigma = sd(X)
pnorm(162,mean=mu,sd=sigma/sqrt(n))
## [1] 0.9741615
pnorm(162,mean=mu,sd=sigma/sqrt(n)) -
pnorm(159,mean=mu,sd=sigma/sqrt(n))
## [1] 0.8135001
1 - pnorm(160,mean=mu,sd=sigma/sqrt(n))
## [1] 0.5050096
Si
( t )2
Z x
1
( x ) = exp dt.
2 22
lo que estamos haciendo con R es simplemente aplicar que
P( X b) = (b)
o
P( a X b) = (b) ( a)
o
P( a X ) = 1 ( a)
22.3.1 Ejercicios
Ej. 35 4 Supongamos n = 16, = 2 y = 30. Supongamos 4
Wilcox [2009, pg. 84, problema 8]
normalidad. Determinar:
1.P( X 29),
2.P( X > 30,5),
3.P(29 X 31).
distribucin muestral 433
Ej. 38 7 Una compaa afirma que las primas pagadas por sus 7
Wilcox [2009, pg. 85, problema 12]
clientes para el seguro de automviles tiene una distribucin normal
con media = 750 euros y desviacin estndar = 100 euros.
Suponiendo normalidad, cul es la probabilidad de que para n = 9
clientes elegidos al azar, la media muestral tome un valor entre 700
y 800 euros?
in=1 Xi
p = ,
n
p p
Z= p . (22.3)
p(1 p)/n
434 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
P( a p b) =
P( p b) P( p a) =
bp ap
P( Z p ) P( Z p ). (22.4)
p(1 p)/n p(1 p)/n
Xn
lm P z = P( Z z) (22.5)
n+ n
22.4.3 Ejercicios
Ej. 39 1.Supongamos una distribucin binomial con p = 0,5 y
n = 10 y queremos calcular la probabilidad de que p sea menor
o igual a 7/10. Obtener el valor exacto y el valor aproximado
utilizando la aproximacin dada por el teorema central del lmite.
2.Repetir el punto anterior obteniendo el valor exacto y el valor
aproximado de P(0,3 p 0,7).
23.1 Introduccin
23.2 La poblacin
Nota 6 (Estimando una media). Vamos a ilustrar los conceptos con una
poblacin finita. Y muy grande. Suponemos que tenemos una poblacin de
237456 personas que conocemos la altura de cada una de las personas.1 Los 1
Hemos tenido la santa paciencia de
datos los tenemos en el vector X. medir la estatura de cada uno de ellos.
Y ellos se han dejado.
Por ejemplo, las estaturas de las diez primeras personas (en centmetros)
son
(mu=mean(X))
## [1] 159.9979
n = 10
(x = sample(X,n))
(mediamuestral = mean(x))
## [1] 161.2925
mediamuestral - mu
## [1] 1.2946
density.default(x = estimaciones)
Veamos un resumen de los errores observados.
0.25
errores = estimaciones-mu
0.20
summary(errores)
0.15
Density
0.10
De hecho, en la figura 23.1 hemos representado un estimador kernel de las 154 156 158 160 162 164 166
estimaciones y una lnea vertical mostrando la media real. N = 100 Bandwidth = 0.4235
As es como funciona la estimacin puntual. Hemos visto una situa- Figura 23.1: Estimador kernel de la
cin irreal en que tenemos todos los valores que componen la poblacin y, densidad de las estimaciones obtenidas
eligiendo muestras de tamao 10 de la
poblacin. La lnea vertical tiene como
abscisa comn la media poblacional.
438 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
2
Xn N (, ) (23.1)
n
Si las distintas variables Xi que componen la muestra no siguen una
distribucin muestral entonces asumiendo que tenemos una muestra
grande el resultado que damos en 23.1 es aproximadamente cierto.
En cualquier caso, la varianza de la media muestral Xn
X
P c = 0,975
440 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
qnorm(0.975,mean=0,sd=1)
## [1] 1.959964
En resumen que
X
P 1,96 n 1,96 = 0,95
o, lo que es equivalente,
P X 1,96 X + 1,96 = 0,95.
n n
(x = sample(X,10))
media = mean(x)
s = sd(x)
## [1] 156.9302
## [1] 163.6551
estimacin 441
alpha = 0.01
## [1] 155.8736
y el superior
## [1] 164.7116
El intervalo es el siguiente:
c(extremo.inferior,extremo.superior)
El ltimo paso es rogar a Dios que las cosas hayan ido bien. Tenemos una
confianza de 1 (0,99 en el ejemplo) de que el valor real de la media est
en este intervalo. Pero esto no quiere decir que realmente lo est. Si repeti-
mos un gran nmero de veces el valor real de la media est en el intervalo
un (1 ) 100 % de la veces (un 99 % en el ejemplo) pero puede ocurrir
(desgracias de la vida) que estemos en el 100 (en el ejemplo un 1 %)
restante. En general la cosa va bien porque elegimos un nivel de confianza
grande (prximo a uno) pero no siempre va bien.
442 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
0.4
0.3
dt(u, df = 9)
0.2
0.1
0.0
3 2 1 0 1 2 3
0.4
t de Student con 2 grados de libertad en trazo discontinuo. Vemos que tienen
una forma similar, ambas estn centradas en cero. Sin embargo, la densidad
0.3
de la normal est ms concentrada alrededor de cero. La densidad de la t de
0.2
Student est ms repartida. Y esto ocurre para cualquier nmero de grados
de libertad.
0.1
Qu ocurre cuando incrementamos el nmero de grados de libertad?
0.0
Cuando se va incrementando el nmero de grados la densidad de la t de 3 2 1 0 1 2 3
Student se aproxima a la densidad de la normal. En la figura 23.4 se ilustra x
0.4
P(c T c) = 0,95.
0.3
En concreto verificar que
0.2
P( T c) = 0,975
0.1
mos con 3 2 1 0 1 2 3
S S
P( X tn1,1/2 X + tn1,1/2 ) = 1 . (23.4)
n n
alpha = 0.01
## [1] 154.7173
y el superior
## [1] 165.8679
El intervalo es el siguiente
c(extremo.inferior,extremo.superior)
5 5
Podemos comprobar que el intervalo
que obtenemos asumiendo varian-
Nota 8 (Obtencin del intervalo de confianza utilizando t.test). No za conocida es ms pequeo que el
que obtenemos asumiendo varianza
hace falta escribir todo lo anterior para calcular el intervalo de confianza. desconocida.
El intervalo de confianza para la media lo podemos obtener con la funcin
t.test. De hecho, nos da el intervalo de confianza y alguna cosa ms que, de
momento, no necesitamos.
alpha = 0.05
t.test(x,conf.level=1-alpha)
##
## One Sample t-test
estimacin 445
##
## data: x
## t = 93.434, df = 9, p-value = 9.343e-15
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 156.4117 164.1735
## sample estimates:
## mean of x
## 160.2926
alpha = 0.05
t.test(x,conf.level=1-alpha)$conf.int
100
tiene al verdadero valor de la media. Generamos 100 intervalos con muestras
de tamao n = 100. En la figura 23.5 hemos representado los 100 interva-
80
los que hemos obtenido. La lnea vertical indica la media poblacional. Cada
60
segmento horizontal se ha dibujado de modo que las abcisas de sus extremos
40
de confianza.
0
Ejemplo 46 (Datos gse21942). Vamos a utilizar los datos tamidata::gse21942. 156 158 160 162 164
Intervalos de confianza
t.test(y0)
##
## One Sample t-test
##
446 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## data: y0
## t = 7.5787, df = 13, p-value = 4.023e-06
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 3.517188 6.321905
## sample estimates:
## mean of x
## 4.919546
y0.t = t.test(y0)
y0.t$conf.int
o simplemente
t.test(y0)$conf.int
t.test(y0,conf.level=.90)$conf.int
t.test(y0,conf.level=.99)$conf.int
alpha = .01
(extremoinferior = media - qt(1-alpha/2,df=n-1) *
desviacion.estandar/ sqrt(n))
## [1] 4.941204
## [1] 5.100796
media = 4.969
desviacion.estandar = 1.909
n = 1724
alpha = .01
(extremoinferior =
media - qt(1-alpha/2,df=n-1) * desviacion.estandar/ sqrt(n))
## [1] 4.850441
(extremosuperior =
media + qt(1-alpha/2,df=n-1) * desviacion.estandar / sqrt(n))
## [1] 5.087559
media = 5.054
desviacion.estandar = 2.174
n = 2775
alpha = .01
(extremoinferior = media - qt(1-alpha/2,df=n-1) *
desviacion.estandar/ sqrt(n))
## [1] 4.947624
## [1] 5.160376
estimacin 449
t.test(y0,conf.level=.95)$conf.int
mean(y0)
## [1] 4.919546
## [1] 2.804717
y0.ci = t.test(y0,conf.level=.95)$conf.int
(y0.ci[2] - y0.ci[1]) / 2
## [1] 1.402359
length(y0)
## [1] 14
S
tn1,1
2 n
alpha = .05
n = length(y0)
qt(1-alpha/2,df=n-1)*sd(y0)/sqrt(n)
## [1] 1.402359
sd0 = sd(y0)
delta = 0.2
S
tn1,1
2 n
Si asumimos que s es aproximadamente constante.
m = n + 10
qt(1-alpha/2,df=m-1)*sd(y0)/sqrt(m)
## [1] 1.0256
m = n + 100
qt(1-alpha/2,df=m-1)*sd(Sc.Nor)/sqrt(m)
m = n + 90
qt(1-alpha/2,df=m-1)*sd(y0)/sqrt(m)
## [1] 0.4723448
for(m in 80:95)
print(c(m,qt(1-alpha/2,df=m-1)*sd(y0)/sqrt(m)))
( n 1) S2
Estamos diciendo que la variable aleatoria 2 tiene una distri-
7
bucin ji-cuadrado con n-1 grados de libertad. En la figura 23.6 7
La densidad de una distribucin
hemos representado la funcin de densidad de una ji-cuadrado con ji-cuadrado con k grados de libertad es
10 grados de libertad. 1 k x
f (x) = x 2 1 e 2 para x 0 y cero en otro caso
2k/2 (k/2)
Con objeto de ver cmo cambia la forma de la funcin de densi-
dad cuando cambia el nmero de grados de libertad en la figura 23.7
mostramos las densidades de la ji-cuadrado con 10 grados de libertad
(trazo continuo) y con 20 grados de libertad (trazo discontinuo).
0.10
Denotamos el percentil de orden p de una ji-cuadrado con k gra-
0.08
dos de libertad como p,k . Es decir, si la variable X se distribuye
dchisq(x, df = 10)
0.06
P( X 2p,k ) = p.
0.02
0.00
x
p = 0.75
k = 13 Figura 23.6: Funcin de densidad de
una ji-cuadrado con 10 grados de
qchisq(p,df=k)
libertad.
## [1] 15.98391
0.10
( n 1) S2
dchisq(x, df = 10)
P 2/2,n1 2
1/2,n1 = 1 .
0.06
2
0.04
Y por lo tanto,
0.02
( n 1) S2 ( n 1) S2
0.00
2
P = 1 .
21/2,n1 2/2,n1 0 10 20 30 40 50
Es decir el intervalo
( n 1) S2 ( n 1) S2
,
21/2,n1 2/2,n1
n = 100
x = sample(X,100)
alpha = .05
s2 = var(x)
(extremoinferior = (n-1)*s2 / qchisq(1-alpha/2,df=n-1))
## [1] 18.5795
## [1] 32.52428
24.1 Introduccin
H0 : 1500,
H1 : > 1500,
siguiente
Xn 1500
T= . (24.1)
S/ n
Si consideramos los valores observados tenemos
xn 1500
t0 = , (24.2)
s/ n
## [1] 2.106962
Tc
Xn 1500
T= t n 1 . (24.3)
S/ n
P( T c) = 0,05, (24.4)
o, equivalentemente, que
qt(.95,df=99)
## [1] 1.660391
t0
## [1] 2.106962
superior a 1500.
Grficamente podemos representar lo que acabamos de hacer. En la figura 0.3
y
estadstico t0 .
0.1
Y ahora planteamos el problema de un modo genrico. Considera-
mos el contraste de hiptesis.
0.0
10 5 0 5 10
H0 : 0 , valores.x
Xn 0
T= (24.6)
S/ n
y el valor observado
xn 0
t0 = . (24.7)
s/ n
Bajo la hiptesis de que la media poblacional vale 0 , = 0 , se
tiene que
Xn 0
T= t n 1 , (24.8)
S/ n
y t0 sera un valor observado de una variable aleatoria con distribu-
cin t con n-1 grados de libertad.
Supongamos que queremos (es una eleccin del decisor que somos
nosotros) un error tipo I que sea menor o igual a (habitualmente
0,05, 0,01 o 0,1) entonces la regla de decisin es:
p = P( T t0 )dondeT tn1 .
(pvalor=1-pt(t0,df=n-1))
## [1] 0.01882416
negro.
0.1
p = 0.0188
t = 2.11
4 0 4
t
t.test(x,mu=1500,alternative="greater")
Figura 24.2: El p-valor corresponde con
el rea sombreada.
##
## One Sample t-test
##
## data: x
## t = 2.107, df = 99, p-value = 0.01882
## alternative hypothesis: true mean is greater than 1500
## 95 percent confidence interval:
## 1510.214 Inf
## sample estimates:
## mean of x
## 1548.188
data(gse21942,package="tamidata")
y = exprs(gse21942)[54651,]
x = pData(gse21942)[,"FactorValue..DISEASE.STATE."]
y0 = y[1:14]
H0 : 6,
H1 : < 6.
n = 14
mu0 = 7
(t0 = (mean(y0) - mu0) / (sd(y0)/sqrt(n)))
## [1] -3.204991
alpha = 0.05
qt(alpha,df=n-1)
## [1] -1.770933
t.test(y0,mu=mu0,alternative="less")
##
## One Sample t-test
##
## data: y0
## t = -3.205, df = 13, p-value = 0.00345
## alternative hypothesis: true mean is less than 7
## 95 percent confidence interval:
## -Inf 6.069111
## sample estimates:
## mean of x
## 4.919546
H0 : = 0 ,
H1 : 6 = 0 .
Ejemplo 51. Seguimos con los datos del ejemplo 50. Nos planteamos saber
Supongamos que nos planteamos contrastar si estamos alrededor de una
contraste de hiptesis 463
t.test(y0,alternative="two.sided",mu=5)
##
## One Sample t-test
##
## data: y0
## t = -0.12394, df = 13, p-value = 0.9033
## alternative hypothesis: true mean is not equal to 5
## 95 percent confidence interval:
## 3.517188 6.321905
## sample estimates:
## mean of x
## 4.919546
Realizamos el contrate.
t.test(y0,alternative="two.sided",mu=7)
##
## One Sample t-test
##
## data: y0
## t = -3.205, df = 13, p-value = 0.006901
## alternative hypothesis: true mean is not equal to 7
## 95 percent confidence interval:
## 3.517188 6.321905
## sample estimates:
## mean of x
## 4.919546
H0 : = 0 ,
H1 : 6 = 0
H0 : = 0 ,
H1 : 6 = 0
Ejemplo 52. Vamos a ilustrar con los datos del ejemplo 50. Recuperamos el
contraste de si la media sobre los individuos enfermos es 5.
t.test(y0,alternative="two.sided",mu=5,conf.level=0.95)
##
## One Sample t-test
##
## data: y0
contraste de hiptesis 465
o bien
= 0,5. (24.12)
Una vez hemos elegido estos valores pi hemos de determinar los
valores de la abscisa y la ordenada del i-simo punto. Si xi con
i = 1, . . . , n son los datos entonces los ordenamos obteniendo los
estadsticos ordenados x(i) que verifican
x (1) . . . x ( n ) .
contraste de hiptesis 467
(a) (b)
(c) (d)
Figura 24.3: Datos x: histograma (a) y
estimador kernel de la densidad de x
(b). Datos y: histograma (c) y estimador
kernel de la densidad de x (d).
468 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
qqnorm(x)
(a) (b)
(c) (d)
Figura 24.4: (a) Dibujo q-q o cuantil-
cuantil para datos x. (b) Dibujo q-q
o cuantil-cuantil para la muestra x
aadiendo la lnea que pasa por el
primer y tercer cuartil. Vemos cmo los
puntos estn muy prximos a la lnea.
No podemos rechazar la normalidad
de los datos utilizando este dibujo. (c)
Dibujo q-q o cuantil-cuantil para datos
y. (d) Dibujo q-q o cuantil-cuantil para
la muestra y aadiendo la lnea que
pasa por el primer y tercer cuartil. Los
puntos estn alejados de la lnea. Parece
razonable rechazar la normalidad de los
datos utilizando este grfico.
470 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
qqnorm(x)
qqline(x)
Estn sobre una lnea recta los puntos en cada una de las grficas?
Podemos ver que para la figura 24.4(b) correspondiente a la muestra x los
datos parecen bien alineados. Esto no parece tan cierto para los datos de la
muestra y que aparecen en la figura 24.4(d). Rechazaramos grficamente
la normalidad de la muestra y mientras que no la rechazaramos para la
muestra x.
En http://en.wikipedia.org/wiki/Q-Q_plot se tiene una explicacin muy
completa de este grfico.
shapiro.test(x)
##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.98985, p-value = 0.4375
shapiro.test(y)
##
## Shapiro-Wilk normality test
contraste de hiptesis 471
##
## data: y
## W = 0.88243, p-value = 2.471e-08
library(nortest)
pearson.test(x)
##
## Pearson chi-square normality test
##
## data: x
## P = 19.134, p-value = 0.08534
Y despus a la muestra y.
pearson.test(y)
##
## Pearson chi-square normality test
##
## data: y
## P = 44.802, p-value = 5.258e-06
lillie.test(x)
##
## Lilliefors (Kolmogorov-Smirnov) normality
472 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## test
##
## data: x
## D = 0.05042, p-value = 0.5533
lillie.test(y)
##
## Lilliefors (Kolmogorov-Smirnov) normality
## test
##
## data: y
## D = 0.13654, p-value = 8.7e-06
25.1 Introduccin
## [1] 25.7 24.1 19.7 22.6 29.0 23.7 22.1 22.4 21.6
## [10] 19.3 25.4 25.7 22.4 22.9 16.7 26.9 22.7 20.4
## [19] 26.3 27.0 25.4 18.6 20.1 22.3 25.6 26.1 23.2
## [28] 23.0 23.6 22.0 24.2 20.7 24.8 21.3 18.1 24.0
## [37] 25.9 20.6 24.9 23.6 24.8 22.7 25.3 26.9 25.0
round(y,1)
## [1] 29.1 31.5 33.9 37.9 29.4 28.9 30.0 30.4 29.8
## [10] 24.2 31.1 21.8 33.4 29.0 38.7 38.2 23.8 35.0
## [19] 26.2 33.7 24.7 34.8 31.3 33.7 31.1 28.5 26.3
## [28] 26.2 33.0 30.1 28.6 29.9 30.9 30.8 32.1 30.7
## [37] 32.9 34.8 27.8 30.0 27.9 34.0 36.4 33.3 27.9
## [46] 30.4 34.6 32.3 30.0 34.9 28.7 25.4 33.5 29.2
mean(x)
## [1] 23.31939
sd(x)
## [1] 2.639521
y para la segunda
mean(y)
## [1] 30.7957
sd(y)
## [1] 3.664954
(a) (b)
(c) (d)
Figura 25.1: Datos x: histograma (a) y
estimador kernel de la densidad de x
(b). Datos y: histograma (c) y estimador
kernel de la densidad de x (d).
476 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
density
x
0.05
hacer.
Cuando comparamos dos poblaciones hay que hacerse varias pre-
guntas y en funcin de las respuestas que obtengamos planteamos la
0.00
comparacin. Son los datos normales? Es la primera pregunta que 20 25 30 35
u
debemos responder: Podemos considerar que los datos proceden
Figura 25.2: Estimadores kernel de
de dos poblaciones normales? De otro modo: la primera muestra la densidad de x e y. Los datos de la
procede de una poblacin normal con media y varianza X y X2 muestra y tienden a tomar valores
mayores que los de x.
desconocidos y la segunda muestra procede de una poblacin nor-
mal con media y varianza Y y Y2 desconocidos? Obviamente esto
supone pasar test de normalidad a nuestros datos. Cada una de las
dos muestras ha de pasar el test de normalidad. Supongamos que
la respuesta es afirmativa. El problema de comparar las poblaciones
se simplifica. Cmo es la densidad de una normal? Si la variable
aleatoria X N ( X , Y2 ) entonces su funcin de densidad es
( x X )2
1 12
2
f (x) = e X (25.1)
2X
t.test(x)$conf.int
y para la segunda
t.test(y)$conf.int
Xn Ym t,1/2 SE( Xn Ym ).
t.test(x,y,var.equal=TRUE)$conf.int
t.test(x,y,var.equal=FALSE)$conf.int
Si asumimos que las dos varianzas son iguales, esto es, asumimos
la hiptesis de que X2 = Y2 , denotaremos por 2 el valor comn:
2 = X2 = Y2 . El valor comn 2 de la varianza se puede estimar con
(n 1)S2X + (m 1)SY2
S2p = .
n+m2
q
1 1
De hecho, lo que tenemos es que SE( Xn Ym ) = S p n + m y
X Y ( X Y )
T= q t n + m 2 , (25.3)
S p n1 + m1
480 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
t.test(x,y,var.equal=TRUE,conf.level=0.95)$conf.int
t.test(x,y,var.equal=TRUE,conf.level=0.99)$conf.int
Ejemplo 57. Con los datos que estamos analizando los intervalos para la
diferencia de medias con niveles de confianza 0,95 y 0,99 son
t.test(x,y,var.equal=FALSE,conf.level=0.95)$conf.int
t.test(x,y,var.equal=FALSE,conf.level=0.99)$conf.int
H0 : X = Y ,
H1 : X 6 = Y .
siendo
X Y
T0 = q , (25.5)
S p n1 + 1
m
p = P( T0 |t0 |)
t.test(x,y,var.equal=TRUE)
##
## Two Sample t-test
##
## data: x and y
## t = -11.431, df = 97, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -8.774380 -6.178249
## sample estimates:
## mean of x mean of y
## 23.31939 30.79570
Vemos que el p-valor 0 es muy pequeo (menor que ) y por ello rechaza-
mos la igualdad de las medias. Qu pasa si no asumimos la igualdad de las
varianzas? Cambia el resultado del test? Para varianzas desiguales:
X Y
T= q 2 2
(25.7)
SX SY
n + m
y
S2X 2
SY
n + m
= .
(S2X /n)2 (SY2 /m)2
n 1 + m 1
El p-valor viene dado por
p = P(| T | t0 )
siendo t0 el valor observado de T en cada caso.
t.test(x,y,var.equal=FALSE)
##
## Welch Two Sample t-test
##
## data: x and y
## t = -11.769, df = 95.121, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -8.737456 -6.215173
## sample estimates:
## mean of x mean of y
## 23.31939 30.79570
comparacin de dos poblaciones 483
H0 : X Y ,
H1 : X > Y .
H0 : X Y ,
H1 : X < Y .
Ejemplo 59. Vamos a comparar las expressiones medias del gen cuyo perfil
aparece en la fila 54651 de la matriz de expresin de tamidata::gse21942. En
principio vamos a suponer que las varianzas de dichas concentraciones las
podemos considerar iguales. Primero leemos los datos.
library(Biobase)
data(gse21942,package="tamidata")
y = exprs(gse21942)[54651,]
x = pData(gse21942)[,"FactorValue..DISEASE.STATE."]
t.test(y~x,var.equal=TRUE)
##
## Two Sample t-test
##
## data: y by x
## t = 6.2573, df = 27, p-value = 1.077e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 2.675284 5.285788
## sample estimates:
## mean in group healthy
## 8.900083
## mean in group multiple sclerosis
## 4.919546
106 menor que 0,01 por lo que rechazamos la hiptesis nula de igualdad de
medias.
Vamos a repetir el estudio sin asumir que la varianza es la misma en las
dos poblaciones.
t.test(y~x,var.equal=TRUE)
##
## Two Sample t-test
##
## data: y by x
## t = 6.2573, df = 27, p-value = 1.077e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 2.675284 5.285788
## sample estimates:
## mean in group healthy
## 8.900083
## mean in group multiple sclerosis
## 4.919546
n = 45
m = 54
x = rnorm(n,mean=23,sd=2.45)
y = rnorm(m,mean=30,sd=3.45)
SY2 /Y2
que tiene una distribucin F (de Fisher) con n 1 y m 1 grados de
libertad. 1.0
funcin de densidad de 2
SY /Y2 aparece en la figura 25.4.
0.5
p = 0,975 entonces el percentil viene dado como 0.0 0.5 1.0 1.5 2.0 2.5
x0
Figura 25.4:
qf(0.975,df1=n-1,df2=m-1)
## [1] 1.75846
SY /Y2
2 es el siguiente:
SY2 SY2
1 1
2
, 2
SX F1/2 (n 1, m 1) SX F/2 (n 1, m 1)
H0 : X2 = Y2 ,
H1 : X2 6= Y2 .
X2
H0 : Y2
= 1,
X2
H1 : Y2
6= 1.
X2
Bajo la hiptesis de que H0 : X2 = Y2 (o H0 : Y2
= 1) tenemos que
S2X
F= F (n 1, m 1) (25.10)
SY2
data(gse21942,package="tamidata")
y = exprs(gse21942)[54651,]
x = pData(gse21942)[,"FactorValue..DISEASE.STATE."]
aggregate(y,by=list(x),FUN=var)
## Group.1 x
## 1 healthy 0.1736921
## 2 multiple sclerosis 5.8991638
var.test(y~x)
##
## F test to compare two variances
##
## data: y by x
comparacin de dos poblaciones 487
cbind(x[1:10],y[1:10])
## [,1] [,2]
## [1,] 31.28980 41.71393
## [2,] 42.09507 25.54655
## [3,] 36.81558 25.01722
## [4,] 39.53321 35.92479
## [5,] 28.73430 29.53908
## [6,] 42.20452 24.25080
## [7,] 32.89147 30.54513
## [8,] 33.81117 22.78581
## [9,] 33.98021 44.18474
## [10,] 26.02762 37.29105
d = x -y
d[1:10]
t.test(d)
##
## One Sample t-test
##
## data: d
## t = -5.9003, df = 144, p-value = 2.484e-08
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -6.008914 -2.993222
## sample estimates:
## mean of x
## -4.501068
comparacin de dos poblaciones 489
t.test(x,y,paired=TRUE)
##
## Paired t-test
##
## data: x and y
## t = -5.9003, df = 144, p-value = 2.484e-08
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -6.008914 -2.993222
## sample estimates:
## mean of the differences
## -4.501068
(x = c(265,240,258,295,251,245,287,314,260,279,283,240,238,225,247))
## [1] 265 240 258 295 251 245 287 314 260 279 283
## [12] 240 238 225 247
(y = c(229,231,227,240,238,241,234,256,247,239,246,218,219,226,233))
## [1] 229 231 227 240 238 241 234 256 247 239 246
## [12] 218 219 226 233
t.test(x,y,paired=T)
##
## Paired t-test
##
## data: x and y
## t = 5.4659, df = 14, p-value = 8.316e-05
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 16.32430 37.40904
490 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## sample estimates:
## mean of the differences
## 26.86667
t.test(x,y,paired=T,alternative = "greater")
##
## Paired t-test
##
## data: x and y
## t = 5.4659, df = 14, p-value = 4.158e-05
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
## 18.20922 Inf
## sample estimates:
## mean of the differences
## 26.86667
0.04
shapiro.test(x)
##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.88231, p-value = 0.0002789
shapiro.test(y)
##
## Shapiro-Wilk normality test
##
## data: y
## W = 0.77716, p-value = 1.211e-07
40
dimiento se dice no paramtrico cuando no asume ningn modelo
Sample Quantiles
particular para los datos. No suponemos que son normales o que
30
son binomiales o que son exponenciales, etc. A veces se les llama de
20
10
|{ xi : xi z}|
0
Fn (z) = . 2 1 0 1 2
n
Theoretical Quantiles
Donde | | denota el cardinal del conjunto. En resumen, Fn (z) est
Figura 25.7: Dibujo q-q de la muestra
contando el nmero de valores en la muestra x que son menores o
y. Vemos que los punto se alejan de la
lnea indicando que no hay normalidad
en los datos.
492 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
1.0
1
0.8
funciones, esto es, el valor del estadstico D. Por la definicin del es-
Proportion <= x
0.6
tadstico D es claro que rechazamos para valores grandes de D. Si d
0.4
es el valor observado entonces el p-valor vendra dado por
0.2
p = P ( D d ),
0.0
2
0 10 20 30 40
donde en la probabilidad anterior asumimos la hiptesis nula.
z
n:99 m:0
Ejemplo 64 (Funcin ks.test). El test de Kolmogorov-Smirnov para dos Figura 25.8: Funciones de distribucin
muestras lo podemos aplicar con la funcin ks.test del siguiente modo: empricas de ambas muestras. Vemos
que la funcin de distribucin de la
segunda muestra (la muestra y indicada
ks.test(x,y) en la grfica con el nmero 2) es mayor
que la funcin de distribucin emprica
## de la primera muestra (muestra x indi-
cada con 1 en la grfica). La longitud de
## Two-sample Kolmogorov-Smirnov test la lnea punteada nos muestra la mxi-
## ma diferencia entre ambas funciones de
distribucin. Esta longitud es el valor
## data: x and y
del estadstico de
## D = 0.33704, p-value = 0.005645
## alternative hypothesis: two-sided
p N ( p, p(1 p)/n).
p p
P Z1/2 p Z1/2 = 1 .
p(1 p)/n
494 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
in=1 Xi
p = .
n
library(Hmisc,T)
binconf(x=189, n=11034, method="asymptotic")
26.1.1 Ejercicios
Ejercicio 12. Para los datos de la tabla 23.1 se pide:
Ejercicio 13. Wilcox [2009, pg. 120, problema 21] Se observan los si-
guientes xitos y fracasos: 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0. Calcule un
intervalo de confianza con nivel 0,95 para la probabilidad de xito p.
Ejercicio 14. Wilcox [2009, pg. 120, problema 22] Teniendo en cuenta los
siguientes resultados para una muestra de una distribucin binomial, calcule
el error estndar de p cuando:
1. n = 25, X = 5.
2. n = 48, X = 12.
3. n = 100, X = 80.
4. n = 300, X = 160.
Ejercicio 15. Wilcox [2009, pg. 120, problema 23] Entre los 100 adultos
seleccionados al azar, 10 se encontraron desempleados. Dar una intervalo de
confianza con un nivel de 0,99 para el porcentaje de adultos desempleados.
Ejercicio 16. Wilcox [2009, pg. 121, problema 31] Una compaa de
cosmticos encontr que 180 de cada 1000 mujeres seleccionadas al azar en
Nueva York han visto el anuncio de televisin de la empresa. Calcule un
intervalo de confianza al 0,95 para el porcentaje de mujeres en la ciudad de
Nueva York que han visto el anuncio.
26.2.1 Ejercicios
Ejercicio 17. Pretendemos estimar la proporcin de palmeras afectadas por
el picudo. Se ha tomado una primera muestra de 100 palmeras al azar. Se
han observado 23 palmeras afectadas. Se pide:
ij = P( X = i, Y = j),
I I
j = P (Y = j ) = P(X = i, Y = j) = ij
i =1 i =1
498 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
P( X = i, Y = j) = P( X = i ) P(Y = j)
esto es
ij = i j .
En particular, la condicionada es igual a la marginal.
j|i = j con j = 1, . . . , J.
Ataque fatal Ataque no fatal No ataque Tabla 26.2: Tabla de contingencia para
X= toma aspirina o placebo (I = 2) e Y
Placebo 18 171 10845 = sufre ataque cardaco o no (J = 2).
Aspirina 5 99 10933
P (Y = 1 | X = i ) = i , (26.4)
P (Y = 2 | X = i ) = 1 i . (26.5)
j|i Test positivo Test negativo Total Tabla 26.5: Distribucin condicionada
estimada de Y a X.
Enfermo n11 /n1 n11 /n1 1
No enfermo n21 /n2 n22 /n2 1
Este cociente de odds (odds ratio en ingls) es muy til como medida
de asociacin en una tabla 2 2. Se comprueba fcilmente3 que 3
Tenemos que
11 22 1 / (1 1 ) 1|1 / (1 1|1 )
= . = = ,
12 21 2 / (1 2 ) 1|2 / (1 1|2 )
(26.6)
Por ello tambin se le llama el cociente de los productos cruzados. El pero j|i = ij /i y sustituyendo se
cociente de los odds tiene las siguientes propiedades: sigue inmediatamente el resultado.
(nt1 )(nn12 t)
p(t) = P(n11 = t) =
(nn1 )
donde los valores posibles son
m n11 m
H0 : = 1
H1 : > 1
Ejemplo 65. Muriel Bristol indic en una ocasin a R.A. Fisher que era
capaz de diferenciar si en un t con leche se haba servido primero el t y
luego la leche o bien primero la leche y luego el t.4 Se realiza la experiencia 4
Realmente Fisher lo comenta en
consistente en darle a probar 8 tazas de t a dicha seora. Ella sabe que hay su libro The Design of Experiments
y ms que probablemente es una
cuatro tazas preparadas en el orden te y luego leche y cuatro tazas prepa- bonita leyenda pero que le da inters al
radas en el orden leche y luego t. Saba esta seora diferenciar el orden o problema.
responda de un modo aleatorio? Este es el problema conocido como la se-
ora probando el t. En la tabla 26.6 mostramos un posible resultado de la
experiencia.
library(Biobase)
data(gse44456,package="tamidata")
Nos fijamos en el gen que ocupa la fila 19254 en la matriz de expresin. Nada de lo que sigue tiene ningn
sentido biolgico. Es simplemente un
y = exprs(gse44456)[19254,] ejemplo para ilustrar.
Qu gen es?
featureNames(gse44456)[19254]
## [1] "8047097"
pacman::p_load("ggplot2")
x = pData(gse44456)[,"pH"]
y = exprs(gse44456)[19254,]
9
df = data.frame(x,y)
ggplot(df,aes(x=x,y=y))+geom_point()
y
tasa de crecimiento.
6.0 6.5
x
in=1 ( xi xn )(yi yn )
r= q q .
in=1 ( xi xn )2 in=1 (yi yn )2
cor(x1,y1)
## [1] 0.8082653
(a) (b)
(c) (d)
Figura 27.3: Ejemplo con fuerte aso-
ciacin lineal: datos (a) y los datos
En la figura 27.3(a) mostramos los datos con fuerte asociacin diferenciando el signo del producto
lineal. Distinguimos por el signo del producto cruzado en la figura cruzado. Las figuras (c) y (d) son los
dibujos anlogos con datos en los que
27.3(b) Vemos cmo hay muchos puntos azules. El nuevo coeficiente apenas hay asociacin lineal entre las
de correlacin lineal de Pearson es abscisas y las ordenadas.
cor(x2,y2)
## [1] 0.9919427
506 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
cor(x3,y3)
## [1] 0.01067839
E( X X )(Y Y ),
1 1.
de modo que
s11 ... s1d
n
. .. .. 1
. = n 1 (yi y)(yi y) .
0
..
S= .
i =1
sd1 ... sdd
508 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
cov(M)
cov(t(M))
cor(M)
cor(t(M))
Y N ( E [Y | x ] , 2 ) . (27.3)
En el modelo de regresin ms simple con el que se trabaja se asume
que la media condicionada E[Y | x ] es una funcin lineal de x, en
otras palabras, se asume que
E[Y | x ] = 0 + 1 x. (27.4)
Y = 0 + 1 x + e, (27.5)
510 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
donde
e N (0, 2 ). (27.6)
En la formulacin de 27.5 expresamos el valor aleatorio de Y como
suma de una parte que sistemticamente depende de x (la componen-
te sistemtica del modelo) y un trmino aleatorio con distribucin
normal, un trmino de error o desajuste del modelo. En esta variable
normal con media cero y varianza constante 2 estamos incluyendo
todas las posibles causas que influyen el valor de Y y que no vienen
dadas por la variable predictora.
No consideramos un solo valor aleatorio de Y dado un valor fijo
de x. Realmente, tenemos n valores observados cuyos valores son
independientes entre s pero no tienen la misma distribucin. Hemos de
pensar que cad a Yi tiene una variable predictora distinta que influye
en la distribucin de Yi . Tenemos pares ( xi , Yi ) donde la xi viene
dada y consideramos la distribucin de Yi condicionada a xi , es decir,
Yi | xi .
Resumiendo, estamos asumiendo que Yi N ( 0 + 1 xi , 2 ) y que
los distintos Yi son independientes entre si. Utilizando propiedades
de la distribucin normal multivariante tenemos que estas hiptesis
las podemos expresar conjuntamente diciendo que
Y Nn ( X, 2 Inn ), (27.7)
donde
Y1 1 x1 " #
. . .. 0
..
Y= X = .. . =
1
Yn 1 xn
Si consideramos que
e1
.
e = ..
en
Y = X + e, (27.8)
Y = f ( x1 , . . . , xn ) + e, (27.9)
Y = X + e. (27.10)
(y X)0 (y X) = y0 y 20 X 0 y + + 0 X 0 X.
X 0 X = X 0 y. (27.12)
X = X ( X 0 X )1 X 0 y = Hy. (27.14)
y = Hy = X . (27.15)
Tambin tenemos los residuos, esto es, las diferencias entre los va-
lores observados originalmente y las predicciones que de ellos ha-
cemos. Los residuos en trminos de la matriz H vienen dados por
e = y Hy = ( I H )y. (27.16)
Finalmente, hemos determinado los coeficientes que nos minimiza-
ban la suma de cuadrados. El valor mnimo que hemos obtenido que
recibe el nombre de suma de cuadrados residual o suma de cuadra-
dos del error que viene dada por
n
SS( Error ) = (yi yi )2 , (27.17)
i =1
e0 e = y0 ( I H )( I H )y = y0 ( I H )y. (27.18)
1 x1 x
. ..
X = ..
.
1 xn x
con
" #
0 n 0
XX= n
0 i=1 ( xi x )2
Finalmente se comprueba sin dificultad que
in=1 ( xi x )yi
= (27.24)
in=1 ( xi x )2
514 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
27.7 Verosimilitud
y la logverosimilitud sera
n 1
l ( , ) = log(2 ) n log 2 (y X)0 (y X). (27.26)
2 2
El estimador mximo verosmil de se obtiene maximizando cual-
quiera de las dos funciones anteriores. Es obvio que el mximo res-
pecto de se obtiene como el valor que minimiza (y X)0 (y X),
en definitiva, que los estimadores mximo verosmiles no son ms
que los estimadores mnimo cuadrticos.
E = ( X 0 X )1 X 0 ( EY ) = , (27.27)
var ( ) = ( X 0 X )1 X 0 (2 I ) X ( X 0 X )1 = ( X 0 X )1 2 . (27.28)
c ( ) = ( X 0 X )1 2 .
var (27.31)
c ( i ) = aii .
SE (27.32)
Np ( , ( X 0 X )1 2 ). (27.33)
SS( Error ) pequeo en relacin con SS( Total ). Esa es la idea del coefi-
ciente de determinacin. Toma valores entre 0 y 1 y cuanto ms cerca
de 1 mejor es el ajuste.
Tiene un pequeo inconveniente y es que no tiene en cuenta el n-
mero de variables predictoras que estamos utilizando para predecir
la variable respuesta. Una pequea modificacin de R2 para incorpo-
rar esta informacin es el coeficiente de determinacin ajustado que
podemos denotar R2 -ajustado y se define como
in=1 (yi yi )2 /(n p)
R2 ajustado = 1 , (27.36)
in=1 (yi y)2 /(n 1)
donde suponemos que tenemos p 1 variables predictoras.
Ejemplo 68. Los datos que vamos a utilizar para valorar las hiptesis del
modelo son los datos tamidata::gse44456. Se pretende estudiar la relacin
que liga el nivel de expresin observado del gen el pH. El siguiente diagrama
de puntos muestra en abscisas las predicciones y en ordenadas los residuos.
No parece en principio que no podamos asumir una varianza constante.
y = exprs(gse44456)[19254,]
x = pData(gse44456)[,"pH"]
gse44456_19254 = data.frame(y,x)
GSM1085669_HE32H006_2_.CEL
Notemos que elegimos el primer dibujo (figura 27.5).
0.5
Residuals
plot(gen19254.lm, which = 1)
0.0
0.5
par(mfrow=c(2,2))
for(i in 1:4)
plot(1:50,rnorm(50))
par(mfrow=c(1,1))
rnorm(50)
rnorm(50)
2
1
0
3
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
rnorm(50)
rnorm(50)
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
par(mfrow=c(2,2))
for(i in 1:4)
plot(1:50,(1:50)*rnorm(50))
par(mfrow=c(1,1))
modelos lineales 519
par(mfrow=c(2,2))
for(i in 1:4)
plot(1:50,(1:50)*rnorm(50))
par(mfrow=c(1,1))
(1:50) * rnorm(50)
(1:50) * rnorm(50)
50
50
0
50
100
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
(1:50) * rnorm(50)
(1:50) * rnorm(50)
50
50
50
50
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
En la figura 27.8 los valores por los que multiplicamos son 1, 2, 3, . . . , 50
por lo que las varianzas se incrementan mucho menos de una abscisa a la si-
guiente.
par(mfrow=c(2,2))
for(i in 1:4)
plot(1:50,sqrt((1:50))*rnorm(50))
par(mfrow=c(1,1))
sqrt((1:50)) * rnorm(50)
sqrt((1:50)) * rnorm(50)
0 5
5
10
5
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
sqrt((1:50)) * rnorm(50)
sqrt((1:50)) * rnorm(50)
20
20
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
27.10.2 Normalidad
La siguiente hiptesis a valorar es la normalidad de los errores. La
herramienta grfica ms habitual es el dibujo q-q o la representacin
modelos lineales 521
par(mfrow=c(2,2))
for(i in 1:4)
plot(1:50,cos((1:50)*pi/25)+rnorm(50))
par(mfrow=c(1,1))
cos((1:50) * pi/25) + rnorm(50)
0 1 2
2
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
cos((1:50) * pi/25) + rnorm(50)
0 10 20 30 40 50 0 10 20 30 40 50
1:50 1:50
plot.lm).
Standardized residuals
1
plot(gen19254.lm,which=2)
0
En la figura 27.11 aparece un dibujo q-q utilizando las funciones qq-
1
norm que construye el dibujo y qqline que aade una lnea uniendo el
GSM1085680_HE32H017.CEL
GSM1085673_HE32H010.CEL
2
primer y tercer cuartil. Como vemos es el mismo dibujo.
2 1 0 1 2
Theoretical Quantiles
qqnorm(residuals(gen19254.lm),ylab="Residuos") lm(y ~ x)
Normal QQ Plot
Hemos visto cmo es una dibujo q-q cuando tenemos normalidad.
sante saber qu tenemos que buscar para detectar que los residuos no
0.5
siguen una distribucin normal.
Residuos
0.0
Ejemplo 71 (Dibujos cuantil-cuantil y error no normal). Veamos c-
densidad de una Cauchy y la densidad uniforme. La lognormal se toma como Figura 27.11: Dibujo cuantil-cuantil
ejemplo de distribucin asimtrica, la Cauchy como ejemplo de una distribu- utilizando qqnorm y qqline.
cin con las colas ms largas que la normal y finalmente la uniforme como
ejemplo de distribucin con las colas ms cortas. Las funciones de densidad
correspondientes aparecen en la figura 27.12.
par(mfrow=c(2,2))
curve(dnorm,xlim=c(-3,3))
curve(dlnorm,xlim=c(-3,3))
curve(dcauchy,xlim=c(-3,3))
curve(dunif,xlim=c(-3,3))
par(mfrow=c(1,1))
En la figura 27.13 tenemos nueve dibujos q-q realizados con datos simu-
lados con una distribucin normal.
modelos lineales 523
0.4
0.6
dlnorm(x)
dnorm(x)
0.2
0.3
0.0
0.0
3 1 1 2 3 3 1 1 2 3
x x
0.8
dcauchy(x)
dunif(x)
0.20
0.4
0.05
0.0
3 1 1 2 3 3 1 1 2 3
x x
par(mfrow=c(2,2))
for(i in 1:4){
residuos = rnorm(50)
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
par(mfrow=c(2,2))
for(i in 1:4){
residuos = exp(rnorm(50))
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
La figura 27.15 que sigue muestra el dibujo q-q con datos simulados
correspondientes a la distribucin de Cauchy.
par(mfrow=c(2,2))
for(i in 1:4){
residuos = rcauchy(50)
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
La figura 27.16 que sigue muestra el dibujo q-q con datos simulados
correspondientes a la distribucin de uniforme.
par(mfrow=c(2,2))
for(i in 1:4){
residuos = runif(50)
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
modelos lineales 525
par(mfrow=c(2,2))
for(i in 1:4){
residuos = exp(rnorm(50))
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
Sample Quantiles
6
20
4
10
2
0
2 1 0 1 2 2 1 0 1 2
Sample Quantiles
12
8
6
0
0
2 1 0 1 2 2 1 0 1 2
par(mfrow=c(2,2))
for(i in 1:4){
residuos = rcauchy(50)
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
Sample Quantiles
100
200
250
2 1 0 1 2 2 1 0 1 2
Sample Quantiles
6
0 50
100
2 1 0 1 2 2 1 0 1 2
par(mfrow=c(2,2))
for(i in 1:4){
residuos = runif(50)
qqnorm(residuos)
qqline(residuos)
}
par(mfrow=c(1,1))
Sample Quantiles
0.8
0.6
0.4
0.2
0.0
2 1 0 1 2 2 1 0 1 2
Sample Quantiles
0.8
0.8
0.4
0.4
0.0
0.0
2 1 0 1 2 2 1 0 1 2
residuals(gen19254.lm)
## GSM1085665_HE32H001.CEL
## 0.316153338
## GSM1085666_HE32H003.CEL
## -0.016496827
## GSM1085667_HE32H004.CEL
## 0.077921038
## GSM1085668_HE32H005.CEL
## 0.273487578
## GSM1085669_HE32H006_2_.CEL
## 0.855981227
## GSM1085670_HE32H007_2_.CEL
## -0.709695981
## GSM1085671_HE32H008_2_.CEL
## 0.638497262
## GSM1085672_HE32H009_2_.CEL
## 0.708149642
## GSM1085673_HE32H010.CEL
## -0.749190154
## GSM1085674_HE32H011.CEL
## -0.034629738
## GSM1085675_HE32H012.CEL
## 0.726505580
## GSM1085676_HE32H013.CEL
modelos lineales 529
## -0.040310174
## GSM1085677_HE32H014.CEL
## 0.094153977
## GSM1085678_HE32H015.CEL
## -0.711991774
## GSM1085679_HE32H016.CEL
## -0.005307323
## GSM1085680_HE32H017.CEL
## -0.748155752
## GSM1085681_HE32H018_2_.CEL
## -0.064211086
## GSM1085682_HE32H019_2_.CEL
## -0.191618023
## GSM1085683_HE32H020.CEL
## -0.196903872
## GSM1085684_HE32H021.CEL
## -0.321555555
## GSM1085685_HE32H022.CEL
## 0.290610697
## GSM1085686_HE32H023_2_.CEL
## -0.186008687
## GSM1085687_HE32H024.CEL
## 0.035029774
## GSM1085688_HE32H025_2_.CEL
## 0.268713924
## GSM1085689_HE32H026_2_.CEL
## -0.226979003
## _
GSM1085690 HE32H027.CEL
## -0.131796218
## GSM1085691 HE32H028_2_.CEL
_
## 0.162000049
## _
GSM1085692 HE32H029.CEL
## 0.330689786
## _
GSM1085693 HE32H030.CEL
## 0.118498547
## _
GSM1085694 HE32H031.CEL
## -0.598311716
## _
GSM1085695 HE32H032.CEL
## -0.226340341
## GSM1085696 HE32H033_2_.CEL
_
## -0.080319741
## _
GSM1085697 HE32H034.CEL
## 0.255427608
530 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## GSM1085698_HE32H035.CEL
## -0.250119813
## GSM1085699 HE32H036_2_.CEL
_
## -0.138569138
## _
GSM1085700 HE32H037.CEL
## 0.481553235
## _
GSM1085701 HE32H038.CEL
## -0.149409586
## _
GSM1085702 HE32H039.CEL
## 0.070360861
## _
GSM1085703 HE32H040.CEL
## 0.074186375
shapiro.test(residuals(gen19254.lm))
##
## Shapiro-Wilk normality test
##
## data: residuals(gen19254.lm)
## W = 0.96264, p-value = 0.2182
library(lmtest)
dwtest(gen19254.lm)
##
modelos lineales 531
## Durbin-Watson test
##
## data: gen19254.lm
## DW = 2.3323, p-value = 0.8575
## alternative hypothesis: true autocorrelation is greater than 0
gen19254.inf = influence(gen19254.lm)
gen19254.inf$hat
## GSM1085665_HE32H001.CEL
## 0.02890237
## GSM1085666_HE32H003.CEL
## 0.31508019
## GSM1085667_HE32H004.CEL
## 0.03777124
## GSM1085668_HE32H005.CEL
## 0.02890237
## GSM1085669_HE32H006_2_.CEL
## 0.02611433
## GSM1085670_HE32H007_2_.CEL
## 0.02769529
## GSM1085671_HE32H008_2_.CEL
532 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## 0.03487370
## GSM1085672_HE32H009_2_.CEL
## 0.02602086
## GSM1085673_HE32H010.CEL
## 0.05834508
## GSM1085674_HE32H011.CEL
## 0.02661906
## GSM1085675_HE32H012.CEL
## 0.04450100
## GSM1085676_HE32H013.CEL
## 0.04787656
## GSM1085677_HE32H014.CEL
## 0.03858308
## GSM1085678_HE32H015.CEL
## 0.03274795
## GSM1085679_HE32H016.CEL
## 0.03419004
## GSM1085680_HE32H017.CEL
## 0.02864867
## GSM1085681_HE32H018_2_.CEL
## 0.02864867
## GSM1085682_HE32H019_2_.CEL
## 0.06274613
## GSM1085683_HE32H020.CEL
## 0.07140670
## GSM1085684_HE32H021.CEL
## 0.09191645
## _
GSM1085685 HE32H022.CEL
## 0.03214975
## GSM1085686 HE32H023_2_.CEL
_
## 0.04512858
## _
GSM1085687 HE32H024.CEL
## 0.04855755
## GSM1085688 HE32H025_2_.CEL
_
## 0.02961007
## GSM1085689 HE32H026_2_.CEL
_
## 0.04680835
## _
GSM1085690 HE32H027.CEL
## 0.05037619
## GSM1085691 HE32H028_2_.CEL
_
## 0.02565767
## _
GSM1085692 HE32H029.CEL
## 0.02961007
modelos lineales 533
## GSM1085693_HE32H030.CEL
## 0.02961007
## _
GSM1085694 HE32H031.CEL
## 0.05546090
## _
GSM1085695 HE32H032.CEL
## 0.11004675
## GSM1085696 HE32H033_2_.CEL
_
## 0.03858308
## _
GSM1085697 HE32H034.CEL
## 0.03313518
## _
GSM1085698 HE32H035.CEL
## 0.07658755
## GSM1085699 HE32H036_2_.CEL
_
## 0.09191645
## _
GSM1085700 HE32H037.CEL
## 0.02602086
## _
GSM1085701 HE32H038.CEL
## 0.05346066 plot(gen19254.lm, which = 5)
## _
GSM1085702 HE32H039.CEL
## 0.05037619 Residuals vs Leverage
## _
GSM1085703 HE32H040.CEL
1
2
GSM1085675_HE32H012.CEL
## 0.03531434
0.5
Standardized residuals
1
Y las representamos en la figura 27.17.
0
Otra posibilidad es para encontrar observaciones anmalas consis-
1
te en trabajar con los residuos estudentizados. Veamos su definicin. GSM1085694_HE32H031.CEL
0.5
GSM1085673_HE32H010.CEL
1
Cook's distance
Estos son los residuos estudentizados. Si el modelo que asumimos Figura 27.17: Influencias para el ajuste
gen19254.lm.
es correcto entonces la varianza de estos residuos es uno y son apro-
ximadamente incorrelados. Notemos que la estudentizacin corrige
las varianzas desiguales de los residuos cuando las varianzas de los
errores son iguales entre si. En otro caso esto no es cierto. Si las va-
rianzas de los errores no son iguales (tenemos heterocedasticidad)
entonces la estudentizacin no hace homogneas las varianzas de los
residuos. Algunos autores (y programas) tienden a usar en lugar de
los residuos originales, los residuos estudentizados.
Una observacin anmala es una observacin que no se ajusta a
nuestro modelo. Hemos de protegernos frente a este tipo de puntos.
Un test para observaciones anmalas es til si nos permite distin-
guir entre observaciones que son realmente anmala y aquellas que
simplemente tienen un residuo grande aunque no excepcionalmente
grande.
534 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
yi y(i) yi y(i)
ti = q = q t n p 1 ,
c (yi y(i) )
var (i) 1 + xi0 ( X(0 i) X(i) )1 xi
Puesto que cada uno de los ti sigue una distribucin conocida po-
demos contrastar si tenemos una observacin anmala. En prin-
cipio el procedimiento sera simplemente fijar un nivel de signifi-
cacin y determinar el percentil 1 2 de una distribucin t de
Student con n p 1 grados de libertad. Si denotamos el percen-
til como tn p1,1 entonces residuos que no estn en el intervalo
2
[tn p1,1 2 , tn p1,1 2 ] seran sospechosos. Esto no es adecua-
do. Porque estamos analizando n residuos estudentizados. Con uno
slo s que sera aplicable el razonamiento. Tenemos un problema
de muchos tests simultneamente considerados. Si aplicamos la
correccin de Bonferroni tendramos que corregir el nivel de signi-
ficacin y trabajar con /n. Por tanto, consideramos como sospe-
chosos aquellos residuos estandarizados que estn fuera del intervalo
[tn p1,1 , tn p1,1 ].
2n 2n
gen19254.rs = rstudent(gen19254.lm)
## GSM1085665_HE32H001.CEL
## FALSE
## GSM1085666_HE32H003.CEL
## FALSE
## GSM1085667_HE32H004.CEL
## FALSE
## GSM1085668_HE32H005.CEL
## FALSE
## GSM1085669_HE32H006_2_.CEL
## FALSE
## GSM1085670_HE32H007_2_.CEL
## FALSE
## GSM1085671_HE32H008_2_.CEL
## FALSE
## GSM1085672_HE32H009_2_.CEL
## FALSE
## _
GSM1085673 HE32H010.CEL
## FALSE
## _
GSM1085674 HE32H011.CEL
## FALSE
## _
GSM1085675 HE32H012.CEL
## FALSE
## _
GSM1085676 HE32H013.CEL
## FALSE
## _
GSM1085677 HE32H014.CEL
## FALSE
## _
GSM1085678 HE32H015.CEL
## FALSE
## _
GSM1085679 HE32H016.CEL
## FALSE
## _
GSM1085680 HE32H017.CEL
## FALSE
## GSM1085681 HE32H018 2_.CEL
_ _
## FALSE
## GSM1085682 HE32H019 2_.CEL
_ _
## FALSE
## _
GSM1085683 HE32H020.CEL
## FALSE
## _
GSM1085684 HE32H021.CEL
## FALSE
## _
GSM1085685 HE32H022.CEL
## FALSE
536 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## GSM1085686_HE32H023_2_.CEL
## FALSE
## _
GSM1085687 HE32H024.CEL
## FALSE
## GSM1085688 HE32H025 2_.CEL
_ _
## FALSE
## GSM1085689 HE32H026 2_.CEL
_ _
## FALSE
## _
GSM1085690 HE32H027.CEL
## FALSE
## GSM1085691 HE32H028 2_.CEL
_ _
## FALSE
## _
GSM1085692 HE32H029.CEL
## FALSE
## _
GSM1085693 HE32H030.CEL
## FALSE
## _
GSM1085694 HE32H031.CEL
## FALSE
## _
GSM1085695 HE32H032.CEL
## FALSE
## GSM1085696 HE32H033 2_.CEL
_ _
## FALSE
## _
GSM1085697 HE32H034.CEL
## FALSE
## _
GSM1085698 HE32H035.CEL
## FALSE
## GSM1085699_HE32H036_2_.CEL
## FALSE
## GSM1085700_HE32H037.CEL
## FALSE
## GSM1085701_HE32H038.CEL
## FALSE
## GSM1085702_HE32H039.CEL
## FALSE
## GSM1085703_HE32H040.CEL
## FALSE
como
(yi y(i) )0 (yi y(i) ) 1 hi
Di = 2
= ri2 . (27.41) plot(gen19254.lm, which = 4)
p p 1 hi
Ejemplo 76. Con los datos gen19254 representamos las distancias de Cook
Cook's distance
y las obtenemos utilizando la funcin Cooks.distance. Lo tenemos en la
figura 27.18.
Tambin podemos ver los valores de la distancia de Cook.
Cook's distance
GSM1085675_HE32H012.CEL
GSM1085694_HE32H031.CEL
cooks.distance(gen19254.lm)
## GSM1085665_HE32H001.CEL
## 9.580454e-03 0 10 20 30 40
## GSM1085682_HE32H019_2_.CEL
## 8.202157e-03
## _
GSM1085683 HE32H020.CEL
## 1.004105e-02
## _
GSM1085684 HE32H021.CEL
## 3.604429e-02
## _
GSM1085685 HE32H022.CEL
## 9.064990e-03
## GSM1085686 HE32H023_2_.CEL
_
## 5.355637e-03
## _
GSM1085687 HE32H024.CEL
## 2.058492e-04
## GSM1085688 HE32H025_2_.CEL
_
## 7.100844e-03
## GSM1085689 HE32H026_2_.CEL
_
## 8.300745e-03
## _
GSM1085690 HE32H027.CEL
## 3.034666e-03
## GSM1085691 HE32H028_2_.CEL
_
## 2.218233e-03
## _
GSM1085692 HE32H029.CEL
## 1.075403e-02
## _
GSM1085693 HE32H030.CEL
## 1.380879e-03
## _
GSM1085694 HE32H031.CEL
## 6.959610e-02
## GSM1085695_HE32H032.CEL
## 2.226125e-02
## GSM1085696_HE32H033_2_.CEL
## 8.421721e-04
## GSM1085697_HE32H034.CEL
## 7.232298e-03
## GSM1085698_HE32H035.CEL
## 1.757299e-02
## GSM1085699_HE32H036_2_.CEL
## 6.693566e-03
## GSM1085700_HE32H037.CEL
## 1.989270e-02
## GSM1085701_HE32H038.CEL
## 4.165785e-03
## GSM1085702_HE32H039.CEL
## 8.649028e-04
## GSM1085703_HE32H040.CEL
modelos lineales 539
## 6.531465e-04
siendo L( , ) = 1
n exp{ 21 2 (y X)0 (y X)}, 0 =
(2 ) 2 n
{( , ) R p (0, +) : i1 = . . . = ir = 0} y = R p (0, +).
Como es habitual en un test del cociente de verosimilitudes recha-
zaramos la hiptesis nula si es pequeo (menor que una cierta
constante) que se prueba es equivalente a que
SS( Error )0 SS( Error )
SS( Error )
sea grande (mayor que una cierta constante). Denotamos por SS( Error )0
la suma de cuadrados del error bajo la hiptesis nula y SS( Error ) la
suma de cuadrados sobre todo el espacio paramtrico. Bajo la hipte-
sis nula se verifica que
SS( Error )0 SS( Error )
2r
2 r
y
SS( Error )
2n p
2 ( n p )
adems ambas cantidades son independientes. Por ello se verifica que
(SS( Error )0 SS( Error ) )/r
F= Fr,n p .
(SS( Error ) )/(n p)
540 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
F = t2i .
o bien si
F = t2i > F1,n p,1 .
2
summary(gen19254.lm)
##
## Call:
## lm(formula = y ~ x, data = gse44456_19254)
##
## Residuals:
modelos lineales 541
i tn p,1 SE( i ).
2
confint(gen19254.lm)
## 2.5 % 97.5 %
## (Intercept) -6.416593 -0.2121019
## x 1.431029 2.3857477
E[Y | x0 ] = x00 .
x00 ,
c ( x00 ) = x00 ( X 0 X )1 x0 2 .
var
x00
var ( x00 ) + 2
Ejemplo 79. Con los datos gen19254 consideramos cmo obtener las
predicciones, intervalos de confianza para las medias y para las predicciones.
Utilizamos los propios datos que se han utilizado para ajustar el modelo.
Con la funcin predict obtenemos las predicciones as como los intervalos
de confianza para las medias de las predicciones (predict con la opcin
interval=confidence) y los intervalos de confianza para las observaciones
(predict con la opcin interval="prediction").
Primero obtengamos las predicciones para los propios datos.
predict(gen19254.lm)
## GSM1085665_HE32H001.CEL
## 9.261931
## _
GSM1085666 HE32H003.CEL
## 7.334459
## _
GSM1085667 HE32H004.CEL
## 9.433686
modelos lineales 543
## GSM1085668_HE32H005.CEL
## 9.261931
## GSM1085669 HE32H006_2_.CEL
_
## 9.147428
## GSM1085670 HE32H007_2_.CEL
_
## 9.223763
## GSM1085671 HE32H008_2_.CEL
_
## 8.765750
## GSM1085672 HE32H009_2_.CEL
_
## 9.013840
## _
GSM1085673 HE32H010.CEL
## 9.662692
## _
GSM1085674 HE32H011.CEL
## 8.975673
## _
GSM1085675 HE32H012.CEL
## 8.632163
## _
GSM1085676 HE32H013.CEL
## 8.593995
## _
GSM1085677 HE32H014.CEL
## 8.708498
## _
GSM1085678 HE32H015.CEL
## 8.803918
## _
GSM1085679 HE32H016.CEL
## 9.376434
## _
GSM1085680 HE32H017.CEL
## 8.899337
## GSM1085681_HE32H018_2_.CEL
## 8.899337
## GSM1085682_HE32H019_2_.CEL
## 9.700860
## GSM1085683_HE32H020.CEL
## 8.384072
## GSM1085684_HE32H021.CEL
## 9.910783
## GSM1085685_HE32H022.CEL
## 9.338266
## GSM1085686_HE32H023_2_.CEL
## 9.529105
## GSM1085687_HE32H024.CEL
## 9.567273
## GSM1085688_HE32H025_2_.CEL
## 9.281015
## GSM1085689_HE32H026_2_.CEL
544 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
## 9.548189
## GSM1085690_HE32H027.CEL
## 9.586357
## GSM1085691_HE32H028_2_.CEL
## 9.090176
## GSM1085692_HE32H029.CEL
## 9.281015
## GSM1085693_HE32H030.CEL
## 9.281015
## GSM1085694_HE32H031.CEL
## 8.517659
## GSM1085695_HE32H032.CEL
## 8.135982
## GSM1085696_HE32H033_2_.CEL
## 8.708498
## GSM1085697_HE32H034.CEL
## 9.357350
## GSM1085698_HE32H035.CEL
## 8.345904
## GSM1085699_HE32H036_2_.CEL
## 9.910783
## GSM1085700_HE32H037.CEL
## 9.013840
## GSM1085701_HE32H038.CEL
## 8.536743
## GSM1085702_HE32H039.CEL
## 9.586357
## _
GSM1085703 HE32H040.CEL
## 9.395518
## fit lwr
## GSM1085665_HE32H001.CEL 9.261931 9.124197
## GSM1085666_HE32H003.CEL 7.334459 6.879696
## GSM1085667_HE32H004.CEL 9.433686 9.276231
## GSM1085668_HE32H005.CEL 9.261931 9.124197
## GSM1085669_HE32H006_2_.CEL 9.147428 9.016505
## GSM1085670_HE32H007_2_.CEL 9.223763 9.088936
## GSM1085671_HE32H008_2_.CEL 8.765750 8.614455
## GSM1085672_HE32H009_2_.CEL 9.013840 8.883153
## GSM1085673_HE32H010.CEL 9.662692 9.466999
modelos lineales 545
## GSM1085677_HE32H014.CEL 8.867636
## GSM1085678_HE32H015.CEL 8.950529
## GSM1085679_HE32H016.CEL 9.526238
## GSM1085680_HE32H017.CEL 9.036465
## GSM1085681_HE32H018_2_.CEL 9.036465
## GSM1085682_HE32H019_2_.CEL 9.903800
## GSM1085683_HE32H020.CEL 8.600565
## GSM1085684_HE32H021.CEL 10.156407
## GSM1085685_HE32H022.CEL 9.483532
## GSM1085686_HE32H023_2_.CEL 9.701213
## GSM1085687_HE32H024.CEL 9.745799
## GSM1085688_HE32H025_2_.CEL 9.420425
## GSM1085689_HE32H026_2_.CEL 9.723470
## GSM1085690_HE32H027.CEL 9.768196
## GSM1085691_HE32H028_2_.CEL 9.219948
## GSM1085692_HE32H029.CEL 9.420425
## GSM1085693_HE32H030.CEL 9.420425
## GSM1085694_HE32H031.CEL 8.708455
## GSM1085695_HE32H032.CEL 8.404741
## GSM1085696_HE32H033_2_.CEL 8.867636
## GSM1085697_HE32H034.CEL 9.504825
## GSM1085698_HE32H035.CEL 8.570114
_ _ _
## GSM1085699 HE32H036 2 .CEL 10.156407
## GSM1085700_HE32H037.CEL 9.144528
## GSM1085701_HE32H038.CEL 8.724066
## GSM1085702_HE32H039.CEL 9.768196
## GSM1085703_HE32H040.CEL 9.547765
## fit lwr
## GSM1085665_HE32H001.CEL 9.261931 8.440140
## GSM1085666_HE32H003.CEL 7.334459 6.405385
## GSM1085667_HE32H004.CEL 9.433686 8.608361
## GSM1085668_HE32H005.CEL 9.261931 8.440140
_ _ _
## GSM1085669 HE32H006 2 .CEL 9.147428 8.326751
## GSM1085670_HE32H007_2_.CEL 9.223763 8.402454
## GSM1085671_HE32H008_2_.CEL 8.765750 7.941578
## GSM1085672_HE32H009_2_.CEL 9.013840 8.193201
modelos lineales 547
## GSM1085676_HE32H013.CEL 9.423329
## GSM1085677_HE32H014.CEL 9.534146
## GSM1085678_HE32H015.CEL 9.627243
## GSM1085679_HE32H016.CEL 10.200334
## GSM1085680_HE32H017.CEL 9.721027
## GSM1085681_HE32H018_2_.CEL 9.721027
## GSM1085682_HE32H019_2_.CEL 10.536057
## GSM1085683_HE32H020.CEL 9.222666
_
## GSM1085684 HE32H021.CEL 10.757365
## GSM1085685_HE32H022.CEL 10.161353
_ _ _
## GSM1085686 HE32H023 2 .CEL 10.357351
## GSM1085687_HE32H024.CEL 10.396876
## GSM1085688_HE32H025_2_.CEL 10.103088
## GSM1085689_HE32H026_2_.CEL 10.377100
## GSM1085690_HE32H027.CEL 10.416679
## GSM1085691_HE32H028_2_.CEL 9.910670
## GSM1085692_HE32H029.CEL 10.103088
## GSM1085693_HE32H030.CEL 10.103088
## GSM1085694_HE32H031.CEL 9.349989
## GSM1085695_HE32H032.CEL 8.989563
_ _ _
## GSM1085696 HE32H033 2 .CEL 9.534146
## GSM1085697_HE32H034.CEL 10.180830
_
## GSM1085698 HE32H035.CEL 9.186523
## GSM1085699_HE32H036_2_.CEL 10.757365
## GSM1085700_HE32H037.CEL 9.834480
## GSM1085701_HE32H038.CEL 9.368284
## GSM1085702_HE32H039.CEL 10.416679
## GSM1085703_HE32H040.CEL 10.219866
library(MASS)
stepAIC(gen19254.lm)
## Start: AIC=-69.55
## y ~ x
##
## Df Sum of Sq RSS AIC
## <none> 5.9155 -69.554
## - x 1 10.49 16.4058 -31.771
##
## Call:
## lm(formula = y ~ x, data = gse44456_19254)
##
## Coefficients:
## (Intercept) x
## -3.314 1.908
28.1 Verosimilitud
n1 r
L(; n) = (1 ) n r
r1
conceptos fundamentales de estadstica 553
28.2 Estimacin
MSE() = E[ ]2 = E[ + ]2 = E[ ]2 + [ ]2
(28.5)
La diferencia entre la media del estimador y el parmetro, ,
recibe el nombre de sesgo. Finalmente lo que nos dice la ecuacin an-
terior es que el error cuadrtico medio MSE() lo podemos expresar
como la suma de la varianza del estimador, E[ ]2 , ms el sesgo
al cuadrado, [ ]2 .
A la raz cuadrada de la varianza de un estimador, es decir, a su
desviacin tpica o estndar se le llama error estndar. La expresin
error estndar se usa en ocasiones indistintamente para referirse o
bien dicha desviacin tpica o bien al estimador de la misma.
n
E (Yi Y )2 =
i =1
n n
E [(Yi ) (Y )2 )]2 = E(Yi )2 nE(Y )2 , (28.8)
i =1 i =1
de donde,
n
1
n 1 i
ES2 = E (Yi Y )2 = 2 ,
=1
de modo que
S11 ... S1d
n
= 1 (Yi Y )(Yi Y )0 = 1 Q.
. .. ..
S = ..
. . n 1 i =1 n1
Sd1 ... Sdd
= f ( ). (28.13)
2
l ( )
E (28.14)
j k
p (1 p )
En consecuencia asintticamente p tiene varianza n lo cual era
de prever pues si consideramos la variable Y que nos da el nmero
de xitos entonces sabemos que EY = np y que var (Y ) = np(1 p).
H0 : 0 (28.19)
H1 : 1 (28.20)
H0 H1
Rechazamos H0 Error tipo I
No rechazamos H0 Error tipo II
H0 : = 0 , (28.22)
H1 : 6= 0 . (28.23)
in=1 ( Xi X )2
Siendo S2 = n 1 , el estadstico habitualmente utilizado es el
siguiente
X 0
.
T=
S/ n
Bajo la hiptesis nula este estadstico sigue una distribucin t de
Student con n 1 grados de libertad,
T t ( n 1).
| T | > tn1,1 2 .
L0
2 log = 2 log = 2 ( l0 l1 ) (28.25)
L1
H0 : = 0 , (28.26)
H1 : 6= 0 . (28.27)
0
z= (28.28)
SE( )
Xn
t n 1 . (28.30)
S/ n
X
Vemos cmo S/n n depende tanto de la muestra que conocemos como de un
parmetro (la media ) que desconocemos. Fijamos un valor de (habitual-
mente tomaremos = 0,05) y elegimos un valor tn1,1/2 tal que
Xn
P(tn1,1/2 tn1,1/2 ) = 1 . (28.31)
S/ n
S S
P( Xn tn1,1/2 Xn + tn1,1/2 ) = 1 . (28.32)
n n
| 0 |
{ 0 : < Z1/2 } (28.34)
SE( )
i = j xij , con i = 1, . . . , n,
j
i = xi0
i = g ( i )
O lo que es lo mismo
g ( i ) = j xij
j
para i = 1, . . . , n.
En el siguiente ejemplo consideramos el caso de respuesta binaria.
Ejemplo 88 (Modelos logit binomiales para datos binarios). Tenemos
respuesta binaria (xito como 1 y fracaso como 0), esto es, Y Bi (1, ).
f ( y | ) = y (1 )1 y =
(1 )[/(1 )]y = (1 ) exp y log
1
modelos lineales generalizados 565
e y 1
f (y; ) = = e ey log ,
y! y!
Q() = log(),
29.2 Desviacin
= y.
= (1) (0)
Suponemos que
ij = i j
siendo i , j 0 tales que i i = 1 y j j = 1.
i es el parmetro natural.
( y )2
1 y e /y! (ny)( n )(1 n )ny
f (y) exp( 22
)
2
log log(/(n ))
2 1 1
a()
2
b( ) 2 exp( ) n log(1 + e )
y2
c(y, ) 12 [ + log(2)] log y! log (ny)
Se tiene que la media y varianza de la componente aleatoria vienen dadas
por Se verifica:
i = E(Yi ) = b0 (i ).
y
var (Yi ) = b00 (i ) a().
La componente sistemtica viene dada por
i = j xij , i = 1, . . . , n.
j
y en forma matricial
= X
con = (1 , . . . , p )0 y = ( 1 , . . . , p )0 siendo X la matriz de modelo.
i = g ( i ) = j xij , i = 1, . . . , n.
j
El parmetro natural i es
i = g ( i ) = j xij
j
La logverosimilitud sera
yi i b ( i )
L( ) = Li = log f (yi ; i , ) = a()
+ c ( y i , ).
i i i i
2 L ( )
Puesto que E = E L( ) L( ) ,
h j h j
n
2 L ( ) 2 L i ( )
Ihj = E =E =
h j i =1
h j
n n 2
xih xij
Li ( ) Li ( ) i
E h j
=
var (Yi ) i
i =1 i =1
I = X 0 WX
siendo
W = diag(w1 , . . . , w p )
con 2
1 i
wi =
var (Yi ) i
La matriz de covarianza asinttica estimada.
Estimamos W en y tendremos
I = X 0 WX
siendo
c ( ) = ( X 0 WX )1
cov
log = X
i = log i
de donde
i
= exp i = i
i
Adems
varYi = i
Adems 2
1 i
wi = = i
var (Yi ) i
570 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
Si asumimos que
a() =
i
entonces
D (y; ) es la desviacin.
La desviacin es igual a
D (y, ) = 2 yi log(yi /i ).
i
modelos lineales generalizados 571
Tenemos
i = log[i /(1 i )]
i = log[yi /(1 yi )]
1
a() =
ni
= 1, i = ni .
Se tiene
2[ L(0 ; y) L(1 ; y)] = D (y; 0 ) D (y; 1 )
por lo que el estadstico del test del cociente de verosimilitudes es la dife-
rencia de las desviaciones.
Comparacin de modelos utilizando la desviacin:
En concreto en modelos loglineales Poisson con trmino constante
y en modelos logit binomiales se tiene
Ajustado1
D (y; 0 ) D (y; 1 ) = 2 Observado log
i
Ajustado0
572 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
El residuo de Pearson es
yi i
ei =
c (Yi )1/2
var
Pero
cov(Y ) = cov(Y )( I H )
con
1 1
H = W 2 X ( X 0 WX )1 X 0 W 2
notaR/notaR025.pdf.
2 L ( )
H=
a b a,b=1,...,p
2 L ( )
I= E
a b a,b=1,...,p
o bien
I( t ) ( t +1) = I( t ) ( t ) + u ( t )
z = X + e
( X 0 V 1 X ) 1 X 0 V 1 z
Se ve fcilmente que
I( t ) ( t ) + u ( t ) = X 0 W ( t ) z ( t )
con
(t)
(t) i
=
(t) (t)
zi xij j + ( yi i ) (t) =
j i
(t)
(t) (t) i
i + ( yi i ) (t)
i
574 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
( X 0 W ( t ) X ) ( t +1) = X 0 W ( t ) z ( t )
i
g ( y i ) g ( i ) + ( y i i ) g 0 ( i ) = i + ( y i i ) = zi
i
( X 0 WX )1
con 2
i 1
wi =
i var (Yi )
v(i ) = i ,
notaR/notaR036.pdf
30
Meta-anlisis
con una distribucin comn Pi U (0, 1). Fisher propuso como forma
de combinar estos valores el siguiente estadstico
k
X 2 = 2 ln Pi . (30.1)
i =1
ik=1 Zi
Z= , (30.3)
k
siendo Zi = 1 (1 Pi ).
Notemos que el mtodo de Fisher suma los valores 2 ln( pi ). Por
otro lado el Z-valor de Stouffer lo que propone es (por una constante)
una suma de Zi valores. En ambos casos sumamos la contribucin de
cada test que en un caso lo cuantificamos con 2 ln( pi ) y en otro con
1 (1 pi )/ k. En la figura ?? comparamos los sumandos con el
siguiente cdigo.
2
p = seq(.01,.99,.001)
1
plot(-log(p),qnorm(1-p),type="l",xlab = expression(-ln(p)),
0
z
ylab = "z") 1
2
0 1 2 3 4
ln(p)
31.1 Introduccin
4. Consideramos1 1
En la implementacin original del
x mx procedimiento c = 1 y e = 0.
ui = i ,
cmd + e
con i = 1, . . . , n. Los valores por defecto son c = 5 y e = 0,0001
(con el valor de e evitamos la divisin por cero).
580 bioinformtica estadstica anlisis estadstico de datos micos con r/bioconductor
in=1 w(ui ) xi
Tbi ( x1 , . . . , xn ) = .
in=1 w(ui )
x = c(12,3,45,21,34,35,21,456)
library(affy)
tukey.biweight(x, c = 5, epsilon = 1e-04)
## [1] 25.1902
yij = m + ai + b j + eij
Mediana{b1 , . . . , b J } = 0.
7.
y = matrix(c(18,11,8,21,4,13,7,5,16,7,15,6,7,16,6,19,15,12,18,5),
ncol=5)
rownames(y) = paste("chip",1:4)
colnames(y) = paste("sonda",1:5)
medpolish(y)
## 1: 82
## Final: 82
##
## Median Polish Results (Dataset: "y")
##
## Overall: 10.5
##
## Row Effects:
## chip 1 chip 2 chip 3 chip 4
## 5 2 -2 -4
##
## Column Effects:
## sonda 1 sonda 2 sonda 3 sonda 4 sonda 5
## 1.0 -1.5 0.0 0.5 -0.5
##
## Residuals:
## sonda 1 sonda 2 sonda 3 sonda 4 sonda 5
## chip 1 1.5 -10 0.5 -9 0
## chip 2 -2.5 2 -5.5 3 0
## chip 3 -1.5 0 6.5 -3 10
## chip 4 13.5 0 -0.5 12 -1
Parte VIII
Investigacin reproducible
32
Por favor, no publicad ms
5. Insuficiente supervisin.
9. Fraude.
Con el anlisis estadstico de los datos tienen que ver los puntos 3, 6,
7 y 8. Hay que hacer bien las cosas. Y desde el principio.
En muchas ocasiones bilogos o mdicos o biotecnlogos o bioqu-
micos o . . . me han indicado que queran aprender ms de Probabi-
lidad y Estadstica. Normalmente despus de que les has analizado
unos datos para una tesis o un artculo. Al principio, con inters
les recomiendas algn texto esperando que les ayude. El final de la
historia suele ser el mismo. Que no leen nunca el libro. Aprender
Estadstica es muy fcil. Se coge un libro sencillo. El libro lleva una
pgina que pone el nmero uno. Se lee esa pgina. Se le da la vuelta
y se lee la siguiente numerada con el 2. Y as sucesivamente. Y no
hay otra. Es una opinin.
32.3 Markdown
32.4 RMarkdown
32.5 Software
emacs y R/Markdown %
El editor emacs puede ser configurado para trabajar con R y Mark-
down. Consiste en utilizar el paquete polymode Siguiendo lo indica-
do en esta pgina los pasos a seguir (y funciona) son los siguientes:
1. En /home/gag/emacs.d/9 ejecutamos 9
Sustituimos por el directorio personal
correspondiente.
git clone https://github.com/vitoshka/polymode.git
library(knitr)
Y ejecutamos
por favor, no publicad ms 589
knit("prueba.Rmd")
33
Lo que no se debe hacer pero se hace
B.1 Introduccin
C.1 TCGA
Lo encontramos en https://www.ebi.ac.uk/gxa/home
D
Datos
Datos html org Rmd Tipo Tabla D.1: Datos RNASeq utilizados
GSE1397 html gse1397.Rmd ExpressionSet
PRJNA297798 html PRJNA297798.org RangedSummarizedExperiment
PRJNA266927 html PRJNA266927.org RangedSummarizedExperiment
SRP064411 html SRP064411.org RangedSummarizedExperiment
E
Soluciones ejercicios
Por tanto los nombres abreviados de los genes los tendremos con
keys(org.Hs.eg.db, keytype="SYMBOL")
data(gse20986,package="tamidata")
Qu columnas ocupan?
pacman::p_load("Biobase")
pData(gse20986)[,"tissue"] == "iris" | pData(gse20986)[,"tissue"] == "huvec"
De otro modo:
(sel = which(is.element(pData(gse20986)[,"tissue"],c("iris","huvec"))))
## [1] 1 4 6 10 11 12
eset = gse20986[,sel]
pData(eset)[,"tissue"] = factor(pData(eset)[,"tissue"])
2.Con genefilter::rowttests.
tt = genefilter::rowttests(eset,pData(eset)[,"tissue"])
soluciones ejercicios 603
3.tt1 = multtest::mt.rawp2adjp(tt[,"p.value"],"BH")
tt1$adjp[,2]
## [1] 1828
sigIH = tt1$index[1:1828]
5.sel = which(is.element(pData(gse20986)[,"tissue"],c("retina","huvec")))
eset = gse20986[,sel]
pData(eset)[,"tissue"] = factor(pData(eset)[,"tissue"])
tt = genefilter::rowttests(eset,pData(eset)[,"tissue"])
tt1 = multtest::mt.rawp2adjp(tt[,"p.value"],"BH")
sigRH = tt1$index[1:sum(tt1$adjp[,2] < 0.05,na.rm = TRUE)]
6.sel = which(is.element(pData(gse20986)[,"tissue"],c("coroides","huvec")))
eset = gse20986[,sel]
pData(eset)[,"tissue"] = factor(pData(eset)[,"tissue"])
tt = genefilter::rowttests(eset,pData(eset)[,"tissue"])
tt1 = multtest::mt.rawp2adjp(tt[,"p.value"],"BH")
sigCH = tt1$index[1:sum(tt1$adjp[,2] < 0.05,na.rm = TRUE)]
7.sigIR = intersect(sigIH,sigRH)
sigIRC = intersect(sigIR,sigCH)
sigIRC
featureNames(gse20986[sigIRC,])
1.tt = genefilter::rowttests(eset,pData(eset)[,"type"])
2.tt = multtest::mt.rawp2adjp(pvalor13,"BH")
pvalor13.BH = tt$adjp[,"BH"]
5.intersect(sig13,sig25)
Bibliografa
Yoav Benjamini and Daniel Yekutieli. The control of the false dis-
covery rate in multiple testing under dependency. The Annals of
Statistics, 29(4):11651188, 2001.
Ben Bolstad. affyPLM: Methods for fitting probe-level models, 2016. URL
https://github.com/bmbolstad/affyPLM. R package version 1.50.0.
bibliografa 607
Marc Carlson. GO.db: A set of annotation maps describing the entire Gene
Ontology, 2016a. R package version 3.4.0.
Min Chen, Miao Zang, Xinlei Wang, and Guanghua Xiao. A po-
werful bayesian meta-analysis method to integrate multiple gene
set enrichment studies. Bioinformatics, 29(7):862869, 2013. doi:
10.1093/bioinformatics/btt068. URL http://bioinformatics.
oxfordjournals.org/content/29/7/862.abstract.
Sean Davis. GEOquery: Get data from NCBI Gene Expression Omnibus
(GEO), 2016. URL https://github.com/seandavi/GEOquery. R
package version 2.40.0.
Brad Efron and R. Tibshirani. GSA: Gene set analysis, 2010. URL
https://CRAN.R-project.org/package=GSA. R package version
1.03.
Kyle Furge and Karl Dykema. PGSEA: Parametric Gene Set Enrichment
Analysis, 2012. R package version 1.48.0.
Juergen Gross and Uwe Ligges. nortest: Tests for Normality, 2015.
URL https://CRAN.R-project.org/package=nortest. R package
version 1.0-4.
Justin Guinney and Robert Castelo. GSVA: Gene Set Variation Analysis
for microarray and RNA-seq data, 2017. URL http://www.sagebase.
org. R package version 1.22.4.
R.A. Irizarry, C. Wang, Y. Zhou, and T.P. Speed. Gene set enrichment
analysis made simple. Statistical Methods in Medical Research, 18(6):
565575, December 2009. Gene set analysis.
Laurent Jacob, Pierre Neuvial, and Sandrine Dudoit. More power via
graph-structured tests for differential expression of gene networks.
Ann. Appl. Stat., 6(2):561600, 06 2012a. doi: 10.1214/11-AOAS528.
URL http://dx.doi.org/10.1214/11-AOAS528.
Steve Lund, Long Qu, Ian Marschner, and R Core Team. QuasiSeq:
Analyzing RNA Sequencing Count Tables Using Quasi-Likelihood, 2015.
URL https://CRAN.R-project.org/package=QuasiSeq. R package
version 1.0-8.
Herv Pags, Marc Carlson, Seth Falcon, and Nianhua Li. Anno-
tationDbi: Annotation Database Interface, 2017. R package version
1.36.2.
Weiliang Qiu, Mei-Ling Ting Lee, and George Alex Whitmore. sizepo-
wer: Sample Size and Power Calculation in Micorarray Studies, 2016. R
package version 1.44.0.
C.R. Rao. Linear Statistical Inference and Its Applications. Wiley, 1967.
bibliografa 617
Maarten van Iterson. SSPA: General Sample Size and Power Analysis for
Microarray and Next-Generation Sequencing Data, 2016. URL http:
//www.humgen.nl/MicroarrayAnalysisGroup.html. R package
version 2.14.0.
John Verzani. UsingR: Data Sets, Etc. for the Text sing R for Introduc-
tory Statistics", Second Edition, 2015. URL https://CRAN.R-project.
org/package=UsingR. R package version 2.0-5.
Gregory R. Warnes, Peng Liu, and Fasheng Li. ssize: Estimate Micro-
array Sample Size, 2012. R package version 1.48.0.
E. Wit and J.D. McClure. Statistics for microarrays: design, analysis, and
inference. Wiley, 2004.
bibliografa 621
Yihui Xie. Dynamic Documents with R and knitr. Chapman & Ha-
ll/CRC The R Series. Chapman and Hall/CRC, 2nd edition, 2015.
ISBN 1498716962,9781498716963, 9781498716970.
Matthew Young. goseq: Gene Ontology analyser for RNA-seq and other
length biased data, 2016. R package version 1.26.0.
Shilin Zhao, Chung-I Li, Yan Guo, Quanhu Sheng, and Yu Shyr. Rna-
SeqSampleSizeData: RnaSeqSampleSizeData, 2014. R package version
1.6.0.
Shilin Zhao, Chung-I Li, Yan Guo, Quanhu Sheng, and Yu Shyr. Rna-
SeqSampleSize: RnaSeqSampleSize, 2015. R package version 1.6.0.
Jack Zhu and Sean Davis. SRAdb: A compilation of metadata from NCBI
SRA and tools, 2016. URL http://gbnci.abcc.ncifcrf.gov/sra/. R
package version 1.32.0.
SRA NCBI SRA (Sequence Read Archive) es una base de datos con
datos de secuenciacin de DNA en forma de lecturas cortas gene-
radas mediante secuenciacin de alto rendimiento. Su direccin
es http://www.ncbi.nlm.nih.gov/sra. En http://www.ncbi.nlm.
nih.gov/books/NBK47528/ tenemos ms informacin. Si no fun-
ciona el enlace buscamos en Google SRA handbook.. 134, 140, 144,
145