Дополнительное задание по паттернам и профилям
для тех, кому это интересно
Создайте "правила", выделяющие некоторое подсемейство белков из семейства. "Правило" – это либо паттерн, либо профиль одного из нескольких видов.
Для простоты за семейство белков возьмём все описанные в Swiss-Prot белки, чьи ID начинаются с какой-нибудь одной мнемоники функции (например RL1_ для рибосомальных белков L1). За подсемейство – все белки семейства из организмов некоторого таксона (например, Proteobacteria).
Вначале подготовьте наборы белков из Swiss-Prot, на которых вы будете проверять свои паттерны. Для вышеприведённного примера запрос к Uniprot:
mnemonic:RL1_* AND taxonomy:Proteobacteria
даёт список белков из подсемейста, а запрос
mnemonic:RL1_* NOT taxonomy:Proteobacteria
список белков из семейства, не принадлежащих подсемейству.
Cкачайте оба набора последовательноcтей в fasta-формате (жёлтая кнопка "Download"). Далее файлы с этими наборами называются "true.fasta" и "false.fasta".
Отберите 7–10 белков из подсемейства и примерно столько же белков не из подсемейства, импортируйте в Jalview и выровняйте. Выделите в выравнивании подсемейство (мышью по названиям), определите группу и покрасьте только её по проценту идентичности (правая кнопка мыши → Selection → Group → Group colour).
Построение паттерна
Найдите в выравнивании место, в котором консервативность в подсемействе существенно выше, чем в семействе в целом. Постарайтесь построить паттерн так, чтобы последовательности подсемейства ему соответствовали, а остальные – нет.
Проверка паттерна
Паттерн по последовательностям можно запустить программой fuzzpro из EMBOSS. Читайте fuzzpro -help. В конце выходного файла fuzzpro имеется строчка вида # Total_sequences: 6, позволяющая обойтись без подсчёта числа находок. Подсчитайте для паттерна: число находок в "true.fasta" (будем называть их "True positives", TP), число находок в "false.fasta" ("False positives", FP), разность между числом последовательноcтей в "true.fasta" и TP (FN), разность между числом последовательностей в "false.fasta" и FP (TN). Основными показателями качества паттерна являются чувствительность (она же Recall, она же True Positive Rate, TPR), равная TP/(TP+FN), и избирательность (она же точность, Precision, она же Positive Predictive Value, PPV), равная TP/(TP+FP). Если чувствительность слишком мала (много последовательностей из подсемейства не находится), имеет смысл ослабить паттерн. Если же слишком мала избирательность (много лишнего находится), то имеет смысл его усилить.
Чтобы ослабить паттерн, можно или укоротить его, либо добавить вариантов, например, вместо [LI] в какой-нибудь позиции написать [LIVM], или вместо S – [ST], или вместо x(0,3) – x(0,5) или вместо [APSTQ] – x и т.п. Наоборот, чтобы усилить паттерн, можно его, например, удлинить. Правильный способ улучшать паттерн в данном случае – добавить к выравниванию по паре-тройке последовательнстей, которые принадлежат подсемейству, но не нашлись, и таких, которые не принадлежат подсемейству, но нашлись, и исправлять паттерн, учитывая их.
В качестве единой величины, которую следует оптимизировать, часто используют среднее гармоническое между чувствительностью и избирательностью – так называемый F-score (среднее гармоническое – это величина, обратная к среднему арифметическому обратных величин, см. http://en.wikipedia.org/wiki/F-score ).
Следует иметь в виду, что FP, а потому и избирательность, может сильно зависеть от объёма банка для поиска, который в нашем случае искуственно ограничен. После того, как вы подобрали устраивающий вас паттерн, имеет смысл прогнать его по всему Swiss-Prot (на сайте Prosite) и выяснить, сколько ложных находок добавляется, если не ограничиваться белками семейства.
В протоколе приведите сам паттерн и все его характеристики (TP, FP, FN, чувствительность, избирательность, F-score). При этом FP и то, что от него зависит (избирательность и F-score), имеет смысл привести дважды: для поиска только по семейству и для поиска по всему Swiss-Prot.
Построение профиля программой prophecy
Программа prophecy умеет строить три типа профилей: частотную матрицу (корректно работает, только если входное выравнивание не содержит гэпов), профили по Грибскову (см. http://www.pnas.org/content/84/13/4355.long ) и профили по Хениковым (см. http://www.ncbi.nlm.nih.gov/pubmed/7966282 ). По идее, два последних должны работать лучше; к сожалению, программа prophet, которая с ними работает, очень неудобная (можете попробовать с ней посражаться). Поэтому предлагаю ограничиться частотной матрицей.
Выделите мышью некоторый прямоугольный блок выравнивания последовательностей подсемейства. Нужно, чтобы блок не содержал гэпов. Постарайтесь найти такой участок выравнивания, на котором подсемейство наиболее резко отличается от семейства.
Выделив блок, щёлкните по нему правой кнопкой мыши, Selection → Output to Textbox → FASTA. Из полученного окошка File → Save. Предположим, вы назвали файл forprofile.fasta. Запускаете программу:
prophecy forprofile.fasta profile-F.prophecy -auto
чтобы получить в файле profile-F.prophecy частотную матрицу (-auto означает взять все параметры по умолчанию).
Поиск профилем по файлу
Частотной матрицей ищет программа profit:
profit profile-F.prophecy true.fasta true.profit -auto
аналогично для false.fasta. В выходном файле придётся посчитать число строк, чтобы определить количество находок.
Файл profile-F.prophecy можно редактировать, изменяя порог: в нём есть строка вида
Thresh 75
это 75 означает процент от максимального счёта. Если его повысить, улучшится избирательность за счёт чувствительности, если понизить – наоборот. Менять можно, редактируя файл, а можно – перезапуская prophecy, например:
prophecy forprofile.fasta profile-F.prophecy -thresh 70 -auto
даст профиль с порогом 70. Подберите порог, чтобы достичь наилучшего компромисса между чувствительностью и избирательностью.
В протоколе опишите результаты аналогично результатам для паттерна. (Если вдруг захотите проверить избирательность на всём Swiss-Prot, придётся его себе скачать с ftp://ftp.expasy.ch/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz ).