Weiter zum Inhalt

Einführung in Bioconductor

Lerne, wie du die Ergebnisse deines biologischen Experiments rechnerisch und statistisch auswertest.
Aktualisiert 18. Sept. 2026  · 8 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

In diesem Tutorial lernst du das Bioconductor-Ökosystem kennen. Damit kannst du die Ergebnisse deiner biologischen Experimente rechnerisch und statistisch auswerten – ein Muss für alle, die die Aussagekraft ihrer Schlussfolgerungen belegen wollen. Kurz gesagt: Du kannst prüfen, ob deine Daten mit deiner Hypothese vereinbar sind, und deine wissenschaftliche Fragestellung statistisch untermauern, ohne unnötig Zeit und Geld zu verbrauchen.

Im Überblick klärt dieses Tutorial:

  • Was ist Bioconductor?
  • Wofür stehen die R-Pakete von Bioconductor?
  • Wie setzen wir sie praktisch ein?

Kurzüberblick

Bioconductor: Analyse und Verständnis von Hochdurchsatz-Genomdaten

Bioconductor ist ein offenes Softwareprojekt für Computational Biology und Bioinformatik. Es ist Open Source, weil jeder den Quellcode lesen und ändern kann, und Open Development, weil jede Person zur Weiterentwicklung beitragen kann. Die Plattform basiert auf der Sprache R, die in der Datenwissenschaft weit verbreitet ist – flexibel für Datenanalysen und mit hochwertiger Grafik. Bioconductor bietet leistungsstarke statistische und grafische Methoden zur Analyse von Genomdaten und erleichtert die Einbindung biologischer Metadaten wie GenBank, GO, LocusLink und PubMed in die Auswertung experimenteller Daten.

Zudem ermöglicht es die schnelle Entwicklung erweiterbarer, interoperabler und skalierbarer Software. Auch hochwertige Dokumentation und reproduzierbare Forschung werden durch Bioconductor gefördert. Es bietet Schulungsressourcen zu rechnergestützten und statistischen Methoden. Grob lässt sich Bioconductor in drei Bereiche gliedern:

Statistische Analyse Verständnis Hochdurchsatz
Große Datenmengen Biologischer Kontext Sequenzierung
Technologische Artefakte Visualisierung Mikroarrays
Geplante Experimente Reproduzierbarkeit Durchflusszytometrie

Analysen in der Computational Biology benötigen fast immer eine Kombination vieler Werkzeuge, um konkrete Fragestellungen zu beantworten. Häufig entsteht daraus ein Paket, das auch andere Forschende nutzen. Bioconductor ist daher zugleich ein Software-Repository für R-Pakete mit klaren Regeln und Leitlinien. Version 3.7 umfasst über 1.500 Pakete, die weltweit von Tausenden Forschenden genutzt werden – mit in der Regel exzellenter Dokumentation. Da jeder beitragen kann, gibt es oft mehrere Optionen für ein und dasselbe Problem – was einen gesunden Wettbewerb unter den Paketentwicklern schafft.

Auf der Website findest du alles zur Installation, zum Lernen, zur Nutzung und zum Mitwirken an Bioconductor-Projekten. Das Projekt startete im Herbst 2001 und wird von über 20 Kernentwicklern in den USA, Europa und Australien getragen.

bioconductor

Kurz gesagt: Bioconductor steht für statistische Analyse und Verständnis von Hochdurchsatz-Genomdaten. Der Fokus auf Statistik ergibt sich aus der Natur der Daten: Moderne Methoden erzeugen enorme Datenmengen, die einer statistischen Zusammenfassung bedürfen. Wir müssen Experimente gezielt und im statistischen Rahmen planen. Die Technologien, die moderne genetische Datentypen liefern, und die Laborprotokolle bringen Artefakte mit sich, die statistisch adressiert werden müssen. Schließlich zwingt uns die kompakte Datenintegration dazu, die statistischen Konsequenzen jedes Verarbeitungsschritts genau zu bedenken.

Bioconductor-R-Pakete

