HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

Majdnem mindent az RNA-seq-ről (6. rész)

2017.08.06. 06:43 Travis.CG

A normalizálás után el kell döntenünk, hogy a gének expressziós különbségei közül melyek szignifikánsak és melyek tulajdoníthatóak csupán a véletlen művének. Ebben segít a differenciál expresszió.

Alapvetően kétféle modell létezik. Az egyik még a microarray időkből származik és lineáris regresszión alapul. A másik módszer a negatív binomiális regressziót használja. Korábban bemutattam mindkettőt és bár elég egyszerű példát használtam, egy dolgot igyekeztem kiemelni: mindkét módszer jó eredményt adhat, de érzékenységük különböző.

A szakirodalomban többször összehasonlították a két módszert és úgy tűnik a negatív binomiális regresszió pontosabb eredményt ad.

De mint az összes többi lépésnél, itt sem technikát, hanem programcsomagot választunk, amelyek képességeikben eltérnek. A leglényegesebb kérdés, hogyan tudjuk a különböző összehasonlítandó csoportokat definiálni? A differenciál expresszió meghatározásakor két csoportot jelölünk ki. Az egyik kontroll, amihez képest látni szeretnénk a változást, a másik a kezelés, ami hordozza a változást. A két csoport elnevezése a kísérlet szempontjából lényeges csak. Matematikailag ha felcseréljük őket, csupán a változás előjele változik, nagysága nem.

Az eredmény legtöbb esetben egy táblázat, ahol megtaláljuk a gének/transzkriptek nevét, használt statisztikai teszt értékeit, p-értékét és a változás mértékét (fold change). Ez utóbbit általában logaritmikus skálán.

Egyszerűbb kísérleti elrendezésnél eleve csak két csoport van, de amint a faktorok (összehasonlítási szempontok) száma növekszik, úgy lesz egyre bonyolultabb a dolgunk.

Rengeteg szoftver implementáció létezik, én most csak azokat szedtem össze, amelyeket az utóbbi két évben használtam.

Limma

Ez a csomag eredetileg microarray kiértékelésre készült. A csoportok definiálására egy matrixot kell létrehozni, ahol a sorok a minták, az oszlopok a faktorok. Ha a minta az adott kategóriába beletartozik, a cellába egy 1 kerül, ellenkező esetben 0. Az összehasonlításokat egy másik mátrix, az úgynevezett constrast mátrix definiálja. Itt megadhatjuk az összes párt. Az utolsó lépésben, ahol az eredményeket íratjuk ki (topTable), a coef paraméterrel mondjuk meg, melyik összehasonlításból szeretnénk táblázatot készíteni.

header <- c(rep("case1", 3), rep("case2", 3), rep("control", 3))
design <- model.matrix(~0 + factor(header))
colnames(design) <- levels(factor(header))
fit <- lmFit(norm, design)
contrasts <- makeContrasts(case1 - control, case2 - control, levels = design)
fit <- contrasts.fit(fit, contrasts)
fit <- eBayes(fit)
topTable(fit, coef = 1)

DESeq2

A DESeq2 egy rendkívül elterjedt program. Az általa használt negatív binomiális regresszió igen érzékeny. A használni kívánt modell mátrix felépítése eltér a Limmánál bemutatotttól. Az oszlopok különböző kategóriák lehetnek és a felvehető értékek egy kategorikus változóban vannak. Az összetartozó minták azonos értéket kapnak. A sorok továbbra is a minták. A példa kódban ez a conditions nevű változó.

raw <- as.matrix(read.table("matrix.tsv", check.names = F, sep = "\t"))
conditions <- data.frame("Day" = c(rep("D5", 3), rep("D7", 3), rep("D9", 3)))
rownames(conditions) <- colnames(raw)
des <- DESeqDataSetFromMatrix(raw,colData = conditions, design = ~Day)
des <- DESeq(des)
result1 <- results(des, contrast=c("Day", "D5", "D7"))
result2 <- results(des, contrast=c("Day", "D5", "D9"))

A program egyszerre csak egy oszlop alapján képes elkészíteni a modellt, ha tehát több faktort kell összehasonlítani, mindegyiket szerepeltetni kell az adott oszlopban. A fenti példánál maradva, ha a Day faktor mellé felveszünk egy Tissue-t is és szeretnénk a szöveteket különböző időpillanatban összehasonlítani, akkor a következő módszert használhatjuk:

cond2 <- data.frame("DayAndTissue" = c(rep("D5Blood", 3), rep("D5Bone", 3), rep("D7Blood", 3), rep("D7Bone")))

Ballgown

A Ballgown a cummeRBund leváltására tervezett program sajnos mind funkcionalitásban, mind stabilitásban elmarad a nagy elődtől. Frissítés is csak ritkán jön hozzá. A program szó nélkül olvassa a Stringtie kimenetet, más szoftverből származó adatoknál hibák felléphetnek. Csak két mintát tud összehasonlítani, többet lehetetlen kívánni tőle. Bár a dokumentáció említi, hogy saját modell mátrixot is lehet beadni neki, tudtommal ez még a jövő zenéje, nincs implementálva. A Limmához hasonlóan lineáris modellen alapul.

conditions <- read.table("conditions.tsv", check.names = F, sep = "\t")
bg <- ballgown(dataDir = "ballgown/", samplePattern = "MR", bamfiles = "ballgown", meas = "all", pData=conditions)
res <- stattest(bg, meas = "FPKM", covariate = "treatment", feature = "gene")

M3Drop

Egy sejtes RNA-seq esetén sokkal nehezebb a differenciálódó gének meghatározása. Az egyik lehetséges implementáció az M3Drop, ami Michaelis-Menten kinetikát alkalmaz annak meghatározására, hogy melyik gének expresszálódnak. A pontosságáról nehéz véleményt alkotnom, mert egy igen zajos adatszettet elemeztem csak vele. A legszoktalanabb tulajdonsága, hogy faktorok definiálása nélkül állapítja meg, mely gének expressziós változása szignifikáns. Ez viszont nagyon hasznos egy sejtes vizsgálatoknál, ahol a begyűjtött sejtek különböző fejlődési fázisban vannak és sok esetben semmilyen információnk nincs arra nézve, melyik minta hova tartozik.

raw <- as.matrix(read.table("count.tsv"))
norm <- M3DropCleanData(raw, is.count = T, min_detected_genes = 2000)
de_genes <- M3DropDifferentialExpression(norm$data, mt_method="fdr", mt_threshold=0.05)
sampleclust <- M3DropGetHeatmapCellClusters(heatm, k = 2)
marker_genes <- M3DropGetMarkers(norm$data, sampleclust)

SCDE

A másik egy sejtes adatok feldolgozására kifejlesztett program, az SCDE. Mivel a korábban említett zajos adatot dolgoztam fel vele, ennek pontosságáról sincs információm, de sokkal konzervatívabb az M3Drop-nál. Történetesen egyetlen gént sem kaptam vele eredményül. A másik szokatlan dolog vele kapcsolatban, hogy míg a legtöbb program kimenetében p-érték, log2 fold change és más megszokott elemek vannak, az SCDE z-score-t, maximum likelihoodot és más egyéb értéket tartalmaz. A fórumot böngeszve persze megtalálhatjuk az átváltáshoz szükséges összefüggéseket.

raw <- as.matrix(read.table("count.tsv"))
gr <- c(rep("control", 3), rep("condition1", 3), rep("condition2", 3))
names(gr) <- colnames(raw)
cc <- clean.counts(raw, min.lib.size = 2000, min.reads = 5, min.detected = 5)
error.model <- scde.error.models(cc, groups = gr, n.core = 1, threshold.segmentation = T, save.crossfit.plots = T, save.model.plots = T, verbose = 0)
prior <- scde.expression.prior(models = error.model, counts = cc, length.out = 400, show.plot = T)
diff <- scde.expression.difference(error.model, cc, prior, groups = gr, n.randomizations = 200, n.cores = 1, verbose = 0)

Zárszó

A differenciál expresszió nagyszerű módszer, de ha nem ismerjük pontosan a kísérlet hátterét, nagyon furcsa eredményeket is kaphatunk. Egyszer például olyan adatokkal dolgoztam, ahol az UV hatását vizsgálták egérre. Két csoport volt: Az első csoportot kis dózissal sugározták be, a másik csoportot nagy dózissal. Természetesen mindkét csoportnak volt sugárzás nélküli kontroll verziója is. Először mindkét csoportot a saját kontrolljával hasonlítottam össze, majd végeztem egy második vizsgálatot is, ahol az összes kontroll egy csoportban volt, hiszen a besugárzás nélküli állatok között minimális különbséget vártunk. Ennek ellenére drasztikus eltérés volt a két eredmény között.

Egy sejtes mintáknál még jobban kell figyelni. Hiába definiálunk csoportokat, minden egyes sejt a sejtciklus másik állapotában lesz. Ha szöveti differenciációt vizsgálunk, akkor a sejtek a feljődés különböző szakaszaiban lesznek. A szekvenálás előkészítésénél a kezdeti DNS mennyiségétől függően bizonyos gének hiányozhtnak. A káosz nem elég kifejező szó arra, amit kaphatunk.

Szólj hozzá!

Címkék: bioinformatika

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr8912646393

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása