Семестры

HMM-профиль подсемейства дельта эндотоксинов.

Дельта-токсины.

Для анализа было выбрано pfam-семейство дельта эндотоксинов (PF03944). Дельта эндотоксины это белковые токсины, вырабатывающиеся бактериями (например Bacillus thuringiensis) и убивающие некоторых насекомых (благодаря чему применяются в генной модификации растений).

Подсемейство для анализа было выбрано по доменной архитектуре: PF03945 - PF00555 - PF03944 - PF17997 - PF21463. Оно содержит в себе 266 белков и является вторым подсемейством по количеству (первое содержит 268 белков). В самом семействе содержится 1116 последовательностей белков.

HMM-профиль: построение и поиск.

Для построения профиля использовался домен PF03944 из последовательностей белков выбранного подсемейства. Построение профиля проводилось программой hmmbuild:
hmmbuild domain.hmm domain.fasta

После этого, используя полученный профиль и программу hmmsearch, был совершен поиск по нему во всех последовательностях семейства:
hmmsearch --tblout found_domain.txt domain.hmm protein-matching-PF03944.fasta

Анализ находок.

Для анализа выходного файла был написан python-скрипт:

Python скрипт анализа выдачи hmmsearch.
#!/usr/bin/env python3

import argparse

expected = set()
with open("domain.fasta") as f:
    for line in f:
        if line.startswith(">"):
            prot_id = line[1:].split()[0]
            expected.add(prot_id.rsplit("/", 1)[0] if "/" in prot_id else prot_id)

parser = argparse.ArgumentParser()
parser.add_argument("threshold", type=float)
parser.add_argument("input_file", type=argparse.FileType("r"))
args = parser.parse_args()

tp = fp = fn = tn = 0
for line in args.input_file:
    if line.startswith("#"):
        continue
    parts = line.split()
    if len(parts) < 6:
        continue
    score = float(parts[5])
    in_expected = parts[0] in expected
    if score >= args.threshold:
        if in_expected:
            tp += 1
        else:
            fp += 1
    else:
        if in_expected:
            fn += 1
        else:
            tn += 1

print(tp, fp, fn, tn)
	


python script.py 250 found_domain.txt

Вывод программы (tp, fp, fn, tn): 213 271 53 461

Также результат приведен в таблице 1. К TN добавлены последовательности белков, не попавшие в выдачу hmmsearch (118).

Таблица 1. Результаты обработки выдачи hmmsearch с порогом score = 250.
Значение
True Positive (TP) 213
False Positive (FP) 271
False Negative (FN) 53
True Negative (TN) 579
На основе этих данных посчитаем некоторые характеристики отбора:
- Точность: TP/(TP+FP) = 0.440
- Полнота: TP/(TP+FN) = 0.801
- Специфичность: TN/(TN+FP) = 0,681
- F1-score = 2*(точность*полнота)/(точность+полнота) = 0.568

Выбор порога отбора основывался именно на максимизации F1-score.

Учитывая полученные значения можно сказать, что поиск по выбранному домену не очень избирателен - отбирается очень много ложноположительных (FP) находок.