Bioconductor-Software besteht aus R-Erweiterungspaketen. Ein R-Paket ist eine strukturierte Sammlung aus Code (R, C oder andere), Dokumentation und/oder Daten für bestimmte Analysen, z. B. affy-, cluster- oder graph-Pakete. Es liefert Implementierungen spezieller statistischer und grafischer Verfahren.

In der aktuellen Release-Version von Bioconductor stehen über 1.500 Pakete zur Verfügung. Sie lassen sich grob in vier Typen einteilen:

• Analysepakete: Werkzeuge zur Analyse von Hochdurchsatz-Genomdaten, z. B. IMMAN, limma

• Annotation-Pakete: Statische Datenbanken mit Identifier-Mappings, Genmodellen, Signalwegen etc.; z. B. TxDb.Hsapiens.UCSC.hg19.knownGene

• Experimentdaten-Pakete: Datensätze zur Veranschaulichung von Softwarefunktionen, z. B. airway

• Workflow-Pakete: Dokumente, die Bioinformatik-Workflows mit mehreren Bioconductor-Paketen beschreiben, um spezielle Bereiche der Biologie zu erklären, etwa Proteomik, z. B. highthroughputassays

Wichtige Bioconductor-Pakete

Bioconductor in der Praxis

Installation

Wenn du Bioconductor zum ersten Mal nutzt, installiere zunächst die aktuelle R-Version und anschließend die neueste Version von Bioconductor, indem du R startest und folgende Befehle eingibst:

## try http:// if https:// URLs are not supported
source("https://bioconductor.org/biocLite.R")
biocLite()

Diese Befehle installieren alle Kernpakete der aktuellen Bioconductor-Release-Version. Um spezielle Pakete wie IMMAN und GenomicRanges aus dem Bioconductor-Repository zu installieren, folge den Anweisungen auf der jeweiligen Paketseite, z. B.:

source("https://bioconductor.org/biocLite.R")
biocLite(c( "Biostrings", "GenomicRanges", "IMMAN"))

Die Funktion biocLite() aus dem Paket BiocInstaller wird für die Paketinstallation anstelle von install.packages() verwendet. Der Grund: Bioconductor besitzt ein eigenes Repository getrennt von CRAN und einen eigenen Release-Zyklus. Dadurch können R- und Bioconductor-Releases asynchron sein, und die von install.packages() identifizierte Version ist nicht immer die aktuellste verfügbare „Release“.

Anwendungsbeispiele

Nach der Grundinstallation zeigen wir dir hier einfache Beispiele aus dem Bioconductor-Arbeitsumfeld, um den Einstieg zu erleichtern. Zwei Beispiele vereinen unterschiedliche Komponenten des Projekts wie Hochdurchsatz-Sequenzierung, statistische Analyse und Interpretation.

Zum Einstieg in Hochdurchsatzdaten arbeitest du mit DNA-Sequenzen. Dafür nutzt du Biostring, ein zentrales Paket zur Verarbeitung großer biologischer Sequenzen. Mit DNAStringSet() speicherst du eine Menge von DNAStrings (Zeichenketten auf Basis des DNA-Alphabets gemäß dem erweiterten IUPAC-Genetalphabet). Die Eingabe wird in ein XStringSet-Objekt des DNA-Typs umgewandelt. Die Buchstaben sind so codiert, dass schnelle Suchalgorithmen effizient arbeiten.

library(Biostrings)

## Loading required package: BiocGenerics

## Loading required package: parallel

##
## Attaching package: 'BiocGenerics'

## The following objects are masked from 'package:parallel':
##
##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
##     clusterExport, clusterMap, parApply, parCapply, parLapply,
##     parLapplyLB, parRapply, parSapply, parSapplyLB

## The following objects are masked from 'package:stats':
##
##     IQR, mad, sd, var, xtabs

## The following objects are masked from 'package:base':
##
##     anyDuplicated, append, as.data.frame, basename, cbind,
##     colMeans, colnames, colSums, dirname, do.call, duplicated,
##     eval, evalq, Filter, Find, get, grep, grepl, intersect,
##     is.unsorted, lapply, lengths, Map, mapply, match, mget, order,
##     paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind,
##     Reduce, rowMeans, rownames, rowSums, sapply, setdiff, sort,
##     table, tapply, union, unique, unsplit, which, which.max,
##     which.min

