reactome pathway analysis: a high-performance in-memory approach
Het identificeren van een handige gegevensstructuur om een bepaald probleem op te lossen is een van de belangrijkste factoren om een high-performance eindproduct te bereiken. Zoals Skiena uitlegt in, het kiezen van de verkeerde gegevensstructuur voor de baan kan rampzalig zijn in termen van prestaties, maar het identificeren van de beste gegevensstructuur is meestal niet zo kritisch, omdat er verschillende keuzes die op dezelfde manier presteren kunnen zijn.
gebaseerd op de verdeel en heers regel, is de eerste stap om het analyseprobleem op te splitsen in verschillende subproblemen die eenvoudig genoeg zijn om in polynomiale tijd te worden opgelost door een handige gegevensstructuur te identificeren. Hier kan het analysealgoritme in vier delen worden opgesplitst: (1) het controleren of de gebruiker eiwit/chemische id ’s aanwezig zijn in Reactome, (2) voor de huidige, te vinden of deze onderdelen van complexen en/of sets alsmede de soort projectie, (3) optellen van de gevonden id’ s in de trajecten (en super-trajecten) waar deze aanwezig zijn en ten slotte (4) het uitvoeren van de statistische testen voor het berekenen van de kans dat het verband tussen de sample-id ‘ s en de gevonden route is te wijten aan toeval.
verder in dit hoofdstuk wordt elk deel in detail besproken om de eigenaardigheden ervan te bepalen; om de gekozen gegevensstructuur en de mechanismen voor de verbetering ervan bloot te leggen; en om te laten zien hoe elke stap te verbinden met de volgende om te komen met de uiteindelijke verbeterde analyse algoritme. Een ander punt van nadruk voor optimalisatie zal het geheugengebruik van elke stap zijn, zodat de gevulde datastructuren in het geheugen kunnen worden gehouden om de prestaties van de gegevensdoorlaatalgoritmen die er bovenop zijn geà mplementeerd, te verbeteren.
gebruikersmonsteridentifiers zoeken in Reactoom
geannoteerde fysieke entiteiten (PE) in Reactoom kunnen afzonderlijke entiteiten of complexen zijn. De enige entiteiten omvatten proteã nen, kleine molecules, RNA, DNA, koolhydraten, of lipiden, terwijl de complexen uit een combinatie van om het even welke van de enige entiteiten bestaan, of polymeren samengesteld uit de enige entiteiten. Echter, afgezien van deze twee hoofdcategorieën, kunnen curatoren in Reactome gerelateerde entiteiten groeperen in sets. PEs zijn de bouwstenen die later zullen worden gebruikt als input, outputs, katalysatoren of regulatoren in reacties.
Identifiers of toetredingsnummers worden gebruikt om ondubbelzinnig naar een enkele entiteit te verwijzen, maar ODA ‘ s hebben verschillende slots om de hoofdidentifier, secundaire identifier, kruisverwijzingen, synoniemen en andere identifiers te bevatten. De belangrijkste identifier slot wordt altijd handmatig geannoteerd door de experts die de gegevens in Reactome (curatoren), en de andere sleuven kunnen ofwel handmatig worden gevuld tijdens de curatie of automatisch worden ingevuld tijdens het release proces. Deze strategie maakt het mogelijk identifiers op te slaan voor een breed scala aan middelen: UniProt, ChEBI, Ensembl, miRBase, GenBank / EMBL / DDBJ, RefPep, RefSeq, EntrezGene, Omim, InterPro, Affymetrix, Agilent, Kegg Compound, Illumina, enz.
in het eerste deel van de analyse is daarom de belangrijkste vereiste om het proces te verbeteren om uit te vinden of elke identificatie in de steekproef van de gebruiker overeenkomt met één of meerdere PEs in Reactome. Een identificator komt overeen met een PE als deze overeenkomt met een van de identificatoren die zijn opgeslagen in de verschillende eerder genoemde slots. In feite, de beste manier om dit probleem op te lossen is door het volgen van de omgekeerde aanpak; het maken van een lookup tabel met alle corresponderende PEs per identifier kruisverwijzingen in Reactome. Als gevolg daarvan is een andere belangrijke eis om het geheugengebruik te minimaliseren, zodat de gegevens in het geheugen kunnen worden bewaard om de query-tijd te verbeteren.
de selectie van een goede datastructuur wordt dan bepaald door vereisten om zowel een snelle opzoektabel te implementeren als het geheugengebruik laag te houden. Een Trie is een geordende boomgegevensstructuur die wordt gebruikt om een dynamische set of associatieve array op te slaan waar de sleutels meestal strings zijn . Een Radix-boom is een ruimte-geoptimaliseerde Trie-gegevensstructuur waarbij elk knooppunt met slechts één kind wordt samengevoegd met zijn ouder .
aan de ene kant heeft een radixboom relatief weinig geheugengebruik voor de opzoektabel omdat de gemeenschappelijke voorvoegsels worden gedeeld om duplicatie van gegevens te voorkomen (Fig. 1). Aan de andere kant kunnen de kosten van het vergelijken van een zoeksleutel voor gelijkheid met een sleutel uit de gegevensstructuur een overheersende kosten zijn die niet kunnen worden verwaarloosd. Het Radix tree string lookup-algoritme past bij het oorspronkelijke doel van het analysealgoritme, omdat het itereren over boomknooppunten de tijd van het zoeken van de identifier beperkt houdt tot de lengte en het bestaan van elke identifier in de reactome-doelset. Als gevolg hiervan, in het geval dat de gezochte identifier niet is opgenomen in de gegevensstructuur, is het niet nodig om alles te lezen zoals gebeurt in de hashing methoden waar de hash waarde van de string in elk geval moet worden berekend door het volledig te lezen.
samengevat geeft de aanwezigheid of afwezigheid van verwijzingen naar PES aan of de bijbehorende identifier al dan niet in de database aanwezig is. Eigenlijk zijn de genoemde “verwijzingen naar PE” inderdaad verwijzingen naar knooppunten in de gegevensstructuur die is gekozen voor het volgende deel van de analyse.
Reactome maakt gebruik van unieke primaire identifiers voor de PEs-it-referenties, met name UniProt voor eiwitten en ChEBI voor chemische entiteiten. Dus, als gebruikers datasets indienen met behulp van deze referentiesystemen, is de toewijzing aan PEs eenvoudig. Na frequente verzoeken van gebruikers accepteren we echter ook invoergegevens met niet-unieke identificatoren, in het bijzonder gennamen. Deze worden dan mogelijk in kaart gebracht aan meerdere PEs. Zo kan elk doelknooppunt in de boom meer dan één aanwijzer naar de volgende gegevensstructuur bevatten.
het doorlopen van complexen/verzamelingen samenstelling en soortenprojectie
het bereiken van de bijbehorende eenheid voor een bepaalde identifier is het begin van de tweede stap in de analyse. Wanneer deze afzonderlijke entiteiten deel uitmaken van een complex, zijn ze ook een doelwit in deze stap van de analyse. Naast de afzonderlijke entiteiten en complexen, is er een ander Type PE genaamd verzamelingen die, samen met complexen, ook moeten worden beschouwd. Een verzameling is een abstracte weergave van een groep van twee of meer entiteiten die niet met elkaar interageren maar functioneel gelijkwaardig zijn in de situatie waarin de verzameling wordt gebruikt, bijvoorbeeld meerdere leden van een familie van enzymen die elk een reactie kunnen katalyseren. Bovendien kunnen complexen en verzamelingen ook andere complexen en verzamelingen bevatten om veel uitgebreidere structuren weer te geven die de complexiteit van het probleem doen groeien.
een andere specifieke eis is de mogelijkheid om soortenprojectie uit te voeren om de resultaten voor Homo sapiens te verzamelen onafhankelijk van de soort waarvoor de identificatoren worden verstrekt, om te profiteren van de vollediger Reactoomannotatie voor de mens. Om dit te doen, moeten de soorten orthologs annotated in Reactome rekening worden gehouden. Orthologs zijn entiteiten in verschillende soorten die geëvolueerd van een gemeenschappelijke voorouder door speciatie.
de laatste vereiste in deze stap is het in kaart brengen van de identificatiemiddelen bij te houden tussen de ingediende identificatiemiddelen en de identificatiemiddelen die in Reactome worden gebruikt om de afzonderlijke entiteiten samen te stellen: uniprot-toetredingen voor eiwitten, Ensembl-identificatie voor genen, CHEBI-identificatiemiddelen voor kleine moleculen en miRBase voor microRNA ‘ s. Hoewel een belangrijk deel van deze mapping begon met het opnemen van de bekende kruisverwijzingen als identifiers in de radixboom in de vorige stap, moet de mapping zelf in deze stap worden geïmplementeerd.
een samenvatting van de blootgestelde vereisten voor deze stap van de analyse, moet de gekozen gegevensstructuur het probleem van de samenstelling van de entiteiten, de projectie van de soorten orthologs en de indeling van de entiteiten modelleren. Een gerichte grafiek is een grafiek, of verzameling van knooppunten verbonden door randen, waarbij de randen hebben een richting geassocieerd met hen. Voor een gegeven grafiek G met meerdere knopen (a, b, c en d), als G een pijl van a naar b heeft en een andere pijl van b naar c, dan heeft de samengestelde grafiek g 2 een pijl van a naar c. Als G een pijl heeft van a naar b, een andere pijl van b naar c en nog een van c naar d, dan heeft de samengestelde grafiek g 3 een pijl van a naar d.
bouwen van een grafiek per soort (Fig. 2a) en ze allemaal met elkaar verbinden en alle ortholog knooppunten met elkaar verbinden (Fig. 2b) creëert een grotere grafiek waar aan de projectievereiste dan wordt voldaan. Vanwege de uniciteit van het knooppunt in de laatste grafiek, voor die gevallen waarin een knooppunt deel uitmaakt van een of meer gestructureerde entiteiten, bevat het net zoveel randen die naar andere grafiekknooppunten wijzen als structuren waarin het is opgenomen, zodat gestructureerde entiteiten gemakkelijk kunnen worden gemodelleerd. Ten slotte, als elk knooppunt van de grafiek bevat zijn geassocieerde entiteit belangrijkste identifier (Fig. 2c), wanneer het wordt bereikt vanuit een Radix tree node die een andere identifier dan de belangrijkste vertegenwoordigt, wordt deze associatie opgeslagen om te worden aangeboden als onderdeel van het resultaat als de vereiste toewijzing zodra de analyse is voltooid.
de grafiek in Fig. 2a toont drie proteã nen (P1, P2 en P3), twee complexen (C1 en C2), en twee reeksen (S1 en S2). Door het volgen van de rand van knooppunt naar knooppunt, S2 kan ofwel P2 of P3, formeel weergegeven als . C1 is een complex dat, vanwege zijn rand van S2, dan potentieel twee complexen is: {P1, P2} of {P1, P3}, vertegenwoordigd als . Na deze deconstructie is S1 dan en uiteindelijk C2 .
bijvoorbeeld, wanneer een identifier die overeenkomt met P3 wordt verwerkt en de bijbehorende knoop in de grafiek wordt bereikt vanuit de radixboom, duurt het minuscule verwerkingstijd om de grafiek te doorlopen en de knopen S2, C1, S1 en C2 te bereiken. Eveneens, als de doelproteã ne P1 is, zijn de bereikbare knopen na de grafiekranden C1, S1 en C2. In beide voorbeelden maakt elke doelproteã ne deel uit van de complexen en reeksen die door de doorkruiste knopen worden vertegenwoordigd.
het gebruik van een grafiek verbetert de analyse-algoritme kosten en, belangrijk bij het bouwen van een in-memory analyse, wordt het geheugengebruik laag gehouden omdat er geen data duplicatie is omdat het knooppunt voor een bepaalde hoofdidentificatie slechts één keer in het geheugen is. Daarnaast wordt het uiteindelijke aantal knooppunt iteraties van het algoritme beperkt door de gerelateerde entiteiten voor een bepaalde identifier, het vermijden van query ‘ s tegen een grote hoeveelheid gegevens en tussentijdse resultaten samenvoegen, zoals gedaan in de database gebaseerde aanpak.
zoals voor de hierboven beschreven radixboom, vereist de grafiek ook een strategie om het algoritme in staat te stellen om door te gaan naar de volgende analysestap. In dit geval zal elk grafiekknooppunt dat een entiteit vertegenwoordigt die direct verbonden is met één of meerdere paden, zoveel koppelingen naar de volgende gegevensstructuur bevatten als verschillende locaties waar het aanwezig is. Hoewel in de huidige analysestap elke entiteit wordt gevonden die verband houdt met de doelidentifier, is er voor het eindresultaat en de berekening van de statistieken nog steeds een extra gegevensstructuur te gebruiken, zoals in de volgende subrubriek wordt uitgelegd.
Resultatenaggregatie in de trajecten organisatie
elke PE die direct of indirect werd geraakt in de vorige stap wordt geassocieerd met een of meer trajecten. Om de significantie van elke route te berekenen, voor een bepaalde gebruikersteekproef, is het essentieel om het aantal gevonden entiteiten per route te bepalen. Als gevolg van de ouder-kind organisatie van de Reactome routes in een ontologie-achtige hiërarchie, wanneer een entiteit aanwezig is in een bepaalde route is het ook aanwezig in zijn super-routes op een recursieve manier totdat een top-level route is bereikt (d.w.z. als een eiwit aanwezig is in “metabolisme van koolhydraten”, is het ook aanwezig in”metabolisme”).
rekening houdend met de eerder besproken vereisten, is een goede datastructuur om deze stap te modelleren een dubbel-gekoppelde boom, waarbij elk knooppunt een pad vertegenwoordigt en links naar zijn ouder en kinderen bevat (Fig. 3). Wanneer een knooppunt in de boom wordt geraakt, kan de actie recursief worden gepropageerd tot aan de root. Om de geheugenvoetafdruk te verkleinen, worden in elk knooppunt alleen identifiers, namen en plaatsaanduidingen voor resultaatberekening bewaard.