250 likes | 399 Views
Analýza dat v R. Analýza reálneho príkladu - microarrays Eva Budinská 28-30. apríl 2011 Brno. Príklad. Dátový súbor: Z databáze GEO (GSE11543) 51 pacientov s nádorom kolorekta Namerané klinické parametre: Vek, pohlavie
E N D
Analýza dat v R Analýza reálneho príkladu - microarrays Eva Budinská 28-30. apríl 2011 Brno
Príklad • Dátový súbor: • Z databáze GEO (GSE11543) • 51 pacientov s nádorom kolorekta • Namerané klinické parametre: • Vek, pohlavie • Mikrosatelitová nestabilita ( MSI – nestabilní (lepšie prežitie), MSS – stabilní (horšie prežitie)) • K dispozícii hodnoty aktivity génov reprezentovaných 7129 sondami, merané u každého pacienta • Cieľ: Zistiť, ktoré gény sú zasiahnuté mikrosatelitovou nestabilitou (zistiť teda, aké sú rozdiely medzi skupinami MSI a MSS v aktivite génov) • Dátové súbory: • clinical = read.table("clinical.csv", header=TRUE, sep=",") # klinické informácie o pacientoch • annotation = read.table("Annotation.csv", header=TRUE, sep=",", skip=12) #informácia o génoch (názov, chromozóm, funkcia...) • load("colon.Rdata") # hodnoty aktivity génov u pacientov
Dátové súbory • clinical - klinické informácie o pacientoch ID MSS Sex DukesStage Age 1 William Carbines MSS Male B 78 2 Leontine Aubert MSS Female A 73 • Ivan Mineff MSS Female B 65 • colon– informácie o aktivite génov u pacientov (čím vyššie číslo, tým aktívnejší gén) William Carbines Leontine Aubert Ivan Mineff GABRA3 7.641879 7.616971 7.278516 OMD 6.818050 6.675985 6.266338 IFI44L 7.578773 8.198093 7.873286 • annotation – informácie o génoch a ich pozícii na chromozóme, stĺpce c(1,15,16) Chromosomal.Location Gene.Title GABRA3 chrXq28 gamma-aminobutyric acid (GABA) A receptor, alpha 3 OMD chr9q22.31 osteomodulin IFI44L chr1p31.1 interferon-induced protein 44-like
Schéma analýzy • Cieľ: Zistiť ktoré gény sú rozdielne aktívne medzi skupinami MSI a MSS • Analýza: • Porovnanie aktivity je ekvivalentné porovnaniu priemerov číselných hodnôt aktivity jednotlivých génov medzi skupinami MSI a MSS – testovanie hypotéz Aplikujeme teda • Parametrický T-test • Neparametrický Mann-Whitney test • Hypotézy testujeme pre všetky gény! (teda 5311 krát!!!) – vzniká problém mnohonásobného porovnávania (u hladiny významnosti 5% máme 5311*0.05 = 265 falošne pozitívnych génov). Musíme teda vykonať korekciu p-hodnôt z testovania • Nonferonniho korekcia • FDR • Ďalej urobíme zhlukovanie génov, ktoré sme našli ako rozdielne aktívne medzi MSI a MSS, aby sme našli funkčné skupiny • Vykreslíme heatmapu!
Načítanie dát • load("colon.Rdata") • annotation=read.table(„annotation.csv", header=TRUE, sep=",", rownames=1) • clinical = read.table("clinical.csv", header=TRUE, sep=",",rownames=1) Skontrolujeme načítanie dát: • dim(colon) • dim(annotation) • dim(clinical) • colon[1:5,1:5] • annotation[1:5,] • clinical[1:5,1:3]
Schéma analýzy • Cieľ: Zistiť ktoré gény sú rozdielne aktívne medzi skupinami MSI a MSS • Analýza: • Porovnanie aktivity je ekvivalentné porovnaniu priemerov číselných hodnôt aktivity jednotlivých génov medzi skupinami MSI a MSS – testovanie hypotéz Aplikujeme teda • Parametrický T-test • Neparametrický Mann-Whitney test • Hypotézy testujeme pre všetky gény! (teda 5311 krát!!!) – vzniká problém mnohonásobného porovnávania (u hladiny významnosti 5% máme 5311*0.05 = 265 falošne pozitívnych génov). Musíme teda vykonať korekciu p-hodnôt z testovania • Nonferonniho korekcia • FDR • Ďalej urobíme zhlukovanie génov, ktoré sme našli ako rozdielne aktívne medzi MSI a MSS, aby sme našli funkčné skupiny • Vykreslíme heatmapu!
Testovanie hypotéz • informácia o aktivite génov je uložená v súbore colon • gény sú uložené ako riadky, preto sa na ne budeme odvolávať pomocou colon[i, ] • informácia o príslušnosti pacientov k skupine MSI a MSS je v súbore clinical • uložme si informáciu o MSI a MSS do premennejgroup group = clinical$MSS • Funkcia preT-test: t.test() • Možný spôsob vstupných hodnôt • t.test(hodnoty v skupine 1, hodnoty v skupine 2) • t.test(hodnoty~skupina) Konkrétne pre otestovanie i-tého génu (riadku) • t.test(colon[i,group=="MSS"], colon[i,group=="MSI"]) • t.test(colon[i,]~group)
Testovanie hypotéz i=1 vysledok = t.test(colon[i,]~group) vysledok #zobrazime výsledok testu Ako vyextrahujeme p-hodnotu??? summary(vysledok) #ukáže nám všetky elementy výsledného objektu Je medzi nimi i hodnota p.value. Získame ju teda odvolaním sa na ňu cez $p.value: vysledok$p.value [1] 0.5377606 Nakreslíme si obrázok, aby sme videli rozdiely medzi skupinami boxplot(colon[i,]~group) Testová úloha: Pridajte do obrázku p-hodnotu zaokrúhlenú na 3 desatinné miesta a názov génu do titulku grafu. Výsledný graf spolu s príkazom ktorým ste ho vytvorili uložte do Wordu. [3 body] Nápoveda: použite paste()
Testovanie hypotéz II. • Chceme spočítať T-test pre každý gén. Aplikujeme teda funkciu apply na súbor colon po riadkoch, a z t.testu vyberieme len p-hodnoty: vsetky.geny.ttest = apply(colon, 1, FUN=function(x) t.test(x~ group)$p.value) • Chceme zistiť, ktoré gény sú štatisticky významné, a teda ktoré p-hodnoty sú menšie ako 0.05 vyznamne.geny.t.test = vsetky.geny.ttest<0.05 #podmienkou vytvoríme vektor false/true Úloha: Ako zistíme, koľko ich je? Pozrieme si ktoré gény sú to konkrétne: rownames(annotation)[vyznamne.geny.t.test]
Schéma analýzy • Cieľ: Zistiť ktoré gény sú rozdielne aktívne medzi skupinami MSI a MSS • Analýza: • Porovnanie aktivity je ekvivalentné porovnaniu priemerov číselných hodnôt aktivity jednotlivých génov medzi skupinami MSI a MSS – testovanie hypotéz Aplikujeme teda • Parametrický T-test • Neparametrický Mann-Whitney test • Hypotézy testujeme pre všetky gény! (teda 5311 krát!!!) – vzniká problém mnohonásobného porovnávania (u hladiny významnosti 5% máme 5311*0.05 = 265 falošne pozitívnych génov). Musíme teda vykonať korekciu p-hodnôt z testovania • Nonferonniho korekcia • FDR • Ďalej urobíme zhlukovanie génov, ktoré sme našli ako rozdielne aktívne medzi MSI a MSS, aby sme našli funkčné skupiny • Vykreslíme heatmapu!
Mnohonásobné porovnanie • Keď testujeme 5311 krát a používame hladinu významnosti 5%, tak môžeme čakať 0.05*5311 = 265 falošne pozitívnych génov. • Korekcia p-hodnôt na tento problém, funkcia p.adjust() • Bonferroni: bonferroni.p.hodnoty = p.adjust(vsetky.geny.ttest, method="bonferroni") • FDR: fdr.p.hodnoty = p.adjust(vsetky.geny.ttest, method="fdr") Koľko máme významných génov teraz?? sum(fdr.p.hodnoty<0.05) sum(bonferroni.p.hodnoty<0.05) Testová úloha: Nájdite funkciu pre neparametrický Wilcoxon test[1 bod] a zanalyzujte dáta touto funkciou spolu s korekciou p-hodnôt na mnohonásobné porovnanie metódou FDR. Zapíšte koľko génov je významných na 0.05 hladine významnosti, a to po korekcii na mnohonásobné porovnávanie. [2 body] Ktorý gén má najmenšiu p-hodnotu (upravenú FDR)? – napíšte meno a zistite na ktorom chromozóme sa nachádza. [2 body]
Schéma analýzy • Cieľ: Zistiť ktoré gény sú rozdielne aktívne medzi skupinami MSI a MSS • Analýza: • Porovnanie aktivity je ekvivalentné porovnaniu priemerov číselných hodnôt aktivity jednotlivých génov medzi skupinami MSI a MSS – testovanie hypotéz Aplikujeme teda • Parametrický T-test • Neparametrický Mann-Whitney test • Hypotézy testujeme pre všetky gény! (teda 7129 krát!!!) – vzniká problém mnohonásobného porovnávania (u hladiny významnosti 5% máme 7129*0.05 = 356 falošne pozitívnych génov). Musíme teda vykonať korekciu p-hodnôt z testovania • Nonferonniho korekcia • FDR • Ďalej urobíme zhlukovanie génov, ktoré sme našli ako rozdielne aktívne medzi MSI a MSS, aby sme našli funkčné skupiny • Vykreslíme heatmapu!
Zhlukovanie • T-testom sme vybrali množinu 320 génov, ktoré sú štatisticky významné medzi skupinami MSI a MSS na hladine významnosti 0.05 po korekcii na FDR. • Chceme teraz vedieť, ktoré z týchto génov tvoria spoločné zhluky • Takisto chceme vedieť, či vybrané gény naozaj dobre rozdeľujú pacientov na skupiny MSI a MSS • Urobíme preto hierarchické zhlukovanie jednak génov a jednak pacientov. • hclust – funkcia pre hierarchické zhlukovanie z balíka cluster • parametre: d – matica vzdialeností medzi objektami method – algoritmus zhlukovania, na výber: "ward","single","complete", "average", "mcquitty", "median", "centroid" unit – ako sa majú zobraziť objekty v dendrograme labels – názvy listov stromu (defaultne názvy alebo čísla riadkov dát)
Metrika vzdialeností I. • Ak chceme zhlukovať, najprv musíme definovať maticu vzdialeností d, ktorá je základným vstupom do funkcie hclust. Použijeme dve: • Euklideovskú vzdialenosť – funkcia dist() dist(x,method ) parametre: x – dátová tabuľka, objekty medzi ktorými počítame vzdialenosť musia byť v riadkoch method – metrika vzdialenosti euclid.pacient = dist(t(colon[fdr.p.hodnoty<0.05,]), method="euclidean")# vzdialenosť medzi vzorkami euclid.geny = dist(colon[fdr.p.hodnoty<0.05,], method="euclidean")# vzdialenosť medzi vzorkami
Metrika vzdialeností II. • Metrika založená na Spearmanovej korelácii – cor() cor(x, method) – vypočíta koreláciu medzi stĺpcami matice matice x – matica method – "pearson" alebo "spearman" cor.pacient = cor(colon[fdr.p.hodnoty<0.05,], method="spearman")#počítame koreláciu medzi pacientami Potrebujeme ale vzdialenosť!!! cor.pacient.dist = as.dist(1-cor.pacient)# prekonvertujeme korelácie na maticu vzdialeností cor.geny = cor(t(colon[fdr.p.hodnoty<0.05,]), method="spearman") #počítame koreláciu medzi génmi cor.geny.dist = as.dist(1-cor.geny) # prekonvertujeme na vzdialenosť
Hierarchické zhlukovanie • Zhlukujeme pacientov algoritmom average linking na euklideovskej vzdialenosti: hclust.pac.eucl.avg = hclust(euclid.pacient, method="average") a na vzdialenosti odvodenej od korelácie hclust.pac.spear.avg = hclust(cor.pacient.dist, method="average") • Podobne zhlukujeme gény: na euklideovskej vzdialenosti: hclust.geny.eucl.avg = hclust(euclid.geny, method="average") a na vzdialenosti odvodenej od korelácie hclust.geny.spear.avg = hclust(cor.geny.dist, method="average")
Dendrogram • Máme teda 4 objekty hierarchického zhlukovania hclust.pac.eucl.avg #pacienti na euklideovskej vzd. hclust.pac.spear.avg #pacienti na koreláciách hclust.geny.eucl.avg #gény na euklideovskej vzd. hclust.geny.spear.avg #gény na koreláciách • Ak chceme výsledky zobraziť, musíme vytvoriť dendrogramy dendr.hclust.pac.eucl.avg = as.dendrogram(hclust.pac.eucl.avg, labels=group) dendr.hclust.pac.spear.avg = as.dendrogram(hclust.pac.spear.avg) dendr.hclust.geny.eucl.avg = as.dendrogram(hclust.geny.eucl.avg) dendr.hclust.geny.spear.avg = as.dendrogram(hclust.geny.spear.avg) #gény na koreláciách
Dendrogram - zobrazenie • Vykreslíme dendrogramy do jedného grafu pre pacientov: par(mfrow=c(2,1),cex=0.5) plot(dendr.hclust.pac.eucl.avg) plot(dendr.hclust.pac.spear.avg) savePlot("dendrogram.pacienti.png", type="png") a pre gény windows(28,14) par(mfrow=c(2,1), cex=0.5) plot(dendr.hclust.geny.eucl.avg) plot(dendr.hclust.geny.spear.avg) savePlot("dendrogram.geny.png", type="png")
Schéma analýzy • Cieľ: Zistiť ktoré gény sú rozdielne aktívne medzi skupinami MSI a MSS • Analýza: • Porovnanie aktivity je ekvivalentné porovnaniu priemerov číselných hodnôt aktivity jednotlivých génov medzi skupinami MSI a MSS – testovanie hypotéz Aplikujeme teda • Parametrický T-test • Neparametrický Mann-Whitney test • Hypotézy testujeme pre všetky gény! (teda 7129 krát!!!) – vzniká problém mnohonásobného porovnávania (u hladiny významnosti 5% máme 7129*0.05 = 356 falošne pozitívnych génov). Musíme teda vykonať korekciu p-hodnôt z testovania • Nonferonniho korekcia • FDR • Ďalej urobíme zhlukovanie génov, ktoré sme našli ako rozdielne aktívne medzi MSI a MSS, aby sme našli funkčné skupiny • Vykreslíme heatmapu!
Heatmapa • Kreslíme heatmapu Nastavíme farebnú škálu zelenej cez čiernu po červenú, kde zelená budú málo aktívne gény a červená veľmi aktívne gény. Čierna farba znamená priemernú expresiu génu. farby = colorRampPalette(c("green", "black","red"))(15) heatmap(colon[fdr.p.hodnoty<0.05,]) heatmap(colon[fdr.p.hodnoty<0.05,], col=farby) pridáme farby skupín MSI/MSS (parameter ColSideColors): heatmap(colon[fdr.p.hodnoty<0.05,], col=farby, ColSideColors=as.character(as.numeric(group)))
Heatmapa a vlastné zhlukovanie • Ak chceme heatmapu na základe nášho vlastného zhlukovania, musíme definovať parametre Rowv (pre dendrogram riadkov - génov) a Colv (pre dendrogram stĺpcov-pacientov) • Pre pacientov použijeme dendrogram zo zhlukovania na spearmanovej korelácii dendr.hclust.pac.spear.avg • Pre gény použijeme dendrogram zo zhlukovania na euklideovskej vzdialenosti dendr.hclust.geny.eucl.avg: heatmap(colon[fdr.p.hodnoty<0.05,], col=farby, ColSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.pac.spear.avg, Rowv= dendr.hclust.geny.eucl.avg) Zadáme dendrogram z korelácií i u génov: heatmap(colon[fdr.p.hodnoty<0.05,], col=farby, ColSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.pac.spear.avg, Rowv=dendr.hclust.geny.spear.avg)
Upravujeme heatmapu • Chceme vidieť názvy génov (annotation$Gene.Symbol), zadefinujeme preto parameter labRow a zmenšíme písmo v riadkoch – parameter cexRow: heatmap(colon[fdr.p.hodnoty<0.05,], col=farby, ColSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.pac.spear.avg, Rowv= dendr.hclust.geny.spear.avg, labRow=annotation$Gene.Symbol[fdr.p.hodnoty<0.05], cexRow=0.5) Testová úloha: Zmeňte v matici označenie pacientov na označenie skupín MSI/MSS. Zapíšte príkaz a pripojte výsledný graf. [1 bod] • Ak nechceme zhlukovanie riadkov alebo stĺpcov, zadáme hodnotu NA do parametrov Colv alebo Rowv heatmap(colon[fdr.p.hodnoty<0.05,], col=farby, ColSideColors=as.character(as.numeric(group)), Colv= NA, Rowv= dendr.hclust.geny.spear.avg, labRow=annotation$Gene.Symbol[fdr.p.hodnoty<0.05], cexRow=0.5)
Upravujeme heatmapu II. Heatmapa je zle čitateľná, uložíme ju preto príkazom png a zadefinujeme väčšiu veľkosť: png("heatmapa.png", height=1200, width=520) heatmap(colon[fdr.p.hodnoty<0.05,], col=farby, ColSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.pac.spear.avg, Rowv= dendr.hclust.geny.spear.avg, labRow=annotation$Gene.Symbol[fdr.p.hodnoty<0.05], cexRow=0.5) dev.off() Toto by bol štandardný postup, ale nefunguje to, pretože heatmapa tejto funkcie je zadefinovaná cez layout a nie je tu možné meniť ho a teda a ni zväčšovať ju. Ak sa Vám nechce prerábať zdrojový kód, skúste funkciu heatmap.2 z gplots, tá už má viac možností!
Ďalšie testové úlohy • Okrem troch predchádzajúcich testových úloh vyriešte nasledovné: • Pridajte do súboru clinical premennú ktorá bude kategorizovať expresnú hodnotu génu “MSH6“ na dve skupiny podľa priemernej hodnoty a nazvite ju MSH6kat. [4 body]. • V súbore clinical prekódujte premennú Age na skupiny <50, 50-70, >70. [2 body] • Poznámka: Ku každej úlohe pripojte kód, ak je výsledkom graf, tak i graf. • Celkový počet bodov za príklady 15 • Známkovanie: • viac ako 13 A • 12-10 B • 9-8 C • 7-6 D • 5-4 E • 3 a menej F Bonus: Účasť na celej výuke (prípadne ospravedlnenie neprítomnosti) + 2 body