## Loading required package: S4Vectors

## Loading required package: stats4

##
## Attaching package: 'S4Vectors'

## The following object is masked from 'package:base':
##
##     expand.grid

## Loading required package: IRanges

##
## Attaching package: 'IRanges'

## The following object is masked from 'package:grDevices':
##
##     windows

## Loading required package: XVector

##
## Attaching package: 'Biostrings'

## The following object is masked from 'package:base':
##
##     strsplit

dnaSequence <- DNAStringSet( c("AAACTG", "CCCAACCA") )
dnaSequence

##   A DNAStringSet instance of length 2
##     width seq
## [1]     6 AAACTG
## [2]     8 CCCAACCA

Anschließend kannst du mit der Funktion complement() die komplementären DNA-Sequenzen berechnen.

complement(dnaSequence)

##   A DNAStringSet instance of length 2
##     width seq
## [1]     6 TTTGAC
## [2]     8 GGGTTGGT

Das Arbeiten mit Paketen wie DNAStringSet und Biostrings zahlt sich auch in anderen Paketen aus.

Im nächsten Beispiel nutzen wir das Paket GenomicRanges zur Darstellung genomischer Positionen innerhalb des Bioconductor-Projekts. Es bildet die Basis für Genomanalysen mit drei Klassen (GRanges, GPos und GRangesList) zur Darstellung genomischer Bereiche, Positionen und Gruppen von Bereichen.

Die Klasse GRanges beschreibt eine Menge genomischer Bereiche mit jeweils einem Start- und Endpunkt im Genom. Sie speichert die Lage genomischer Features wie Bindestellen, Transkripte und Exons. Du erstellst solche Objekte mit dem Konstruktor GRanges wie folgt:

library(GenomicRanges)

## Loading required package: GenomeInfoDb

grangeObj <-
  GRanges(seqnames =
            Rle(c("chr1", "chr2", "chr1", "chr3"), c(1, 3, 2, 4)),
          ranges =
            IRanges(1:10, end = 7:16, names = head(letters, 10)),
          strand =
            Rle(strand(c("-", "+", "*", "+", "-")),
                c(1, 2, 2, 3, 2)),
          score = 1:10,
          GC = seq(1, 0, length=10))

grangeObj

## GRanges object with 10 ranges and 2 metadata columns:
##     seqnames    ranges strand |     score                GC
##        <Rle> <IRanges>  <Rle> | <integer>         <numeric>
##   a     chr1       1-7      - |         1                 1
##   b     chr2       2-8      + |         2 0.888888888888889
##   c     chr2       3-9      + |         3 0.777777777777778
##   d     chr2      4-10      * |         4 0.666666666666667
##   e     chr1      5-11      * |         5 0.555555555555556
##   f     chr1      6-12      + |         6 0.444444444444444
##   g     chr3      7-13      + |         7 0.333333333333333
##   h     chr3      8-14      + |         8 0.222222222222222
##   i     chr3      9-15      - |         9 0.111111111111111
##   j     chr3     10-16      - |        10                 0
##   -------
##   seqinfo: 3 sequences from an unspecified genome; no seqlengths

Das Ergebnis ist ein GRanges-Objekt mit 10 genomischen Bereichen. Wie zu sehen, trennt die Darstellung Informationen in einen linken und rechten Teil, getrennt durch |. Links stehen die Genomkoordinaten (seqnames, ranges, strand), rechts die Metadaten-Spalten (Annotation). In diesem Beispiel enthalten die Metadaten Score und GC-Informationen. Grundsätzlich lassen sich in den Metadaten nahezu beliebige Informationen speichern.

Mit den Hilfsfunktionen seqnames(), ranges() und strand() greifst du auf die Komponenten der Genomkoordinaten innerhalb eines GRanges-Objekts zu. Zum Beispiel:

seqnames(grangeObj)

## factor-Rle of length 10 with 4 runs
##   Lengths:    1    3    2    4
##   Values : chr1 chr2 chr1 chr3
## Levels(3): chr1 chr2 chr3

