Алгоритм решения обрезания для обрушения этого дерева?
У меня есть дерево Newick, которое построено путем сравнения сходства (эвклидовое расстояние) весовых матриц положения (PWM или PSSM) предполагаемые ДНК-регуляторные мотивы, которые представляют последовательности ДНК длиной 4-9 п.о.
Интерактивная версия дерева находится на iTol (здесь), с которым вы можете свободно играть - просто нажмите "дерево обновлений", после настройки ваших параметров:
![enter image description here]()
Моя конкретная цель: свернуть мотивы (подсказки/конечные узлы/листья) вместе, если их средние расстояния до ближайшего родительского клада составляют < X (пакет ETE2 Python). Это биологически интересно, так как некоторые из генно-регуляторных ДНК-мотивов могут быть гомологичными (паралоги или ортологи) друг с другом. Это свертывание может быть выполнено с помощью графического интерфейса iTol, связанного выше, например. если вы выберете X = 0.001, то некоторые мотивы превратятся в треугольники (семейства мотивов).
Мой вопрос:. Может ли кто-нибудь предложить алгоритм, который либо выводит, либо поможет визуализировать, какое значение X подходит для "максимизации биологической или статистической значимости" свернутых мотивов? В идеале было бы некоторое очевидное изменение шага в каком-либо свойстве дерева при построении графика относительно X, что подсказывает алгоритму разумный X. Существуют ли для этого какие-либо известные алгоритмы/скрипты/пакеты? Возможно, код будет отображать некоторую статистику относительно значения X? Я пробовал строить график X по сравнению со средним размером кластера (matplotlib), но я не вижу очевидного "повышения шага", чтобы сообщить мне, какое значение X использовать:
![enter image description here]()
Мой код и данные: Ссылка на мой Python script есть [здесь] [8], я сильно прокомментировал его, и он будет генерировать данные дерева и график выше для вас (используйте аргументы d_from, d_to и d_step для изучения отрезков расстояния, X). Вам нужно будет установить ete2, просто выполнив эти две команды bash, если у вас есть простая установка и Python:
apt-get install python-setuptools python-numpy python-qt4 python-scipy python-mysqldb python-lxml
easy_install -U ete2
Ответы
Ответ 1
Думаю, мне нужно будет узнать больше, прежде чем я смогу дать конкретные предложения. Но, возможно, это поможет. Я предполагаю, что каждый терминал node является последовательностью, а каждый внутренний node является PSSM.
Расчет для X является специфичным для приложения. Например, X, который вы получаете, если вы хотите свернуть ультрапаралоги, не совпадает с X, который вы получаете, когда хотите свернуть все гомологи.
Поскольку гены постоянно создаются с помощью дублирования и видообразования, для X нет ни одного значения, которое будет различать последовательности эволюционными отношениями. Поэтому я не ожидаю, что вы найдете удовлетворительный прокси для определения эволюционных отношений между последовательностями, посмотрев только на статистику кластеров.
Более строгий метод будет строить генное дерево из гена каждого нормативного мотива и согласовывать его с деревом видов. Там есть программное обеспечение и дополнительная эвристика для идентификации ортолога /inparalog.
Если вы сделаете это, внутренние узлы вашего дерева будут украшены предполагаемым эволюционным событием (например, дублированием, видообразованием). Затем вы можете подойти к дереву, разрушающему узлы для кладов, которые вам не нужны.
Ответ 2
Вы можете попробовать и использовать что-то похожее на согласование дерева, как упоминал @Jeff. Но стандартное согласование дерева будет фактически терпеть неудачу.
Примирение включает в себя сначала добавление ветвей, которые представляют "потери" эволюционных символов во всем целевом дереве. Затем укажите узлы, в которых произошли "дублирования" эволюционных символов. Весовая сумма потерь и дублирования обеспечивает оптимизацию стоимости.
Но в вашем случае проблема, которую вы хотите решить, - "разбить это супер-дерево на соответствующие ортологичные поддеревья". Это означает, что вы на самом деле не хотите забивать потери столько, сколько захотите. Вы хотите, чтобы забить дерево таким образом, чтобы оно показывало, сколько ортологичных поддеревьев слито в ваше супер-дерево. Таким образом, вы можете попробовать этот скоринговый подход:
- Возьмите супер-дерево, сосчитайте количество повторяющихся видов, S1.
- Свернуть все терминальные листья, которые являются паралогами, и подсчитать новое количество повторяющихся видов, S2.
- Разница между S1 и S2 показывает приблизительно количество поддеревьев, которые вы имеете в супер-дереве.
- Чтобы исправить любое смещение, вызванное различными размерами деревьев, делятся на количество уникальных видов, представленных в супер-дереве N.
Если мы назовем этот показатель "коэффициентом поддерева", то он будет равен:
S1 - S2/N
Выводы:
-
Если S1 - S2 = S1, то это означает, что у вашего супер-дерева есть приблизительно одно истинное поддерево внутри него, что все множественные появления появляются только из-за недавних паралогов.
-
Если S1 - S2 = 0, то это означает, что у вашего супер-дерева есть приблизительно S1 истинных поддеревьев внутри него.