Этот пример показывает, как сравнить целые геномы для организмов, который позволяет вам сравнивать организмы в совсем другом разрешении относительно одного генных сравнений. Вместо того, чтобы только фокусироваться на различиях между гомологичными генами можно получить сведения о крупномасштабных функциях геномной эволюции.
Этот пример использует две деформации хламидии, Хламидии трахоматис и Chlamydophila pneumoniae. Это тесно связанные бактерии, которые вызывают отличающийся, хотя оба очень распространенные, болезни в людях. Целые геномы доступны в базе данных GenBank® для обоих организмов.
Можно загрузить эти геномы с помощью функции getgenbank
. Во-первых, мы посмотрим на Хламидию трахоматис. Заметьте, что геном является круговым и чуть более чем один миллион BP в длине. Эти последовательности являются довольно большими, так может требовать времени к загрузке.
seqtrachomatis = getgenbank('NC_000117');
Затем, загрузите Chlamydophila pneumoniae. Этот геном является также круговым и немного более длинным в 1.2 Mbp.
seqpneumoniae = getgenbank('NC_002179');
Для вашего удобства ранее загруженные последовательности включены в MAT-файл. Обратите внимание на то, что данные в общедоступных репозиториях часто курируются и обновляются; поэтому результаты этого примера могут немного отличаться, когда вы используете актуальные наборы данных.
load('chlamydia.mat','seqtrachomatis','seqpneumoniae')
Очень простой подход для сравнения этих двух геномов должен выполнить попарное выравнивание между всеми генами в геномах. Учитывая, что это бактериальные геномы, простой подход должен был бы сравнить весь ORFs в этих двух геномах. Однако данные GenBank включают больше информации о генах в последовательностях. Это хранится в поле CDS структуры данных. У хламидии трахоматис есть 895 областей кодирования, в то время как Chlamydophila pneumoniae имеет 1112.
M = numel(seqtrachomatis.CDS) N = numel(seqpneumoniae.CDS)
M = 895 N = 1112
Большинство записей CDS содержит перевод в последовательности аминокислот. Первая запись CDS в данных о Хламидии трахоматис является гипотетическим белком длины 591 остаток.
seqtrachomatis.CDS(1)
ans = struct with fields: location: 'join(1041920..1042519,1..1176)' gene: [] product: 'hypothetical protein' codon_start: '1' indices: [1041920 1042519 1 1176] protein_id: 'NP_219502.1' db_xref: 'GeneID:884145' note: [] translation: 'MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKGNNKVEDRVCSLYSSRSNENRESPYAVVDVSSMIESTPTSGETTRASRGVFSRFQRGLVRVADKVRRAVQCAWSSVSTRRSSATRAAESGSSSRTARGASSGYREYSPSAARGLRLMFTDFWRTRVLRQTSPMAGVFGNLDVNEARLMAAYTSECADHLEANKLAGPDGVAAAREIAKRWEQRVRDLQDKGAARKLLNDPLGRRTPNYQSKNPGEYTVGNSMFYDGPQVANLQNVDTGFWLDMSNLSDVVLSREIQTGLRARATLEESMPMLENLEERFRRLQETCDAARTEIEESGWTRESASRMEGDEAQGPSRAQQAFQSFVNECNSIEFSFGSFGEHVRVLCARVSRGLAAAGEAIRRCFSCCKGSTHRYAPRDDLSPEGASLAETLARFADDMGIERGADGTYDIPLVDDWRRGVPSIEGEGSDSIYEIMMPIYEVMDMDLETRRSFAVQQGHYQDPRASDYDLPRASDYDLPRSPYPTPPLPPRYQLQNMDVEAGFREAVYASFVAGMYNYVVTQPQERIPNSQQVEGILRDMLTNGSQTFRDLMRRWNREVDRE' text: [19x58 char]
Четвертая запись CDS для gatA гена, который имеет glutamyl-тРНК продукта amidotransferase подблок A. Длина последовательности продукта является 491 остатком.
seqtrachomatis.CDS(4)
ans = struct with fields: location: '2108..3583' gene: 'gatA' product: [2x47 char] codon_start: '1' indices: [2108 3583] protein_id: 'NP_219505.1' db_xref: 'GeneID:884087' note: [7x58 char] translation: 'MYRKSALELRDAVVNRELSVTAITEYFYHRIESHDEQIGAFLSLCKERALLRASRIDDKLAKGDPIGLLAGIPIGVKDNIHITGVKTTCASKMLENFVAPFDSTVVRRIEMEDGILLGKLNMDEFAMGSTTRYSAFHPTNNPWDLERVPGGSSGGSAAAVSARFCPIALGSDTGGSIRQPAAFCGVVGFKPSYGAVSRYGLVAFGSSLDQIGPLTTVVEDVALAMDAFAGRDPKDSTTRDFFKGTFSQALSLEVPKLIGVPRGFLDGLQEDCKENFFEALAVMEREGSRIIDVDLSVLKHAVPVYYIVASAEAATNLARFDGVRYGHRCAQADNMHEMYARSRKEGFGKEVTRRILLGNYVLSAERQNIFYKKGMAVRARLIDAFQAAFERCDVIAMPVCATPAIRDQDVLDPVSLYLQDVYTVAVNLAYLPAISVPSGLSKEGLPLGVQFIGERGSDQQICQVGYSFQEHSQIKQLYPKAVNGLFDGGIE' text: [26x58 char]
Несколько из CDS Chlamydophila pneumoniae имеют пустые переводы. Мы можем заполнить их в использовании функций от Bioinformatics Toolbox. Найдите все пустые переводы, затем отобразите первый пустой перевод.
missingPn = find(cellfun(@isempty,{seqpneumoniae.CDS.translation})); seqpneumoniae.CDS(missingPn(1))
ans = struct with fields: location: 'complement(73364..73477)' gene: [] product: 'hypothetical protein' codon_start: '1' indices: [73477 73364] protein_id: 'NP_444613.1' db_xref: 'GeneID:963699' note: 'hypothetical protein; identified by Glimmer2' translation: [] text: [10x52 char]
Функциональный featureparse
извлекает функции, такие как CDS, от структуры последовательности. Можно затем использовать cellfun
, чтобы применить nt2aa
к последовательностям с недостающими переводами.
allCDS = featureparse(seqpneumoniae,'Feature','CDS','Sequence',true); missingSeqs = cellfun(@nt2aa,{allCDS(missingPn).Sequence},'uniform',false); [seqpneumoniae.CDS(missingPn).translation] = deal(missingSeqs{:}); seqpneumoniae.CDS(missingPn(1))
ans = struct with fields: location: 'complement(73364..73477)' gene: [] product: 'hypothetical protein' codon_start: '1' indices: [73477 73364] protein_id: 'NP_444613.1' db_xref: 'GeneID:963699' note: 'hypothetical protein; identified by Glimmer2' translation: 'MLTDQRKHIQMLHKHNSIEIFLSNMVVEVKLFFKTLK*' text: [10x52 char]
Сравнение gatA гена у Хламидии трахоматис со всеми генами CDS в Chlamydophila pneumoniae очень просто: Только поместите цикл for
вокруг функции nwalign
. Вы могли альтернативно использовать локальное выравнивание (swalign
).
tic gatAScores = zeros(1,N); for inner = 1:N gatAScores(inner) = nwalign(seqtrachomatis.CDS(4).translation,... seqpneumoniae.CDS(inner).translation); end toc % |tic| and |toc| are used to report how long the calculation takes.
Elapsed time is 1.941612 seconds.
Гистограмма очков показывает большое количество отрицательных очков и одного очень высокого положительного счета.
hist(gatAScores,100) title(sprintf(['Alignment Scores for Chlamydia trachomatis %s\n',... 'with all CDS in Chlamydophila pneumoniae'],seqtrachomatis.CDS(4).gene))
Как вы ожидали бы, высокое соответствие выигрыша с gatA геном в Chlamydophila pneumoniae.
[gatABest, gatABestIdx] = max(gatAScores); seqpneumoniae.CDS(gatABestIdx)
ans = struct with fields: location: 'complement(838828..840306)' gene: 'gatA' product: [2x47 char] codon_start: '1' indices: [840306 838828] protein_id: 'NP_445311.1' db_xref: 'GeneID:963139' note: [7x58 char] translation: 'MYRYSALELAKAVTLGELTATGVTQHFFHRIEEAEGQVGAFISLCKEQALEQAELIDKKRSRGEPLGKLAGVPVGIKDNIHVTGLKTTCASRVLENYQPPFDATVVERIKKEDGIILGKLNMDEFAMGSTTLYSAFHPTHNPWDLSRVPGGSSGGSAAAVSARFCPVALGSDTGGSIRQPAAFCGVVGFKPSYGAVSRYGLVAFASSLDQIGPLANTVEDVALMMDVFSGRDPKDATSREFFRDSFMSKLSTEVPKVIGVPRTFLEGLRDDIRENFFSSLAIFEGEGTHLVDVELDILSHAVSIYYILASAEAATNLARFDGVRYGYRSPQAHTISQLYDLSRGEGFGKEVMRRILLGNYVLSAERQNVYYKKATAVRAKIVKAFRTAFEKCEILAMPVCSSPAFEIGEILDPVTLYLQDIYTVAMNLAYLPAIAVPSGFSKEGLPLGLQIIGQQGQDQQVCQVGYSFQEHAQIKQLFSKRYAKSVVLGGQS' text: [26x58 char]
Попарное выравнивание одного гена от Хламидии трахоматис со всеми генами от Chlamydophila pneumoniae занимает чуть менее чем минуту на Intel® Pentium 4, машина на 2,0 ГГц рабочий Windows® XP. Чтобы сделать это вычисление для всех 895 CDS у Хламидии трахоматис заняло бы приблизительно 12 часов на той же машине. Не прокомментируйте следующий код, если вы хотите выполнить целое вычисление.
scores = zeros(M,N); parfor outer = 1:M theScore = zeros(1,outer); theSeq = seqtrachomatis.CDS(outer).translation; for inner = 1:N theScore(inner) = ... nwalign(theSeq,... seqpneumoniae.CDS(inner).translation); end scores(outer,:) = theScore; end
Отметьте команду, parfor
используется во внешнем цикле. Если ваша машина будет сконфигурирована, чтобы запустить несколько лабораторий затем, то внешний цикл будет выполняться параллельно. Для полного понимания этого построения смотрите doc parfor
.
Если вы посмотрите на дистрибутивы музыки к нескольким генам, то вы будете видеть шаблон. CDS (3) из Хламидии трахоматис является gatC геном. Это имеет относительно короткий продукт, подблок aspartyl/glutamyl-tRNA amidotransferase C, только с 100 остатками.
gatCScores = zeros(1,N); for inner = 1:N gatCScores(inner) = nwalign(seqtrachomatis.CDS(3).translation,... seqpneumoniae.CDS(inner).translation); end figure hist(gatCScores,100) title(sprintf(['Alignment Scores for Chlamydia trachomatis %s\n',... 'with all CDS in Chlamydophila pneumoniae'],seqtrachomatis.CDS(3).gene)) xlabel('Score');ylabel('Number of genes');
Лучший счет снова соответствует тому же гену в Chlamydophila pneumoniae.
[gatCBest, gatCBestIdx] = max(gatCScores); seqpneumoniae.CDS(gatCBestIdx).product
ans = 2x47 char array 'aspartyl/glutamyl-tRNA amidotransferase subunit' 'C '
CDS (339) из Хламидии трахоматис является uvrA геном. Это имеет очень длинный продукт, excinuclease подблок ABC A, длины 1786.
uvrAScores = zeros(1,N); for inner = 1:N uvrAScores(inner) = nwalign(seqtrachomatis.CDS(339).translation,... seqpneumoniae.CDS(inner).translation); end figure hist(uvrAScores,100) title(sprintf(['Alignment Scores for Chlamydia trachomatis %s\n',... 'with all CDS in Chlamydophila pneumoniae'],seqtrachomatis.CDS(339).gene)) xlabel('Score');ylabel('Number of genes'); [uvrABest, uvrABestIdx] = max(uvrAScores); seqpneumoniae.CDS(uvrABestIdx)
ans = struct with fields: location: '716887..722367' gene: [] product: 'excinuclease ABC subunit A' codon_start: '1' indices: [716887 722367] protein_id: 'NP_445220.1' db_xref: 'GeneID:963214' note: [6x58 char] translation: 'MKSLPVYVSGIKVRNLKNVSIHFNSEEIVLLTGVSGSGKSSIAFDTLYAAGRKRYISTLPTFFATTITTLPNPKVEEIHGLSPTIAIKQNHFSHYSHATVGSTTELFSHLALLFTLEGQARDPKTKEVLDLYSKEKVLSTIMELSEGVQISILAPLLRKDIAAIHEYAQQGFTKVRCNGTIHPIYSFLTSGIPEDCSVDIVIDTLIKSENNIARLKVSLFTALEFGEGHCSVLSDEELMTFSTKQQIDDVTYTPLTQQLFSPHALESRCSLCQGSGIFISIDNPLLIDENLSIKENCCSFAGNCSSYLYHTIYQALADALNFNLETPWKDLSPEIQNIFLRGKNNLVLPVRLFDQTLGKKNLTYKVWRGVLNDIGDKVRYTTKPSRYLSKGMSAHSCSLCKGTGLGDYASVATWEGKTFTEFQQMSLNNWHVFFSKVKSPSLSIQEILQGLKQRLSFLIDLGLGYLTPNRALATLSGGEQERTAIAKHLGGELFGITYILDEPSIGLHPQDTEKLIGVIKKLRDQGNTVILVEHEERMISLADRIIDIGPGAGIFGGEVLFNGKPEDFLMNSSSLTAKYLRQELTIPIPESREAPTSWLLLTEATIHNLKNLSIRLPLARLIGVTGVSGSGKSSLINNTLVPAIESFLKQENPKNLHFEWGCIGRLIHITRDLPGRSQRSIPLTYIKAFDDIRELFASQPRSLRQGLTKAHFSFNQPQGACIQCQGLGTMTISDDDTPIPCSECQGKRYHSEVLEILYEGKNIADILDMTAYEAEKFFISHPKIHEKIHALCSLRLDYLPLGRPLSTLSGGEIQRLKLAHELLFASPKQTLYVLDEPTTGLHTHDIQALIEVLLSLTYLGHTVLVIEHNMHVVKVCDYVLELGPEGGDLGGYLLASCTPKDLIQLNTPTAKALAPYIEGSLDIPVVKSEPPSSPKSCDILIKDAYQNNLKHIDLALPRNSLIAIAGPGASGKHSLVFDILYASGNIAYAELFPPYIRQGLLKETPLPSVGEVKGLSPVISVRKCSSSNRSYHTIASALGLSNGLEKLFAILGEPFSPLTEEKLSKTTPQTIIDSLLKSYKDDYVTITSPIPLGSDLEIFLQEKQKEGFIKLYSEGNLYDLDERLPLNLIEPAIVIQHTKVSPKNSSSLLSAISVAFSLSSEIWIYISQKKQRKLSYSLGWKDKKGRLYPEITHQLLSSDHPEGRCLTCGGRGEILKISLEEHKEKIAHYTPLEFFSLFFPKSYMKPVQKLLKDENASQPLKLLTTKEFLNFCRGSSEFPGMNALLMEQLDTESDSPLIKPLLALTSCPACKGSGLNDYANYVRINNTSLLDIYQEDATFLESFLNTIGTDDTRSIIQDLMNRLTFISKVGLSYITLGQRQDTLSDGENYRLHLAKKISINLTNIVYLFEEPLSGLHPQDLPTIVQLLKELVANNNTVIATDRSCSLIPHADHAIFLGPGSGPQGGFLMDSDTEVCPSVDLHANVPQTEVCPKAPLSISKANHTRGSDRTLKVNLSIHHIQNLKVSAPLHALVAIGGVSGSGKTSLLLEGFKKQAELLIAKGTTTFSDLVVIDSHPIASSQRSDISTYFDIAPSLRAFYASLTQAKALNISSTMFSTNTKQGQCSDCQGLGYQWIDRAFYALEKRPCPTCSGFRIQPLAQEVLYEGKHFGELLHTPIETVALRFPFIKKIQKPLKALLDIGLGYLPIGQKLSSLSVSEKTALKTAYFLYQTPETPTLFLIDELFSSLDPIKKQHLPEKLRSLINSGHSVIYIDHDVKLLKSADYLIEIGPGSGKQGGKLLFSGSPKDIYASKDSLLKKYICNEELDS' text: [46x58 char]
Распределение очков затронуто длиной последовательностей с очень длинными последовательностями, потенциально имеющими намного выше или более низкими очками, чем более короткие последовательности. Можно нормировать для этого различными способами. Нужно было бы просто разделиться на длину последовательностей.
lnormgatABest = gatABest./length(seqtrachomatis.CDS(4).product) lnormgatCBest = gatCBest./length(seqtrachomatis.CDS(3).product) lnormuvrABest = uvrABest./length(seqtrachomatis.CDS(339).product)
lnormgatABest = 16.8794 lnormgatCBest = 2.2695 lnormuvrABest = 78.9615
Альтернативный метод нормализации должен использовать сам счет выравнивания, который является счетом от выравнивания последовательности с собой.
gatASelf = nwalign(seqtrachomatis.CDS(4).translation,... seqtrachomatis.CDS(4).translation); gatCSelf = nwalign(seqtrachomatis.CDS(3).translation,... seqtrachomatis.CDS(3).translation); uvrASelf = nwalign(seqtrachomatis.CDS(339).translation,... seqtrachomatis.CDS(339).translation); normgatABest = gatABest./gatASelf normgatCBest = gatCBest./gatCSelf normuvrABest = uvrABest./uvrASelf
normgatABest = 0.7380 normgatCBest = 0.5212 normuvrABest = 0.5253
Все против всего вычисления выравнивания не только занимают много времени, оно также генерирует большую матрицу очков. Если вы ищете подобные гены через разновидности, то очки, которые интересны, являются положительными очками, которые указывают на хорошее выравнивание. Однако большинство этих очков отрицательно, и фактические значения не особенно полезны для этого типа исследования. Разреженные матрицы позволяют вам хранить интересные значения более эффективным способом.
Разреженная матрица, spScores
, в MAT-файле chlamydia.mat
содержат положительные значения от всех против всего попарного вычисления выравнивания, нормированного счетом самосовмещения.
load('chlamydia.mat','spScores')
С матрицей очков можно посмотреть на распределение множества генов Chlamydophila pneumoniae, выровненных с Хламидией трахоматис и обратным из этого, гены Хламидии трахоматис, выровненные с генами Chlamydophila pneumoniae
figure subplot(2,1,1) hist(max(spScores),100) title('Highest Alignment Scores for Chlamydophila pneumoniae Genes') xlabel('Score');ylabel('Number of genes'); subplot(2,1,2) hist(max(spScores,[],2),100) title('Highest Alignment Scores for Chlamydia trachomatis Genes') xlabel('Score');ylabel('Number of genes');
Помните, что существует 1 112 CDS в Chlamydophila pneumoniae и только 895 у Хламидии трахоматис. Высокое количество нулевых очков в главной гистограмме указывает, что многие из дополнительного CDS в Chlamydophila pneumoniae не имеют хороших соответствий у Хламидии трахоматис.
Другой способ визуализировать данные состоит в том, чтобы посмотреть на положения точек в матрице очков, которые положительны. Разреженный функциональный spy
является простым способом быстро просмотреть точечные диаграммы матриц. Это показывает некоторую интересную структуру в положениях высоких соответствий выигрыша.
figure
spy(spScores > 0)
title(sprintf('Dot Plot of High-Scoring Alignments.\nNormalized Threshold = 0'))
Если мы повышаем порог немного выше, то мы видим очень ясные диагональные строки в графике.
spy(spScores >.1)
title(sprintf('Dot Plot of High-Scoring Alignments.\nNormalized Threshold = 0.1'))
Помните, что это круговые геномы, и кажется, что отправные точки в GenBank произвольны. Если мы переставляем матрицу очков так, чтобы лучшее соответствие первого CDS в Chlamydophila pneumoniae было в первой строке затем, мы видим ясный диагональный график. Это показывает synteny между этими двумя организмами.
[bestScore bestMatch] = max(spScores(:,1));
spy(spScores([bestMatch:end 1:bestMatch-1],:)>.1);
title('Synteny Plot of Chlamydophila pneumoniae and Chlamydia trachomatis')
Гены в различных геномах, которые связаны друг с другом, как говорят, гомологичны. Подобие может быть видообразованием (ортологические гены) или репликацией (paralogous гены). Теперь, когда у нас есть матрица выигрыша, мы можем искать оба типа отношений.
Самый очевидный способ найти ортологи состоит в том, чтобы искать самый высокий выигрыш, соединяющийся для каждого гена. Если счет будет значительным затем, то эти лучшие взаимные пары, очень вероятно, будут ортологическими.
[bestScores, bestIndices] = max(spScores);
Переменная bestIndices содержит индекс лучших взаимных пар для генов в Chlamydophila pneumoniae. Если мы сортируем лучшие очки и составляем таблицу, чтобы сравнить описание лучших взаимных пар, мы видим очень высокое подобие между самыми высокими выигрывающими лучшими взаимными парами.
[orderedScores, permScores] = sort(full(bestScores),'descend'); matches = [num2cell(orderedScores)',num2cell(bestIndices(permScores))',... num2cell((permScores))',... {seqtrachomatis.CDS(bestIndices(permScores)).product;... seqpneumoniae.CDS((permScores)).product; }']; for count = 1:7 fprintf(['Score %f\nChlamydia trachomatis Gene : %s\n',... 'Chlamydophila pneumoniae Gene : %s\n\n'],... matches{count,1}, matches{count,4}, matches{count,5}) end
Score 0.982993 Chlamydia trachomatis Gene : 50S ribosomal protein L36 Chlamydophila pneumoniae Gene : 50S ribosomal protein L36 Score 0.981818 Chlamydia trachomatis Gene : 30S ribosomal protein S15 Chlamydophila pneumoniae Gene : 30S ribosomal protein S15 Score 0.975422 Chlamydia trachomatis Gene : integration host factor alpha-subunit Chlamydophila pneumoniae Gene : integration host factor beta-subunit Score 0.971647 Chlamydia trachomatis Gene : 50S ribosomal protein L16 Chlamydophila pneumoniae Gene : 50S ribosomal protein L16 Score 0.970105 Chlamydia trachomatis Gene : 30S ribosomal protein S10 Chlamydophila pneumoniae Gene : 30S ribosomal protein S10 Score 0.969554 Chlamydia trachomatis Gene : rod shape-determining protein MreB Chlamydophila pneumoniae Gene : rod shape-determining protein MreB Score 0.953654 Chlamydia trachomatis Gene : hypothetical protein Chlamydophila pneumoniae Gene : hypothetical protein
Можно использовать Редактора переменных, чтобы посмотреть на данные в формате электронной таблицы.
open('matches')
Если мы сравниваем описания, мы видим, что у большинства лучших взаимных пар есть идентичные описания.
exactMatches = strcmpi(matches(:,4),matches(:,5)); sum(exactMatches)
ans = 808
Возможно, более интересный лучшие взаимные пары, где описания не идентичны. Некоторые - просто различия в том, как тот же ген описан, но другие показывают очень отличающиеся описания.
mismatches = matches(~exactMatches,:); for count = 1:7 fprintf(['Score %f\nChlamydia trachomatis Gene : %s\n',... 'Chlamydophila pneumoniae Gene : %s\n\n'],... mismatches{count,1}, mismatches{count,4}, mismatches{count,5}) end open('mismatches')
Score 0.975422 Chlamydia trachomatis Gene : integration host factor alpha-subunit Chlamydophila pneumoniae Gene : integration host factor beta-subunit Score 0.929565 Chlamydia trachomatis Gene : low calcium response D Chlamydophila pneumoniae Gene : type III secretion inner membrane protein SctV Score 0.905000 Chlamydia trachomatis Gene : NrdR family transcriptional regulator Chlamydophila pneumoniae Gene : transcriptional regulator NrdR Score 0.903226 Chlamydia trachomatis Gene : Yop proteins translocation protein S Chlamydophila pneumoniae Gene : type III secretion inner membrane protein SctS Score 0.896212 Chlamydia trachomatis Gene : ATP-dependent protease ATP-binding subunit ClpX Chlamydophila pneumoniae Gene : ATP-dependent protease ATP-binding protein ClpX Score 0.890705 Chlamydia trachomatis Gene : ribonuclease E Chlamydophila pneumoniae Gene : ribonuclease G Score 0.884234 Chlamydia trachomatis Gene : ClpC protease ATPase Chlamydophila pneumoniae Gene : ATP-dependent Clp protease ATP-binding protein
Если у вас есть выигрыш, матрицируют, это открывает много возможностей для дальнейшего расследования. Например, вы могли искать CDS, где существует несколько высоких выигрывающих взаимных CDS. Смотрите Кристьанини и Хана [1] для дальнейших идей.
[1] Cristianini, N. и Хан, M.W., "Введение в вычислительную геномику: подход тематических исследований", издательство Кембриджского университета, 2007.