- Abstrakt
- introduktion
- bygga ett Clustering Tree
- en Demonstration med simuleringar
- ett enkelt exempel
- klustring träd för scRNA-seq Data
- diskussion
- metoder
- clustree
- simuleringar
- Iris dataset
- pbmc dataset
- tillgänglighet av källkod och krav
- tillgänglighet av stödjande data
- förkortningar
- konkurrerande intressen
- finansiering
- Författarbidrag
- bekräftelser
Abstrakt
Clusteringtekniker används ofta i analysen av stora dataset för att gruppera prover med liknande egenskaper. Till exempel används kluster ofta inom området för encellig RNA-sekvensering för att identifiera olika celltyper som finns i ett vävnadsprov. Det finns många algoritmer för att utföra kluster, och resultaten kan variera väsentligt. I synnerhet är antalet grupper som finns i en dataset ofta okänt, och antalet kluster som identifieras av en algoritm kan ändras baserat på de använda parametrarna. För att utforska och undersöka effekterna av varierande klusterupplösning presenterar vi klustringsträd. Denna visualisering visar relationerna mellan kluster vid flera upplösningar, så att forskare kan se hur prover rör sig när antalet kluster ökar. Dessutom kan metainformation överlagras på trädet för att informera valet av upplösning och vägledning vid identifiering av kluster. Vi illustrerar funktionerna i klustring träd med hjälp av en serie simuleringar samt två verkliga exempel, den klassiska iris dataset och en komplex single-cell RNA-sekvensering dataset. Clustering träd kan produceras med clustree R-paketet, tillgängligt från CRAN och utvecklat på GitHub.
introduktion
klusteranalys används ofta för att gruppera liknande prover över ett brett spektrum av applikationer. Vanligtvis är målet med kluster att bilda grupper av prover som liknar varandra mer än prover i andra grupper. Medan fuzzy eller soft clustering-metoder tilldelar varje prov till varje kluster med viss sannolikhet, och hierarkisk clustering bildar ett träd av prover, bildar de flesta metoder hårda kluster där varje prov tilldelas en enda grupp. Detta mål kan uppnås på olika sätt, till exempel genom att överväga avstånden mellan prover (t .ex. |$k$|-means , PAM ), områden med densitet över datasetet (t. ex. DBSCAN) eller relationer till statistiska fördelningar.
i många fall är antalet grupper som ska finnas i en dataset inte känt i förväg, och att bestämma rätt antal kluster att använda är en betydande utmaning. För vissa algoritmer, till exempel |$k$|-betyder kluster, måste antalet kluster uttryckligen anges. Andra metoder har parametrar som direkt eller indirekt styr klusterupplösningen och därmed antalet producerade kluster. Medan det finns metoder och statistik (som armbågsmetoden och siluettplott ) som är utformade för att hjälpa analytiker att bestämma vilken klusterupplösning som ska användas, producerar de vanligtvis en enda poäng som bara tar hänsyn till en enda uppsättning prover eller kluster åt gången.
ett alternativt tillvägagångssätt skulle vara att överväga kluster vid flera upplösningar och undersöka hur prover ändrar grupperingar när antalet kluster ökar. Detta har lett till en rad klusterstabilitetsåtgärder , varav många är beroende av kluster av störda eller subsamplade dataset. Till exempel delprover model explorer-algoritmen en dataset flera gånger, kluster varje delprovad dataset vid olika upplösningar och beräknar sedan en likhet mellan kluster med samma upplösning för att ge en fördelning av likheter som kan informera valet av upplösning . Ett klusterstabilitetsmått som inte är baserat på störningar är det som finns i SC3-paketet för klustring av encelliga RNA-sekvenseringsdata (scRNA-seq). Från och med en uppsättning klusteretiketter vid olika upplösningar görs varje kluster, med kluster tilldelade ökad stabilitet om de delar samma prover som ett kluster vid en annan upplösning men straffas för att ha en högre upplösning.
ett liknande enkelt tillvägagångssätt tas av klusterträdsvisualiseringen som vi presenterar här, utan att beräkna poäng: (i) en dataset är grupperad med någon hård klusteralgoritm vid flera upplösningar, vilket ger uppsättningar av klusternoder; (ii) överlappningen mellan kluster vid intilliggande upplösningar används för att bygga kanter; och (iii) den resulterande grafen presenteras som ett träd. Detta träd kan användas för att undersöka hur kluster är relaterade till varandra—vilka kluster är distinkta och vilka är instabila. I följande avsnitt beskriver vi hur vi konstruerar ett sådant träd och presenterar exempel på träd byggda från ett klassiskt klusterdataset och ett komplext scRNA-seq-dataset. Siffrorna som visas här kan produceras i R med vårt offentligt tillgängliga clustree-paket. Även om klustring av träd inte direkt kan ge en klusterupplösning att använda, kan de vara ett användbart verktyg för att utforska och visualisera utbudet av möjliga val.
bygga ett Clustering Tree
för att bygga ett clustering tree börjar vi med en uppsättning clusterings och fördelar prover till grupper vid flera olika upplösningar. Dessa kan produceras med vilken hårdklusteralgoritm som helst som tillåter kontroll av antalet kluster på något sätt. Till exempel kan detta vara en uppsättning prover grupperade med |$k$ / – betyder med / $k\,\, = \,\,1,2,3$| Såsom visas i Fig. 1. Vi sorterar dessa clusterings så att de beställs genom att öka upplösningen (|$k$|), sedan överväga par av intilliggande clusterings. Varje kluster / ${c_{k,\,\, i}}$ / (var |$i\,\, = \,\,1,\,\, \ldots,\,\, n$ / och / $n$ / är antalet kluster vid upplösning |$k$|) jämförs med varje kluster / ${c_{k + 1,\,\, j}}$ / (var |$j\,\, = \,\,1,\,\, \ldots,\,\, m$ / och / $M$ / är antalet kluster vid upplösning|$k + 1$/). Överlappningen mellan de två klustren beräknas som antalet prover som tilldelas både| ${c_{k,\,\,i}}$ |och|${c_{k + 1,\,\,j}}$/. Därefter bygger vi ett diagram där varje nod är ett kluster och varje kant är en överlappning mellan två kluster. Medan vi hänvisar till denna graf som ett träd för enkelhet, kan det mer korrekt beskrivas som en polytree, ett speciellt fall av en riktad acyklisk graf där den underliggande oriktade grafen är ett träd .
Illustration av de steg som krävs för att bygga ett klustringsträd. Först måste en dataset grupperas i olika upplösningar. Överlappningen i prover mellan kluster vid intilliggande upplösningar beräknas och används för att beräkna proportionen för varje kant. Slutligen filtreras kanterna och grafen visualiseras som ett träd.
Illustration av de steg som krävs för att bygga ett klustringsträd. Först måste en dataset grupperas i olika upplösningar. Överlappningen i prover mellan kluster vid intilliggande upplösningar beräknas och används för att beräkna proportionen för varje kant. Slutligen filtreras kanterna och grafen visualiseras som ett träd.
många av kanterna kommer att vara tomma, t.ex. i Fig. 1 inga prover i kluster a på / $k\,\, = \,\,2$| hamna i kluster B på / $k\,\, = \,\,3$|. I vissa datamängder kan det också finnas kanter som innehåller få prover. Dessa kanter är inte informativa och resulterar i ett rörigt träd. En uppenbar lösning för att ta bort uninformative, lågt antal kanter är att filtrera dem med hjälp av en tröskel på antalet prover de representerar. Men i det här fallet är räkningen av prover inte den korrekta statistiken att använda eftersom den gynnar kanter vid lägre upplösningar och de som förbinder större kluster. Istället definierar vi måttet i proportion som förhållandet mellan antalet prover på kanten och antalet prover i klustret Det går mot. Detta mått visar vikten av kanten till klustret med högre upplösning oberoende av klusterstorleken. Vi kan sedan tillämpa en tröskel på in-proportion för att ta bort mindre informativa kanter.
den slutliga grafen kan sedan visualiseras. I teorin kan någon graflayoutalgoritm användas. För clustree-paketet har vi dock använt de två algoritmer som är speciellt utformade för trädstrukturer som finns i igraph-paketet . Dessa är Reingold-Tilford – trädlayouten , som placerar föräldernoder ovanför sina barn, och Sugiyama-layouten, som placerar noder i en riktad acyklisk graf i lager samtidigt som antalet korsande kanter minimeras . Båda dessa algoritmer kan producera attraktiva layouter; som sådan har vi inte hittat behovet av att utforma en specifik layoutalgoritm för klustring av träd. Som standard använder clustree-paketet endast en delmängd av kanter när man konstruerar en layout, särskilt de högsta proportionella kanterna för varje nod. Vi har funnit att detta ofta leder till mer tolkbara visualiseringar; användare kan dock välja att använda alla kanter om så önskas.
oavsett vilken layout som används placerar den slutliga visualiseringen klusternoder i en serie lager där varje lager är en annan klusterupplösning och kanter visar övergången av prover genom dessa upplösningar. Kanterna är färgade enligt antalet prover de representerar, och måttet i proportion används för att styra kantens transparens, vilket markerar viktigare kanter. Som standard justeras nodstorleken efter antalet prover i klustret, och deras färg indikerar klusterupplösningen. Clustree-paketet innehåller också alternativ för att styra nodernas estetik baserat på attributen för prover i de kluster de representerar, som visas i följande exempel.
medan ett klustringsträd konceptuellt liknar det träd som produceras genom hierarkisk kluster, finns det några viktiga skillnader. Det mest uppenbara är att ett hierarkiskt klustringsträd är resultatet av en viss klustringalgoritm och visar förhållandena mellan enskilda prover, medan klustringsträden som beskrivs här är oberoende av klustringmetod och visar relationer mellan kluster. Grenarna i ett hierarkiskt träd visar hur klusteralgoritmen har sammanfogat prover. Däremot visar kanter i ett klustringsträd hur prover rör sig mellan kluster när upplösningen ändras och noder kan ha flera föräldrar. Även om det är möjligt att överlagra information om prover på ett hierarkiskt träd, görs detta inte vanligtvis utan är ett viktigt inslag i clustree-paketet och hur klustring av träd kan användas i praktiken.
en Demonstration med simuleringar
för att visa hur ett klustringsträd kan se ut i olika situationer och hur det beter sig som ett dataset är överklustrat, presenterar vi några illustrativa exempel med enkla simuleringar (se metoder). Vi presenterar fem scenarier: slumpmässigt enhetligt brus (simulering A), ett enda kluster (simulering B), två kluster (simulering C), tre kluster (simulering D) och fyra kluster (simulering E). Varje kluster består av 1000 prover (poäng) genererade från en 100-dimensionell normalfördelning, och varje syntetisk dataset har grupperats med |$k$| – betyder kluster med |$k\,\, = \,\,1,\,\, \ldots, 8$/. Vi använder sedan clustree-paketet för att producera klustringsträd för varje dataset (Fig. 2).
fem syntetiska datamängder används för att demonstrera kluster träd. För varje dataset visas en scatter-plot av de två första huvudkomponenterna, ett standardklusterträd och klusterträd med noder färgade av SC3-stabilitetsindexet från lila (lägsta) till gult (högsta). De fem datauppsättningarna innehåller: (A) slumpmässigt enhetligt brus, (B) ett enda kluster, (C) två kluster, (D) tre kluster och (e) fyra kluster.
fem syntetiska datamängder används för att demonstrera kluster träd. För varje dataset visas en scatter-plot av de två första huvudkomponenterna, ett standardklusterträd och klusterträd med noder färgade av SC3-stabilitetsindexet från lila (lägsta) till gult (högsta). De fem datauppsättningarna innehåller: (A) slumpmässigt enhetligt brus, (B) ett enda kluster, (C) två kluster, (D) tre kluster och (e) fyra kluster.
om vi tittar på de två första exemplen (enhetligt brus och ett enda kluster) kan vi tydligt se hur ett klustringsträd beter sig när en klusteralgoritm returnerar fler kluster än vad som verkligen finns i en dataset. Nya kluster börjar bildas från flera befintliga kluster, och många prover växlar mellan grenar av trädet, vilket resulterar i låga proportioner. Instabila kluster kan också visas och sedan försvinna när upplösningen ökar, vilket ses i Fig. 2E. när vi lägger till mer struktur i datamängderna börjar klustringsträden att bilda tydliga grenar och låga proportionella kanter tenderar att vara begränsade till delar av trädet. Genom att titta på vilka kluster som är stabila och där låga proportionella kanter uppstår kan vi dra slutsatsen vilka områden av trädet som sannolikt kommer att vara resultatet av sanna kluster och som orsakas av överklustring.
det andra klustringsträdet för varje dataset visar noder färgade enligt SC3-stabilitetsindex för varje kluster. Som vi förväntar oss får inget kluster en hög stabilitetspoäng i de två första exemplen. Men medan vi tydligt ser två grenar i klustringsträdet för exemplet med tvåkluster (simulering C), återspeglas detta inte i SC3-poängen. Inget kluster får en hög stabilitetspoäng, troligen på grund av det stora antalet prover som rör sig mellan kluster när upplösningen ökar. Eftersom det finns fler sanna kluster i de simulerade datamängderna blir SC3-stabilitetspoängen mer förutsägbara för rätt upplösning att använda. Det är dock viktigt att titta på stabilitetspoängen för alla kluster vid en viss upplösning, eftersom det högsta individuella klusterstabilitetspoängen kan leda till att den felaktiga upplösningen används, vilket kan ses i exemplet med fyra kluster (simulering E). Dessa exempel visar hur klustring av träd kan användas för att visa befintliga klustringsmått på ett sätt som kan hjälpa till att informera parameterval.
ett enkelt exempel
för att ytterligare illustrera hur ett klustringsträd byggs, kommer vi att arbeta igenom ett exempel med den klassiska iris dataset . Denna dataset innehåller mätningar av sepal längd, sepal bredd, kronblad längd och kronblad bredd från 150 iris blommor, 50 från var och en av tre arter: Iris setosa, Iris versicolor och Iris virginica. Iris dataset används ofta som ett exempel för både klustrings-och klassificeringsproblem med I. setosa-prover skiljer sig avsevärt från, och linjärt separerbar från, de andra proverna. Vi har klustrat denna dataset med |$k$ / – betyder kluster med / $k\,\, = \,\,1,\,\, \ldots, 5$ / och producerade klustringsträdet som visas i Fig. 3A.
Clustering träd baserat på|$k$ / -betyder clustering av iris dataset. (A) noder är färgade enligt värdet på |$k$| och dimensionerade enligt antalet prover de representerar. Kanterna är färgade enligt antalet prover (från blått som representerar få till Gula som representerar många). Transparensen justeras enligt proportionen, med starkare linjer som visar kanter som är viktigare för klustret med högre upplösning. Klusteretiketter tilldelas slumpmässigt av algoritmen|$k$ / -means. (B) samma träd med noden färg ändras för att visa den genomsnittliga kronblad längden av proverna i varje kluster.
Clustering träd baserat på|$k$ / -betyder clustering av iris dataset. (A) noder är färgade enligt värdet på |$k$| och dimensionerade enligt antalet prover de representerar. Kanterna är färgade enligt antalet prover (från blått som representerar få till Gula som representerar många). Transparensen justeras enligt proportionen, med starkare linjer som visar kanter som är viktigare för klustret med högre upplösning. Klusteretiketter tilldelas slumpmässigt av algoritmen|$k$ / -means. (B) samma träd med noden färg ändras för att visa den genomsnittliga kronblad längden av proverna i varje kluster.
vi ser att en gren av trädet är tydligt distinkt (förmodligen representerar I. setosa), förblir oförändrad oavsett antalet kluster. På andra sidan ser vi att klustret på / $k\,\, = \,\,2$| delas Rent i två kluster (förmodligen I. versicolor och I. virginica) på / $k\,\, = \,\,3$|. Men när vi flyttar till / $k\,\, = \,\,4$| och / $k\,\, = \,\,5$|, vi ser att kluster bildas från flera grenar med mer låga proportioner. Som vi har sett i de simulerade exemplen kan denna typ av mönster indikera att data har blivit överklustrade och vi har börjat introducera artificiella grupperingar.
vi kan kontrollera vårt antagande att den distinkta grenen representerar I. setosa-proverna och att de andra två klusterna vid / $k\,\, = \,\,3$| är I. versicolor och I. virginica genom att lägga över viss känd information om proverna. I Fig. 3B vi har färgat noderna med den genomsnittliga kronbladets längd på proverna de innehåller. Vi kan nu se att kluster i den distinkta grenen har de kortaste kronbladen, med kluster 1 vid / $k\,\, = \,\,3$| har en mellanliggande längd och kluster 3 med de längsta kronbladen. Denna funktion är känd för att separera proverna i den förväntade arten, med I. setosa som har de kortaste kronbladen i genomsnitt, I. versicolor en mellanliggande längd och I. virginica den längsta.
även om detta är ett mycket enkelt exempel, belyser det några av fördelarna med att titta på ett klustringsträd. Vi får en viss indikation på rätt klusterupplösning genom att undersöka kanterna, och vi kan överlagra känd information för att bedöma kvaliteten på klustringen. Om vi till exempel observerade att alla kluster hade samma genomsnittliga kronbladslängd, skulle det föreslå att klustringen inte har lyckats eftersom vi vet att detta är en viktig egenskap som skiljer arten. Vi kan potentiellt lära oss mer genom att titta på vilka prover som följer kanter med låg andel eller genom att lägga över en serie funktioner för att försöka förstå vad som orsakar att vissa kluster delas upp.
klustring träd för scRNA-seq Data
ett fält som har börjat göra tung användning av klustringstekniker är analysen av scRNA-seq data. scRNA-sekvensering är en nyutvecklad teknik som kan mäta hur gener uttrycks i tusentals till miljoner enskilda celler . Denna teknik har snabbt antagits inom områden som utvecklingsbiologi och immunologi där det är värdefullt att ha information från enskilda celler snarare än mätningar som är genomsnittliga över de många olika cellerna i ett prov med äldre RNA-seq-tekniker. En viktig användning för scRNA-seq är att upptäcka och förhöra de olika celltyper som finns i ett prov av en komplex vävnad. I denna situation används kluster vanligtvis för att gruppera liknande celler baserat på deras genuttrycksprofiler. Skillnader i genuttryck mellan grupper kan sedan användas för att härleda identiteten eller funktionen hos dessa celler . Antalet celltyper (kluster) i en scRNA-seq-dataset kan variera beroende på faktorer som vävnaden som studeras, dess utvecklings-eller miljötillstånd och antalet fångade celler. Ofta är antalet celltyper inte känt innan data genereras, och vissa prover kan innehålla dussintals kluster. Därför är det viktigt att bestämma vilken klusterupplösning som ska användas i denna applikation.
som ett exempel på hur klustring av träd kan användas i scRNA-seq-sammanhanget betraktar vi en vanligt använd perifert blodmononukleär cell (PBMC) dataset. Denna dataset producerades ursprungligen av 10x Genomics och innehåller 2,700 perifera blodmononukleära celler, som representerar en rad väl studerade immuncellstyper . Vi analyserade denna dataset med hjälp av Seurat-paketet, en vanligt använd verktygslåda för scRNA-seq-analys, enligt instruktionerna i deras handledning med undantag för att variera klusterupplösningsparametern från noll till 5 (se metoder). Seurat använder en grafbaserad klusteralgoritm, och upplösningsparametern styr partitioneringen av denna graf, med högre värden som resulterar i fler kluster. De klustring träd som produceras från denna analys visas i Fig. 4.
två kluster träd av en dataset av 2,700 Pbmc. (A) resultat från kluster med Seurat med upplösningsparametrar från noll till 1. Vid en upplösning på 0,1 ser vi bildandet av fyra huvudgrenar, varav en fortsätter att delas upp till en upplösning på 0,4, varefter det bara finns mindre förändringar. (B) resolutioner från noll till 5. Vid de högsta upplösningarna börjar vi se många låga proportioner kanter, vilket indikerar klusterinstabilitet. Seurat märker kluster enligt deras storlek, med kluster 0 som den största.
två kluster träd av en dataset av 2,700 Pbmc. (A) resultat från kluster med Seurat med upplösningsparametrar från noll till 1. Vid en upplösning på 0,1 ser vi bildandet av fyra huvudgrenar, varav en fortsätter att delas upp till en upplösning på 0,4, varefter det bara finns mindre förändringar. (B) resolutioner från noll till 5. Vid de högsta upplösningarna börjar vi se många låga proportioner kanter, vilket indikerar klusterinstabilitet. Seurat märker kluster enligt deras storlek, med kluster 0 som den största.
klusterträdet som täcker upplösningar noll till 1 i steg om 0,1 (Fig. 4A) visar att fyra huvudgrenar bildas med en upplösning på bara 0,1. En av dessa grenar, som börjar med kluster 3 vid upplösning 0.1, förblir oförändrad, medan grenen som börjar med kluster 2 delas endast en gång med en upplösning på 0.4. Det mesta av förgreningen sker i grenen som börjar med kluster 1, som konsekvent har delgrenar delade för att bilda nya kluster när upplösningen ökar. Det finns två regioner med stabilitet i detta träd—vid upplösning 0,4–0,5 och upplösning 0,7–1,0 där grenen som börjar vid kluster 0 delas i två.
Fig. 4B visar ett klustringsträd med ett större upplösningsområde, från noll till 5 i steg om 0,5. Genom att titta över detta intervall kan vi se vad som händer när algoritmen tvingas producera fler kluster än sannolikt kommer att vara verkligt närvarande i denna dataset. Som overclustering inträffar, vi börjar se mer låga proportioner kanter och nya kluster som bildas från flera föräldrakluster. Detta tyder på att dessa områden i trädet är instabila och att de nya kluster som bildas sannolikt inte representerar sanna grupper i datauppsättningen.
kända markörgener används ofta för att identifiera de celltyper som specifika kluster motsvarar. Överlagring av genuttrycksinformation på ett klustringsträd ger en alternativ vy som kan hjälpa till att indikera när kluster som innehåller rena cellpopulationer bildas. Figur 5 visar pbmc-klustringsträdet i Fig. 4A överlagrad med uttrycket av några kända markörgener.
klustring träd av PBMC dataset färgade enligt uttrycket av kända markörer. Nodfärgerna indikerar genomsnittet av log2-genantalet av prover i varje kluster. CD19 (a) identifierar B-celler, CD14 (B) visar en population av monocyter, CD3D (C) är en markör för T-celler och CCR7 (D) visar uppdelningen mellan minne och naiva CD4-T-celler.
klustring träd av PBMC dataset färgade enligt uttrycket av kända markörer. Nodfärgerna indikerar genomsnittet av log2-genantalet av prover i varje kluster. CD19 (a) identifierar B-celler, CD14 (B) visar en population av monocyter, CD3D (C) är en markör för T-celler och CCR7 (D) visar uppdelningen mellan minne och naiva CD4-T-celler.
genom att lägga till denna extra information kan vi snabbt identifiera några av celltyperna. CD19 (Fig. 5A) är en markör för B-celler och uttrycks tydligt i trädets mest distinkta gren. CD14 (Fig. 5B) är en markör för en typ av monocyt, som blir mer uttryckt när vi följer en av de centrala grenarna, så att vi kan se vilken upplösning som identifierar en ren population av dessa celler. CD3D (Fig. 5C) är en allmän markör för T-celler och uttrycks i två separata grenar, en som delas upp i lågt och högt uttryck av CCR7 (Fig. 5D), separera minne och naiva CD4 T-celler. Genom att lägga till uttryck av kända gener till ett klustringsträd kan vi se om fler populationer kan identifieras när klusterupplösningen ökas och om kluster överensstämmer med känd biologi. För de flesta av Seurat-handledningen används en upplösning på 0, 6, men författarna noterar att genom att flytta till en upplösning på 0, 8 kan en delning uppnås mellan minne och naiva CD4 T-celler. Detta är en splittring som kan förväntas genom att titta på klustringsträdet med tillägg av tidigare information.
diskussion
Clustering liknande prover i grupper är en användbar teknik inom många områden, men ofta står analytiker inför det knepiga problemet att bestämma vilken klusterupplösning som ska användas. Traditionella tillvägagångssätt för detta problem överväger vanligtvis ett enda kluster eller prov i taget och kan förlita sig på förkunskaper om provetiketter. Här presenterar vi clustering trees, en alternativ visualisering som visar relationerna mellan clusterings vid flera upplösningar. Medan klustring av träd inte direkt kan föreslå vilken klustringsupplösning som ska användas, kan de vara ett användbart verktyg för att hjälpa till att fatta det beslutet, särskilt i kombination med andra mätvärden eller domänkunskap.
Klustringsträd visar hur kluster delas när upplösningen ökar, vilka kluster är tydligt separata och distinkta, vilka är relaterade till varandra och hur prover ändrar grupper när fler kluster produceras. Även om kluster av träd kan likna de träd som produceras från hierarkisk kluster, finns det flera viktiga skillnader. Hierarkisk gruppering beaktar förhållandena mellan enskilda prover och ger inte ett uppenbart sätt att bilda grupper. Däremot är klustringsträd oberoende av någon speciell klustringsmetod och visar förhållandena mellan kluster, snarare än prover, vid olika upplösningar, varav någon kan användas för vidare analys.
för att illustrera användningen av klustring träd presenterade vi en serie simuleringar och två exempel på verkliga analyser, en med den klassiska iris dataset och en andra baserad på en komplex scRNA-seq dataset. Båda exemplen visar hur ett klustringsträd kan hjälpa till att informera beslutet om vilken upplösning som ska användas och hur överlagring av extra information kan hjälpa till att validera dessa kluster. Detta är särskilt användbart för scRNA-seq-analys eftersom dessa datamängder ofta är stora, bullriga och innehåller ett okänt antal celltyper eller kluster.
även om det inte är ett problem att bestämma antalet kluster kan klustring av träd vara ett värdefullt verktyg. De ger en kompakt, informations tät visualisering som kan visa sammanfattad information över en rad kluster. Genom att modifiera utseendet på klusternoder baserat på attribut för de prover de representerar kan kluster utvärderas och identiteter av kluster etableras. Klustring träd potentiellt har tillämpningar inom många områden och, i framtiden, skulle kunna anpassas för att vara mer flexibel, såsom genom att rymma fuzzy clusterings. Det kan också användas för mer allmänna klusterdiagram för att kombinera resultat från flera uppsättningar parametrar eller klustermetoder.
metoder
clustree
programvarupaketet clustree (v0.2.0) är byggt för R statistiskt programmeringsspråk (v3.5.0). Det bygger på ggraph-paketet (v1.0.1) , som är byggt på ggplot2 (v2.2.1) och tidygraph (v1.1.0) paket. Klustringsträd visas med Reingold-Tilford – trädlayouten eller Sugiyama-layouten; båda är tillgängliga som en del av igraph-paketet (v1.2.1).
Figurpaneler som visas här tillverkades med hjälp av cowplot-paketet (v0.9.2) .
simuleringar
simulerade datamängder konstruerades genom att generera poäng från statistiska fördelningar. Den första simuleringen (simulering a) består av 1 000 poäng slumpmässigt genererade från ett 100-dimensionellt utrymme med en enhetlig fördelning mellan noll och 10. Simulering B består av ett enda normalt distribuerat kluster med 1 000 punkter i 100 dimensioner. Centrum för detta kluster valdes från en normalfördelning med medel noll och standardavvikelse 10. Punkter genererades sedan runt detta centrum från en normalfördelning med medelvärde lika med mittpunkten och en standardavvikelse på 5. De återstående tre simuleringarna producerades genom att lägga till ytterligare kluster. För att ha ett känt förhållande mellan kluster skapades centrum för de nya klusterna genom att manipulera centren för befintliga kluster. För kluster 2 genererades en slumpmässig 100-dimensionell vektor från en normalfördelning med medelnoll och standardavvikelse 2 och sattes till centrum för kluster 1. Centrum 3 var genomsnittet av centrum 1 och centrum 2 plus en slumpmässig vektor från en normalfördelning med medel noll och standardavvikelse 5. För att säkerställa ett liknande förhållande mellan kluster 3 och 4 som mellan kluster 1 och 2 producerades centrum 4 genom att lägga till hälften av vektorn som användes för att producera centrum 2 till centrum 3 plus en annan vektor från en normalfördelning med medel noll och standardavvikelse 2. Poäng för varje kluster genererades på samma sätt som för kluster 1. Simulering C består av punkterna i kluster 1 och 2; simulering d består av kluster 1, 2 och 3; och simulering e består av kluster 1, 2, 3 och 4. Varje simulerad dataset grupperades med funktionen” kmeans ” i statistikpaketet med värden på |$k$| från 1 till 8, högst 100 iterationer och 10 slumpmässiga startpositioner. Klusterträdets visualiseringar producerades med clustree-paketet med trädlayouten. De simulerade datamängderna och koden som används för att producera dem är tillgängliga från arkivet för den här artikeln .
Iris dataset
iris dataset är tillgängligt som en del av R. Vi grupperade denna dataset med funktionen” kmeans ” i statistikpaketet med värden på |$k$| från 1 till 5. Varje värde på / $k$ / grupperades med högst 100 iterationer och med 10 slumpmässiga startpositioner. Clustree-paketet användes för att visualisera resultaten med Sugiyama-layouten. Det klustrade iris-datasetet är tillgängligt som en del av clustree-paketet.
pbmc dataset
PBMC dataset hämtades från Seurat tutorial sida , och denna handledning följdes under större delen av analysen med Seurat version 2.3.1. Kortfattat filtrerades celler baserat på antalet gener de uttrycker och andelen räkningar tilldelade mitokondriella gener. Datan log-normaliserades därefter och 1.838 variabelgener identifierades. Potentiella förvirrande variabler (antal unika molekylära identifierare och procentuellt mitokondriellt uttryck) regresserades från datasetet innan de utförde huvudkomponentanalys på de identifierade variabla generna. De första 10 huvudkomponenterna användes sedan för att bygga en graf som delades upp i kluster med Louvain modularitetsoptimering med upplösningsparametrar i intervallet noll till 5, i steg om 0,1 mellan noll och 1 och sedan i steg om 0,5. Clustree användes sedan för att visualisera resultaten med hjälp av trädlayouten.
tillgänglighet av källkod och krav
Projektnamn: clustree.
projektets hemsida: https://github.com/lazappi/clustree.
operativsystem: Linux, MacOS, Windows
programmeringsspråk: R (> = 3.4)
övriga krav: Ingen
licens: GPL-3
eventuella begränsningar för användning av icke-akademiker: ingen
RRID:SCR_016293
tillgänglighet av stödjande data
clustree-paketet är tillgängligt från CRAN och utvecklas på GitHub . Koden och datamängderna som används för analysen som presenteras här är också tillgängliga från GitHub . Den klustrade iris dataset ingår som en del av clustree, och PBMC dataset kan laddas ner från Seurat tutorial sida eller paper GitHub repository. Ögonblicksbilder av koden finns i GigaScience-arkivet, GigaDB .
förkortningar
PBMC: mononukleär cell i perifert blod; scRNA-seq: encellig RNA-sekvensering.
konkurrerande intressen
författarna förklarar att de inte har några konkurrerande intressen.
finansiering
lz stöds av ett australiskt statligt Forskningsutbildningsprogram stipendium. Ao stöds genom ett nationellt hälso-och medicinskt forskningsråd Career Development fellowship (APP1126157). Murdoch Children ’ s Research Institute stöds av den viktorianska regeringens operativa Infrastrukturstödsprogram.
Författarbidrag
L. Z. designade klusterträdsalgoritmen, skrev clustree-programvarupaketet och utarbetade manuskriptet. A. O. övervakade projektet och kommenterade manuskriptet.
bekräftelser
tack till Marek Cmero för att ge synpunkter på ett utkast till manuskriptet och granskare för deras kommentarer och förslag.
.
.
.
;
:
–
.
.
. I
,
.
.
.
.
;
:
–
.
,
.
,
.
.
. PP.
–
.
,
,
, et al.
.
.
:
;
. PP.
–
..
:
,
.
.
.
;
:
–
.
.
.
.
;
:
–
.
.
.
.
;
:
–
.
.
.
.
;
:
–
.
,
,
.
.
.
,
;
–
.
,
,
et al.
.
.
;
:
–
.
,
.
.
;
.
,
.
.
.
;
:
–
.
,
.
.
.
;
:
–
.
,
,
.
.
.
;
:
–
.
.
.
.
;
:
–
.
.
.
.
;
:
–
.
,
,
, et al.
.
.
;
:
–
.
,
,
.
.
.
;
:
–
.
,
,
, et al.
.
.
;
:
.
,
,
, et al.
.
.
;
:
–
.
.
.
.
.
.
:
;
.
.
.
.
.
.
.
,
.
,
.
.
.
. ;
.
,
,
, et al.
.
.
;
;
:
.
,
.
.
.
,
.
. ;
.
.
,
.
.
.
. .