Случайные ультраметрические деревья - PullRequest
0 голосов
/ 15 декабря 2018

Я реализовал программу на python, которая генерирует случайные двоичные деревья.Поэтому теперь я хотел бы назначить каждому внутреннему узлу дерева расстояние, чтобы сделать его ультраметрическим.Тогда расстояние между корнем и любыми листьями должно быть одинаковым.Если узел является листом, то расстояние равно нулю.Вот узел:

class Node() :
    def __init__(self, G = None , D = None) :
        self.id = ""
        self.distG = 0
        self.distD = 0
        self.G = G
        self.D = D
        self.parent = None

Моя идея состоит в том, чтобы установить расстояние h в начале и уменьшить его, поскольку внутренний узел найден, но он работает только на левой стороне.

def lgBrancheRand(self, h) :
    self.distD = h
    self.distG = h
    hrandomD = round(np.random.uniform(0,h),3)
    hrandomG = round(np.random.uniform(0,h),3)
    if self.D.D is not None :
        self.D.distD = hrandomD
        self.distD = round(h-hrandomD,3)
        lgBrancheRand(self.D,hrandomD)
    if self.G.G is not None :
        self.G.distG = hrandomG
        self.distG = round(h-hrandomG,3)
        lgBrancheRand(self.G,hrandomG)

1 Ответ

0 голосов
/ 20 декабря 2018

Таким образом, вы должны создать случайные матрицы и применить UPGMA к каждой.

Более полный ответ ниже

Просто используйте алгоритм UPGMA.Это алгоритм кластеризации, используемый для разрешения попарной матрицы.

Вы берете общее генетическое расстояние между двумя парами "таксонов" (технически OTU) и делите его на две.Вы назначаете ближайших членов парной матрицы в качестве первого «узла».Переформатируйте матрицу, чтобы эти две пары были объединены в одну группу («удалена») и нашли следующего «ближайшего соседа» до бесконечности.Я подозреваю, что у R 'ape' будет ультраметрический алгоритм, который избавит вас от программирования.Я вижу, что вы используете Python, поэтому у BioPython MIGHT есть это (большое MIGHT), лично я бы передавал это через предварительно скомпилированную программу на C и собирал результаты через paup.Я не собираюсь писать код, потому что я предпочитаю Perl и получаю пламя, если какой-либо код Perl появляется в вопросе о Python (Империя установила).

В любом случае, вы обнаружите, что этот алгоритм создает идеальное ультраметрическое дерево.Чистым людям не нравятся ультраметрические деревья, полученные с помощью такого алгоритма.Тем не менее, в ваших расчетах это может быть полезно, потому что вы можете найти филогению по реальным данным, которая наиболее «похожа на часы» по сравнению с нулевым распределением, которое вы производите.В этом контексте это было бы здорово.


Возможно, вы захотите поднять вопрос об обмене стеками биоинформатики.

...