ranges(grangeObj)

## IRanges object with 10 ranges and 0 metadata columns:
##         start       end     width
##     <integer> <integer> <integer>
##   a         1         7         7
##   b         2         8         7
##   c         3         9         7
##   d         4        10         7
##   e         5        11         7
##   f         6        12         7
##   g         7        13         7
##   h         8        14         7
##   i         9        15         7
##   j        10        16         7

strand(grangeObj)

## factor-Rle of length 10 with 5 runs
##   Lengths: 1 2 2 3 2
##   Values : - + * + -
## Levels(3): + - *

Zum Abschluss ein einfaches Beispiel für den statistischen Teil des Projekts: die Gene Ontology (GO). GO ist eine Sammlung von Begriffen (molekulare Funktion, zelluläre Komponente, biologischer Prozess) zur Beschreibung von Genfunktionen und ihrer Beziehungen. Konkret ordnet GO Gene und Genprodukte hierarchisch in einem Ontologie-Graphen. Für ein praktisches Beispiel nutzen wir drei Bioconductor-Pakete: clusterProfiler, DOSE und org.Hs.eg.db.

library("clusterProfiler")

##

## clusterProfiler v3.8.1  For help: https://guangchuangyu.github.io/software/clusterProfiler
##
## If you use clusterProfiler in published research, please cite:
## Guangchuang Yu, Li-Gen Wang, Yanyan Han, Qing-Yu He. clusterProfiler: an R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology. 2012, 16(5):284-287.

library("DOSE")

## DOSE v3.6.1  For help: https://guangchuangyu.github.io/DOSE
##
## If you use DOSE in published research, please cite:
## Guangchuang Yu, Li-Gen Wang, Guang-Rong Yan, Qing-Yu He. DOSE: an R/Bioconductor package for Disease Ontology Semantic and Enrichment analysis. Bioinformatics 2015, 31(4):608-609

library("org.Hs.eg.db")

## Loading required package: AnnotationDbi

## Loading required package: Biobase

## Welcome to Bioconductor
##
##     Vignettes contain introductory material; view with
##     'browseVignettes()'. To cite Bioconductor, see
##     'citation("Biobase")', and for packages 'citation("pkgname")'.

##

Das Paket clusterProfiler bietet Methoden zur Analyse und Visualisierung funktioneller Profile wie GO von Genen und Genclustern. Damit kannst du Gene nach Ähnlichkeiten clustern. Als Beispiel eignet sich der Datensatz geneList aus dem Paket DOSE; er enthält Informationsgehalte zu Gen-IDs. Das Paket org.Hs.eg.db liefert dazu die genomweite Annotation für den Menschen – also Sequenzrepräsentationen mit Positionsinformationen.

data(geneList, package="DOSE")

gene <- names(geneList)[abs(geneList) > 2]

Die Funktion enrichGO() führt die GO-Enrichment-Analyse auf einem gegebenen Genvektor durch. Enrichment-Analysen identifizieren Gruppen von Genen, die entsprechend ihrer Funktion vordefinierten Klassen zugeordnet sind. Die Ergebnisse können sehr allgemeine Begriffe enthalten. Für die Nutzung musst du das Argument „OrgDb“ setzen – hier kommt org.Hs.eg.db mit der menschlichen Genomannotation ins Spiel.

ego <- enrichGO(gene          = gene,
                universe      = names(geneList),
                OrgDb         = org.Hs.eg.db,
                ont           = "CC",
                pAdjustMethod = "BH",
                pvalueCutoff  = 0.01,
                qvalueCutoff  = 0.05,
        readable      = TRUE)
head(ego)

##                    ID                              Description GeneRatio
## GO:0005819 GO:0005819                                  spindle    25/201
## GO:0000779 GO:0000779 condensed chromosome, centromeric region    15/201
## GO:0072686 GO:0072686                          mitotic spindle    14/201
## GO:0000775 GO:0000775           chromosome, centromeric region    18/201
## GO:0000776 GO:0000776                              kinetochore    15/201
## GO:0000793 GO:0000793                     condensed chromosome    18/201
##              BgRatio       pvalue     p.adjust       qvalue
## GO:0005819 256/11817 1.353146e-12 3.897060e-10 3.546666e-10
## GO:0000779  91/11817 3.013479e-11 3.393318e-09 3.088217e-09
## GO:0072686  77/11817 3.534706e-11 3.393318e-09 3.088217e-09
## GO:0000775 156/11817 1.429309e-10 1.029103e-08 9.365738e-09
## GO:0000776 106/11817 2.849245e-10 1.406873e-08 1.280378e-08
## GO:0000793 163/11817 2.970249e-10 1.406873e-08 1.280378e-08
##                                                                                                                                                         geneID
## GO:0005819 CDCA8/CDC20/KIF23/CENPE/ASPM/DLGAP5/SKA1/NUSAP1/TPX2/TACC3/NEK2/CDK1/MAD2L1/KIF18A/BIRC5/KIF11/TTK/AURKB/PRC1/KIFC1/KIF18B/KIF20A/AURKA/CCNB1/KIF4A
## GO:0000779                                                            CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/CDT1/BIRC5/NCAPG/AURKB/AURKA/CCNB1
## GO:0072686                                                                KIF23/CENPE/ASPM/NUSAP1/TPX2/TACC3/CDK1/MAD2L1/KIF18A/KIF11/AURKB/KIFC1/KIF18B/AURKA
## GO:0000775                                           CDCA8/CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/KIF18A/CDT1/BIRC5/TTK/NCAPG/AURKB/AURKA/CCNB1
## GO:0000776                                                             CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/KIF18A/CDT1/BIRC5/TTK/AURKB/CCNB1
## GO:0000793                                          CENPE/NDC80/TOP2A/NCAPH/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/CDT1/BIRC5/NCAPG/AURKB/CHEK1/AURKA/CCNB1
##            Count
## GO:0005819    25
## GO:0000779    15
## GO:0072686    14
## GO:0000775    18
## GO:0000776    15
## GO:0000793    18

Zur Visualisierung als Enrichment Map nutzt du emapplot(). Diese Funktion stellt Gensets als Netzwerk dar. Vereinfacht gesagt: Sich überlappende Gensets bilden Cluster.

emapplot(ego)
enrichment map

Hilfe finden

Wenn du während der Arbeit mit Bioconductor-Paketen Unterstützung brauchst, helfen dir diese Befehle:

class(dnaSequence) # Klasse des Eingabeobjekts anzeigen

## [1] "DNAStringSet"
## attr(,"package")
## [1] "Biostrings"

methods(class = "DNAStringSet") # Alle verfügbaren Methoden für eine S3-/S4-Generik oder Klasse auflisten

