Vraag:
Filterstap voor het lezen van gegevens
stack_learner
2017-09-01 17:03:46 UTC
view on stackexchange narkive permalink

Ik heb ongeveer 1200 monsters als kolommen en 60.000 genen met Htseq-Counts-gegevens. Vóór normalisatie met de voom-functie wil ik de filterstap uitvoeren.

Ik wil genen verwijderen waarvan de expressie == 0 is in ten minste 10 samples.

Kan ik dit doen met read counts zelf of moet ik counts omzetten naar cpm?

Als filteren met counts-gegevens prima is, mag ik dan weten hoe ik dit moet doen.

Twee antwoorden:
benn
2017-09-01 17:25:30 UTC
view on stackexchange narkive permalink

Als u uw tellingen in een data.frame met de naam counts heeft, kan zoiets als dit werken:

  filter.counts <- counts [rowSums (counts = = 0) <10,]  

Laten we bijvoorbeeld uitgaan van het volgende dataframe.

  > A <- c (0,0,0,0, 0) > B <- c (0,1,0,0,0) > C <- c (0,2,0,2,0) > D <- c (0,5,1,1,2) > > telt <- data.frame (A = A, B = B, C = C, D = D) > telt ABC D1 0 0 0 02 0 1 2 53 0 0 0 14 0 0 2 15 0 0 0 2  

En nu zou je de genen met minstens 3 nullen of meer willen verwijderen:

  > filter.counts <- counts [rowSums (counts == 0) <3,] > > gefilterde.tellingen ABC D2 0 1 2 54 0 0 2 1  

Elk gen met 3 of meer nullen is nu verwijderd.

In minstens 10 monsters. Dus ik denk dat dit gefilterd moet zijn. Counts <- counts [rowSums (counts == 0)> = 10,]
Nee, bij mijn voorbeeld behoudt u alle rijen met minder dan 10 nullen.
Op jouw manier heb ik nog maar 1/4 van de genen over. Ik wil genen verwijderen waarvan de expressie == 0 is in ten minste 10 monsters. Met mijn commando heb ik nu meer dan de helft van de genen over na het filteren.
Als je het op jouw manier gebruikt, bewaar je alle genen met meer dan 10 nullen, controleer het zelf als je me niet gelooft.
Dus de gefilterde.counts-uitvoer die u hierboven gaf, moet worden gebruikt voor normalisatie?
Als deze filteraanpak is wat u wilt, ja. In edgeR- of limma-manual geven ze echter ook andere opties, zoals minimaal 1 cpm in meer dan 3 samples. Meestal zijn 3 monsters dan gebaseerd op groepen van 3 monsters. Als je nog maar 1/4 van je genen over hebt met deze filtering, is het misschien te streng. Voor limma voom moet u trouwens cpm-waarden hebben.
OK. Zoals je zei, deed ik het op een edgeR-manier. behoud <- rowSums (cpm (counts)> 0.5)> = 10; y <- counts [keep,] Dus nu kunnen genen in "y" worden gebruikt voor "voom" -functie om de gegevens te normaliseren. Denk je dat dit klopt?
Ja, ik denk dat het klopt, veel succes!
10 van de 1200 monsters is een zeer strikte cut-off. Het verbaast me niet dat er niet veel genen over zijn.
Ja, maar ik ben geïnteresseerd in het zoeken naar een specifiek gen. Dus om dat in mijn resultaten te krijgen, heb ik die grens genomen.
llrs
2017-09-02 15:32:30 UTC
view on stackexchange narkive permalink

Hoewel dit antwoord uitlegt hoe het moet, wil ik ingaan op wanneer en waarom en welke drempels om het te doen.

Het filteren van de genen met een laag aantal wordt meestal gedaan omdat de tellingen zijn niet betrouwbaar, het zou ruis zijn, vooral als er een laag aantal monsters is, verstoren deze genen de kracht van de analyse. Met 1200 samples met 10 of meer samples zonder enige telling is dit echter waardevolle informatie omdat je genoeg samples hebt om te schatten of dit te wijten is aan een latente of bekende variabele of aan ruis.

De CPM wordt gebruikt omdat de grootte van de bibliotheek per sample de kracht van het experiment beïnvloedt. Hoe groter de bibliotheekgrootte, hoe gemakkelijker het is om te achterhalen of een gen tot expressie wordt gebracht of niet. CPM worden berekend om met dat effect rekening te houden. Filteren op tellingen of CPM resulteert in verschillende gefilterde genen als je andere drempels dan 0 gebruikt (ik heb bijvoorbeeld die genen gefilterd waarvan de gemiddelde CPM lager was dan 1, wat anders zou zijn dan filteren op genen waarvan het gemiddelde aantal lager is dan 1. )



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...