Wie bekomme ich den kleinsten Teilbaum, der eine Reihe von Knoten von BioPhylo enthält?

Ich teste verschiedene phylogenetische Bibliotheken in Python. Ich möchte einen Newick-Baum einlesen und dann aus einer Liste von Taxa den kleinsten Baum generieren, der sie alle enthält. Diese Aufgabe ist in dendropy und ete2 recht einfach und effizient:

newick = '((raccoon, bear),((sea_lion,seal),((monkey,cat), weasel)),dog);'
taxa = ['raccoon', 'sea_lion']

import ete2
tree = ete2.Tree(newick)
pruned = tree.prune(taxa)

import dendropy
tree = dendropy.Tree.get_from_string(newick, 'newick')
pruned = tree.prune_taxa_with_labels(taxa)

Ich versuche, aber keine gleichwertige Funktionalität im Bio.Phylo-Paket zu finden. Bäume haben eine "Prune"-Methode, aber sie schneidet einen einzelnen Knoten aus dem Baum.

Antworten (2)

Die common_ancestorFunktion sollte Ihnen das gewünschte Ergebnis liefern: Sie gibt Ihnen den Baum (glaube ich), der der jüngste gemeinsame Vorfahr aller gegebenen Ziele ist.

Entschuldigung für das Ausgraben dieser alten Frage. Aber ich denke, wenn Sie einen unbewurzelten Baum haben, ist der gemeinsame Vorfahr vielleicht nicht die richtige Antwort.

Was Sie tun müssen, ist Folgendes: Angenommen, Sie haben einen unbewurzelten Baum mit n Spitzen (Arten) und somit 2n-3 Zweigen. Sie sollten den Baum in all diesen möglichen Ästen halbieren. Auf diese Weise haben Sie 4n-6 Teilbäume. Der kleinste Teilbaum, der alle Ihre ausgewählten Arten enthält, ist Ihre Antwort.

Dies unterscheidet sich vom gemeinsamen Vorfahren, da es für einen unbewurzelten Baum so ausgedrückt werden könnte, dass die nicht von Ihnen gepflückten Arten zuerst geclustert werden und alle Ihre ausgewählten Arten zur Außengruppe werden. Aber wenn Sie den Baum richtig „neu bewurzeln“, könnten Sie Ihre ausgewählten Arten immer noch zu einer kleinen, exklusiven Gruppe zusammenschließen.

Sie haben Recht, dass dies für nicht verwurzelte Bäume nicht richtig wäre, also danke für die Antwort. Ich habe in der Frage nicht erwähnt, dass die Bäume, mit denen ich gearbeitet habe, tatsächlich verwurzelt waren (daher war der Beispielbaum vielleicht etwas irreführend.)