##   [1] !                               !=                             
##   [3] $                               $<-                            
##   [5] %in%                            [                              
##   [7] [[                              [[<-                           
##   [9] [<-                             <                              
##  [11] <=                              ==                             
##  [13] >                               >=                             
##  [15] aggregate                       alphabetFrequency              
##  [17] anyNA                           append                         
##  [19] as.character                    as.complex                     
##  [21] as.data.frame                   as.env                         
##  [23] as.factor                       as.integer                     
##  [25] as.list                         as.logical                     
##  [27] as.matrix                       as.numeric                     
##  [29] as.raw                          as.vector                      
##  [31] by                              c                              
##  [33] cbind                           chartr                         
##  [35] coerce                          compact                        
##  [37] compareStrings                  complement                     
##  [39] concatenateObjects              consensusMatrix                
##  [41] consensusString                 countOverlaps                  
##  [43] countPattern                    countPDict                     
##  [45] dinucleotideFrequencyTest       do.call                        
##  [47] droplevels                      duplicated                     
##  [49] elementMetadata                 elementMetadata<-              
##  [51] elementNROWS                    elementType                    
##  [53] eval                            expand                         
##  [55] expand.grid                     extractAt                      
##  [57] extractROWS                     Filter                         
##  [59] findOverlaps                    getListElement                 
##  [61] hasOnlyBaseLetters              head                           
##  [63] ifelse2                         intersect                      
##  [65] is.na                           is.unsorted                    
##  [67] isEmpty                         isMatchingEndingAt             
##  [69] isMatchingStartingAt            lapply                         
##  [71] length                          lengths                        
##  [73] letterFrequency                 match                          
##  [75] matchPattern                    matchPDict                     
##  [77] mcols                           mcols<-                        
##  [79] merge                           metadata                       
##  [81] metadata<-                      mstack                         
##  [83] names                           names<-                        
##  [85] nchar                           neditEndingAt                  
##  [87] neditStartingAt                 NROW                           
##  [89] nucleotideFrequencyAt           oligonucleotideFrequency       
##  [91] order                           overlapsAny                    
##  [93] PairwiseAlignments              PairwiseAlignmentsSingleSubject
##  [95] parallelSlotNames               parallelVectorNames            
##  [97] pcompare                        pcompareRecursively            
##  [99] PDict                           PWM                            
## [101] rank                            rbind                          
## [103] Reduce                          relist                         
## [105] relistToClass                   rename                         
## [107] rep                             rep.int                        
## [109] replaceAt                       replaceLetterAt                
## [111] replaceROWS                     rev                            
## [113] revElements                     reverse                        
## [115] reverseComplement               ROWNAMES                       
## [117] sapply                          seqinfo                        
## [119] seqinfo<-                       seqlevelsInUse                 
## [121] seqtype                         seqtype<-                      
## [123] setdiff                         setequal                       
## [125] setListElement                  shiftApply                     
## [127] show                            showAsCell                     
## [129] sort                            split                          
## [131] split<-                         stack                          
## [133] stringDist                      strsplit                       
## [135] subseq                          subseq<-                       
## [137] subset                          subsetByOverlaps               
## [139] table                           tail                           
## [141] tapply                          threebands                     
## [143] toString                        transform                      
## [145] translate                       trimLRPatterns                 
## [147] twoWayAlphabetFrequency         union                          
## [149] unique                          uniqueLetters                  
## [151] unlist                          unsplit                        
## [153] unstrsplit                      updateObject                   
## [155] values                          values<-                       
## [157] vcountPattern                   vcountPDict                    
## [159] vmatchPattern                   vwhichPDict                    
## [161] which.isMatchingEndingAt        which.isMatchingStartingAt     
## [163] whichPDict                      width                          
## [165] window                          window<-                       
## [167] windows                         with                           
## [169] within                          xtabs                          
## [171] xvcopy                          zipdown                        
## see '?methods' for accessing help and source code

?complement # Hilfeseite der Funktion anzeigen

## starting httpd help server ... done

browseVignettes(package="Biostrings") # Zeigt alle verfügbaren Vignetten des Pakets an

Darüber hinaus findest du viele hilfreiche Seiten und Workflows auf den Bioconductor-Websites:

Fazit

Mit diesem Tutorial hast du das Bioconductor-Projekt und seine grundlegende Rolle in der biologischen Forschung kennengelernt. Du weißt, welche Typen von Bioconductor-Paketen es gibt und welche besonders wichtig sind. Anschließend hast du einen kompakten Workflow zur Installation und Nutzung gesehen. Du hast mit den Paketen Biostring und GenomicRanges gearbeitet und damit DNA-Sequenzen und Genombereiche kennengelernt. In einem weiteren Beispiel hast du eine Enrichment-Analyse an menschlichen Genen durchgeführt und damit die Konzepte von Enrichment-Analyse und GO verstanden. Zum Schluss hast du verschiedene Wege gesehen, wie du bei der Arbeit mit Bioconductor Hilfe findest. Wenn du tiefer einsteigen willst, wirf einen Blick auf Bioconductor_courses.

Wenn du mehr über R lernen möchtest, schau dir den DataCamp-Kurs Experimental Design in R an.

Themen
R
Datenwissenschaft

R-Kurse

Kurs

Einführung in R

4 Std.
3.1M
Beherrsche die Grundlagen der Datenanalyse in R, einschließlich Vektoren, Listen und Datenrahmen, und übe R mit echten Datensätzen.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow