Pitanje:
Kako izračunati RPKM u R?
Iakov Davydov
2017-05-17 15:28:32 UTC
view on stackexchange narkive permalink

Imam sljedeće podatke o brojanju fragmenata za svaki gen u 16 uzoraka:

  > str (izraz) 'data.frame': 42412 obs. od 16 varijabli: $ sample1: int 4555 49 122 351 53 27 1 0 0 2513 ... $ sample2: int 2991 51 55 94 49 10 55 0 0 978 ... $ sample3: int 3762 28 136 321 94 12 15 0 0 2181 ... $ sample4: int 4845 43 193 361 81 48 9 0 0 2883 ... $ sample5: int 2920 24 104 151 50 20 32 0 0 1743 ... $ sample6: int 4157 11 135 324 58 26 4 0 0 2364 ... $ sample7: int 3000 19 155 242 57 12 18 2 0 1946 ... $ sample8: int 5644 30 227 504 91 37 11 0 0 2988 ... $ sample9: int 2808 65 247 93 272 38 1108 1 0 1430 ... $ sample10: int 2458 37 163 64 150 29 729 2 1 1049 ... $ sample11: int 2064 30 123 51 142 23 637 0 0 1169 ... $ sample12: int 1945 63 209 40 171 41 688 3 2 749 ... $ sample13: int 2015 57 432 82 104 47 948 4 0 1171 ... $ sample14: int 2550 54 177 59 201 36 730 0 0 1474 ... $ sample15: int 2425 90 279 73 358 34 1052 3 3 1027 ... $ sample16: int 2343 56 365 67 161 43 877 3 1 1333 ...  

Kako mogu izračunati RPKM vrijednosti iz njih?

Što ste pokušali riješiti ovo pitanje? Jeste li posjetili Bioconductor?
četiri odgovori:
#1
+32
Konrad Rudolph
2017-05-17 15:46:42 UTC
view on stackexchange narkive permalink

Prvo,

Ne upotrebljavajte RPKM-ove .

Oni su stvarno zastarjeli jer jednom zbunjuju dolazi do čitanja uparenih krajeva. Ako bilo što drugo, upotrijebite FPKM , koji su matematički isti, ali koriste ispravnije ime (računamo li upareno čitanje odvojeno? Ne, računamo fragmente ).

Još bolje, koristite TPM (= prijepisa na milijun) ili odgovarajuću metodu normalizacije više biblioteka. TMP je definiran kao:

$$ \ text {TPM} _ \ color {orchid} i = {\ color {dodgerblue} {\ frac {x_ \ color {orchid} i} {{l_ \ text {eff}} _ \ color {orhideja} i}}} \ cdot \ frac {1} {\ sum_ \ color {paradajz} j \ color {dodgerblue} {\ frac {x_ \ color {paradajz} j} {{l_ \ text {eff}} _ \ color {rajčica} j}}}} \ cdot \ color {darkcyan} {10 ^ 6} $$

gdje

  • $ \ color {orchid} i $: indeks transkripta,
  • $ x_i $: sirovi broj transkripta,
  • $ \ color {tomato} j $ ponavlja se u svim (poznatim) transkriptima,
  • $ \ color {dodgerblue} {\ frac {x_k} {{l_ \ text {eff}} _ k}} $: stopa pokrivenosti fragmenata po nukleobazi ($ l_ \ text {eff} $ je efektivna dužina),
  • $ \ color {darkcyan} {10 ^ 6} $: faktor skaliranja (= "na milijune").

Međutim, FPKM se izračunava u R na sljedeći način. Imajte na umu da se većina izračuna vrši u prostoru transformiranom brojem dnevnika, kako bi se izbjegla numerička nestabilnost:

  fpkm = function (counts , efektivne_dužine) {exp (log (counts) - log (efektivne_duljine) - log (sum (counts)) + log (1E9))}  

Ovdje je efektivna dužina je duljina transkripta umanjena za srednju duljinu fragmenta plus 1; to jest, svi mogući položaji prosječnog fragmenta unutar prijepisa, što je jednako broju svih različitih fragmenata koji se mogu uzorkovati iz prijepisa.

Ova funkcija rukuje jednom knjižnicom odjednom. Ja ( i drugi) tvrdim da je to način na koji bi funkcije trebale biti napisane. Ako želite primijeniti kôd na više knjižnica, ništa nije lakše pomoću ‹dplyr›:

  tidy_expression = tidy_expression% >% group_by (Uzorak)% >% mutate (FPKM = fpkm (Count, col_data $ Length))  

Međutim, podaci u pitanju nije u urednom formatu podataka, pa ga prvo moramo transformirati u skladu s tim ‹tidyr›:

  tidy_expression = expression% >% collect (Sample, Count) 

Ova jednadžba ne uspije ako su svi vaši brojevi jednaki nuli; umjesto nula dobit ćete vektor NaN-a. Možda biste to željeli uzeti u obzir.


I spomenuo sam da su TPM-ovi superiorniji, pa je ovdje i njihova funkcija:

  tpm = funkcija (broji, efektivne_dužine) {rate = log (counts) - log (efektivne_dužine) exp (rate - log (sum (exp (rate))) + log (1E6))}  
Mogu li postaviti svojevrsno meta pitanje? Nedavno sam počeo vidjeti '%>%' u R kodu i nikada ga prije nisam primijetio. Što to točno čini?
@Greg [To je cijev] (https://github.com/tidyverse/magrittr). Postoji već dosta dugo (iako su različite knjižnice koristile različite simbole operatora; i sam sam koristio `% |%`, slično cijevi ljuske), ali tek nedavno stekao je glavnu vuču, uglavnom kroz dplyr knjižnicu.
#2
+9
Iakov Davydov
2017-05-17 15:28:32 UTC
view on stackexchange narkive permalink

RPKM je definiran kao:

RPKM = numberOfReads / (geneLength / 1000 * totalNumReads / 1,000,000)

Kao što vidite, morate imaju duljine gena za svaki gen.

Recimo da je geneLength vektor koji ima jednak broj redaka kao i vaš data.frame i svaka vrijednost vektora odgovara genu (retku) u expression.

  expression.rpkm <- data.frame (sapply (izraz, funkcija (stupac) 10 ^ 9 * column / geneLength / sum (column)))  

Što se tiče numeričke stabilnosti

Predlaže se u jedan od odgovora, da bi se svi proračuni trebali izvoditi u mjerilu transformiranom u dnevnik. Po mom mišljenju nema apsolutno nikakvog razloga za to. IEEE binary64 pohranjuje broj kao binarni broj 1.b_ {51} b {50} ... b_0 puta 2 ^ {e-1023}. Relativna preciznost ne ovisi o vrijednosti eksponenta s obzirom da je broj u rasponu [~ 10 ^ -308; 10 ^ 308].

U slučaju RPKM-a možemo izaći iz raspona samo ako je ukupan broj čitanja oko 10 ^ 300, što uopće nije realno.

Uključeno svijetlo mjesto nema puno štete ni u proračunima u log-scaleu. U najgorem slučaju izgubite malo preciznosti.

a onda odabir prave dužine gena sam po sebi može biti noćna mora, ovisno o organizmu ... Pa možda biste trebali razviti i koje bi mogle biti strategije za odabir ispravnog.
@Mitra Mislim da je ovo malo izvan opsega. Ali ako imate iskustva u tome, možete li ovdje dodati odgovor? Bilo bi stvarno super!
Ako malo razmislim, @Mitra zaslužuje zasebno pitanje. Ako će ga biti, povezat ću ga s ovog odgovora.
Mislim da nije izvan opsega: za izračun RPKM-a potrebna vam je duljina gena. Drugi su odgovori zaobišli ovaj problem koristeći se transkriptom ili duljinom egzona koji se lako mogu dobiti iz napomene. To nije slučaj s duljinom gena koju koristite u svojoj formuli.
#3
+1
arupgsh
2017-05-17 20:33:34 UTC
view on stackexchange narkive permalink

Ako planirate napraviti diferencijalnu analizu izraza, vjerojatno vam neće trebati izračun RPKM-a.

RPK = broj preslikanih čitanja / duljina prijepisa u kb (duljina prijepisa / 1000 )

RPKM = RPK / ukupan broj pročitanih u milijunima (ukupan broj pročitanih / 1000000)

Cijela formula zajedno:

RPKM = (10 ^ 9 * C) / (N * L) Gdje,

C = Broj očitavanja preslikanih u gen

N = Ukupan preslikan očitanje u eksperiment

L = duljina eksona u parovima baza za gen

#4
  0
burger
2017-05-17 20:16:11 UTC
view on stackexchange narkive permalink

Ako tražite vizualnije rješenje (uz ostale odgovore), NCI Genomic Data Commons (spremište TCGA) nudi lijepu formulu:

enter image description here

Gdje:

RCg: Broj čitanja preslikanih u gen

RCpc: Broj čitanja preslikanih u svi geni koji kodiraju proteine ​​

RCg75: Vrijednost broja očitanja 75. percentila za gene u uzorku

L: Duljina gena u osnovnim parovima

Kao što su drugi istakli, FPKM-ovi imaju nekih problema. GDC također izračunava vrijednosti FPKM-UQ koje su normalizirane za gornji kvartil. Oni se preporučuju za usporedbu uzoraka i analizu diferencijalnih izraza.

Nazivnik za FPKM-UQ i dalje je specifičan za uzorak, pa to neće biti odgovarajuća normalizacija za analizu diferencijalnog izraza (nalazi se unutar normalizacije uzorka, a ne između).
Čini se da GDC implicira drugačije: https://gdc.cancer.gov/about-data/data-harmonization-and-generation/genomic-data-harmonization/high-level-data-generation/rna-seq-quantification


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...