Этот пример показывает метод, который может использоваться, чтобы исследовать значение выравниваний последовательности. Количество тождеств или положительных сторон в выравнивании не является индикатором clear значительного выравнивания. Перестановка последовательности от выравнивания будет иметь подобные проценты положительных сторон и тождеств, когда выровнено против исходной последовательности. Счет от выравнивания является лучшим индикатором значения выравнивания. Этот пример использует те же связанные с болезнью Тея-Сакса гены и белки, анализируемые в Выравнивающихся Парах Последовательностей.
В этом примере вы будете работать непосредственно с данными о белке, так используйте getgenpept
вместо getgenbank
, чтобы загрузить данные из сайта NCBI. Сначала считайте человеческие информации белка в MATLAB®.
humanProtein = getgenpept('NP_000511');
Результаты поиска BLASTX, выполняемого с этой последовательностью, показали, что белок Дрозофилы, инвентарный номер GenPept AAM29423, имеет некоторое подобие человеческой последовательности HEXA. Используйте getgenpept
, чтобы загрузить эту последовательность.
flyProtein = getgenpept('AAM29423');
Для вашего удобства ранее загруженные последовательности включены в MAT-файл. Обратите внимание на то, что данные в общедоступных репозиториях часто курируются и обновляются; поэтому результаты этого примера могут немного отличаться, когда вы используете актуальные наборы данных.
load('flyandhumanproteins.mat','humanProtein','flyProtein') seqdisp(humanProtein) seqdisp(flyProtein)
ans = 10x70 char array '>gi|189181666|gb|NP_000511.2| beta-hexosaminidase subunit alpha pre...' ' 1 MTSSRLWFSL LLAAAFAGRA TALWPWPQNF QTSDQRYVLY PNNFQFQYDV SSAAQPGCSV' ' 61 LDEAFQRYRD LLFGSGSWPR PYLTGKRHTL EKNVLVVSVV TPGCNQLPTL ESVENYTLTI' '121 NDDQCLLLSE TVWGALRGLE TFSQLVWKSA EGTFFINKTE IEDFPRFPHR GLLLDTSRHY' '181 LPLSSILDTL DVMAYNKLNV FHWHLVDDPS FPYESFTFPE LMRKGSYNPV THIYTAQDVK' '241 EVIEYARLRG IRVLAEFDTP GHTLSWGPGI PGLLTPCYSG SEPSGTFGPV NPSLNNTYEF' '301 MSTFFLEVSS VFPDFYLHLG GDEVDFTCWK SNPEIQDFMR KKGFGEDFKQ LESFYIQTLL' '361 DIVSSYGKGY VVWQEVFDNK VKIQPDTIIQ VWREDIPVNY MKELELVTKA GFRALLSAPW' '421 YLNRISYGPD WKDFYIVEPL AFEGTPEQKA LVIGGEACMW GEYVDNTNLV PRLWPRAGAV' '481 AERLWSNKLT SDLTFAYERL SHFRCELLRR GVQAQPLNVG FCEQEFEQT ' ans = 12x70 char array '>gi|21064387|gb|AAM29423.1| RE17456p [Drosophila melanogaster]. ' ' 1 MSLAVSLRRA LLVLLTGAIF ILTVLYWNQG VTKAQAYNEA LERPHSHHDA SGFPIPVEKS' ' 61 WTYKCENDRC MRVGHHGKSA KRVSFISCSM TCGDVNIWPH PTQKFLLSSQ THSFSVEDVQ' '121 LHVDTAHREV RKQLQLAFDW FLKDLRLIQR LDYGGSSSEP TVSESSSKSR HHADLEPAAT' '181 LFGATFGVKK AGDLTSVQVK ISVLKSGDLN FSLDNDETYQ LSTQTEGHRL QVEIIANSYF' '241 GARHGLSTLQ QLIWFDDEDH LLHTYANSKV KDAPKFRYRG LMLDTSRHFF SVESIKRTIV' '301 GMGLAKMNRF HWHLTDAQSF PYISRYYPEL AVHGAYSESE TYSEQDVREV AEFAKIYGVQ' '361 VIPEIDAPAH AGNGWDWGPK RGMGELAMCI NQQPWSFYCG EPPCGQLNPK NNYTYLILQR' '421 IYEELLQHTG PTDFFHLGGD EVNLDCWAQY FNDTDLRGLW CDFMLQAMAR LKLANNGVAP' '481 KHVAVWSSAL TNTKRLPNSQ FTVQVWGGST WQENYDLLDN GYNVIFSHVD AWYLDCGFGS' '541 WRATGDAACA QYRTWQNVYK HRPWERMRLD KKRKKQVLGG EVCMWTEQVD ENQLDNRLWP' '601 RTAALAERLW TDPSDDHDMD IVPPDVFRRI SLFRNRLVEL GIRAEALFPK YCAQNPGECI'
Первое, что нужно сделать состоит в том, чтобы использовать seqdotplot
, чтобы видеть, существуют ли какие-либо области, которые ясно выравниваются. Это не показывает очевидных выравниваний, но существуют некоторые сферы интересов.
seqdotplot(humanProtein,flyProtein,3,2) title('Dot Plot of Two HexA-like Proteins'); ylabel('Human Protein');xlabel('Drosophila Protein');
Заметьте, что существует несколько диагональных фрагментов в точечной диаграмме. Это не особенно достоверные свидетельства значительного глобального выравнивания, но можно попробовать глобальное выравнивание с помощью функционального nwalign
. Матрица выигрыша BLOSUM50 используется по умолчанию.
[sc50,globAlig50] = nwalign(humanProtein,flyProtein);
fprintf('Score = %g \n',sc50)
showalignment(globAlig50);
Score = 49.6667
Подобие последовательности является довольно низким, таким образом, сила BLOSUM30 быть более соответствующей матрицей выигрыша.
[sc30,globAlig30] = nwalign(humanProtein,flyProtein,'scoringmatrix','blosum30'); fprintf('Score = %g \n',sc30) showalignment(globAlig30);
Score = 82
Это дает выравнивание, которое имеет некоторые области довольно сильного сходства, но это выравнивание является статистически значительным? Один способ заняться расследованиями, является ли этот счет значительным, состоит в том, чтобы использовать Методы Монте-Карло. Учитывая, что последовательность мухи была найдена с помощью поиска BLAST, существует некоторое доказательство, что существует подобие между этими двумя последовательностями. Разумно ожидать, что счет к этому выравниванию будет выше, чем очки, полученные из выравнивания случайных последовательностей аминокислот к белку.
Чтобы оценить, если счет является значительным, первый шаг должен сделать некоторые случайные последовательности, которые подобны тому из белка мухи. Один способ сделать это должно взять случайные перестановки последовательности мухи. Это может быть сделано с функцией randperm
. Затем вычислите глобальное выравнивание этих случайных последовательностей против человеческого белка и посмотрите на статистическое значение очков.
Инициализируйте состояние генераторов случайных чисел по умолчанию, чтобы гарантировать, что фигуры и результаты сгенерировали соответствие те в версии HTML этого примера.
rng(0,'twister') n = 50; globalscores = zeros(n,1); flyLen = length(flyProtein.Sequence); for i = 1:n perm = randperm(flyLen); permutedSequence = flyProtein.Sequence(perm); globalscores(i) = nwalign(humanProtein,permutedSequence,'scoringmatrix','blosum30'); end
Теперь постройте очки как столбчатую диаграмму. Обратите внимание на то, что, потому что вы используете случайным образом сгенерированные последовательности.
figure buckets = ceil(n/5); hist(globalscores,buckets) hold on; stem(sc30,1,'k') title('Determining Alignment Significance using Monte Carlo Techniques'); xlabel('Score'); ylabel('Number of Sequences');
Множество выравниваний к случайным последовательностям может быть аппроксимировано распределением экстремума типа 1. Используйте функцию evfit
от Statistics and Machine Learning Toolbox™, чтобы оценить параметры этого распределения.
parmhat = evfit(globalscores)
parmhat = -31.7597 6.6440
Наложите график функции плотности вероятности предполагаемого распределения.
x = min(globalscores):max([globalscores;sc30]); y = evpdf(x,parmhat(1),parmhat(2)); [v, c] = hist(globalscores,buckets); binWidth = c(2) - c(1); scaleFactor = n*binWidth; plot(x,scaleFactor*y,'r'); hold off;
Из этого графика вы видите, что глобальное выравнивание (globAlig30) является ясно статистически значительным.
На веб-сайте FLYBASE можно искать всю Дрозофилу beta-N-acetylhexosaminidase гены. На ген, на который вы смотрели до сих пор, ссылаются как CG8824. Теперь вы хотите смотреть на другой подобный ген, например, Hexo1.
flyHexo1 = getgenpept('AAL28566');
Мухе последовательность аминокислоты Hexo1 также предоставляют в MAT-файле flyandhumanproteins.mat
.
load('flyandhumanproteins.mat','flyHexo1') seqdisp(humanProtein)
ans = 10x70 char array '>gi|189181666|gb|NP_000511.2| beta-hexosaminidase subunit alpha pre...' ' 1 MTSSRLWFSL LLAAAFAGRA TALWPWPQNF QTSDQRYVLY PNNFQFQYDV SSAAQPGCSV' ' 61 LDEAFQRYRD LLFGSGSWPR PYLTGKRHTL EKNVLVVSVV TPGCNQLPTL ESVENYTLTI' '121 NDDQCLLLSE TVWGALRGLE TFSQLVWKSA EGTFFINKTE IEDFPRFPHR GLLLDTSRHY' '181 LPLSSILDTL DVMAYNKLNV FHWHLVDDPS FPYESFTFPE LMRKGSYNPV THIYTAQDVK' '241 EVIEYARLRG IRVLAEFDTP GHTLSWGPGI PGLLTPCYSG SEPSGTFGPV NPSLNNTYEF' '301 MSTFFLEVSS VFPDFYLHLG GDEVDFTCWK SNPEIQDFMR KKGFGEDFKQ LESFYIQTLL' '361 DIVSSYGKGY VVWQEVFDNK VKIQPDTIIQ VWREDIPVNY MKELELVTKA GFRALLSAPW' '421 YLNRISYGPD WKDFYIVEPL AFEGTPEQKA LVIGGEACMW GEYVDNTNLV PRLWPRAGAV' '481 AERLWSNKLT SDLTFAYERL SHFRCELLRR GVQAQPLNVG FCEQEFEQT '
Повторите процесс генерации глобального выравнивания и затем использования случайных перестановок аминокислот, чтобы оценить значение глобального выравнивания.
[Hexo1score,Hexo1Alignment] = nwalign(humanProtein,flyHexo1,'scoringmatrix','blosum30'); fprintf('Score = %g \n',Hexo1score) showalignment(Hexo1Alignment); Hexo1globalscores = zeros(n,1); flyLen = length(flyHexo1.Sequence); for i = 1:n perm = randperm(flyLen); permutedSequence = flyHexo1.Sequence(perm); Hexo1globalscores(i) = nwalign(humanProtein,permutedSequence,'scoringmatrix','blosum30'); end
Score = -72.2
Постройте очки, вычислите параметры распределения и наложите PDF на столбчатой диаграмме.
figure buckets = ceil(n/5); hist(Hexo1globalscores,buckets) title('Determining Alignment Significance using Monte Carlo Techniques'); xlabel('Score'); ylabel('Number of Sequences'); hold on; stem(Hexo1score,1,'c') parmhat = evfit(Hexo1globalscores) x = min(Hexo1globalscores):max([Hexo1globalscores;Hexo1score]); y = evpdf(x,parmhat(1),parmhat(2)); [v, c] = hist(Hexo1globalscores,buckets); binWidth = c(2) - c(1); scaleFactor = n*binWidth; plot(x,scaleFactor*y,'r'); hold off;
parmhat = -70.6926 7.0619
В этом случае кажется, что выравнивание не является статистически значительным. Выше выигрыш выравниваний может легко быть сгенерирован от случайной перестановки аминокислот в последовательности. Можно вычислить аппроксимированное p-значение от предполагаемого экстремума CDF: Однако намного больше, чем 50 случайных перестановок необходимы, чтобы получить надежную оценку экстремума параметры PDF, от которых можно вычислить довольно точное p-значение.
p = 1 - evcdf(Hexo1score,parmhat(1),parmhat(2))
p = 0.4458
Одна вещь заметить состоит в том, что длины этих двух последовательностей очень отличаются. Человеческий HEXA1 является 529 остатками долго и мухой, белок Hexo1 является только 383 остатками в длине. Когда вы пытаетесь выровнять эти две последовательности глобально, это различие в длине означает, что большое количество разрывов должно будет быть введено в последовательность. Это означает, что значение очков будет в большой степени зависеть от параметров EXTENDGP
и GAPOPEN
. (См. справку для nwalign
для получения дополнительной информации.) Вместо того, чтобы использовать глобальное выравнивание, в этом случае лучший подход может быть должен посмотреть на локальное выравнивание между этими двумя последовательностями.
Вы теперь повторите процесс оценки значения выравнивания на этот раз с помощью локального выравнивания и немного отличающегося метода генерации случайных последовательностей. Вместо того, чтобы просто переставить буквы в последовательности, альтернатива должна чертить последовательность от распределения многочлена, которое оценивается от последовательности белка мухи. Можно сделать это использование функции randseq
и aacount
; первые оценки частоты аминокислоты последовательности запроса и позже случайным образом создают новые последовательности на основе этого распределения.
[lscore,locAlig] = swalign(humanProtein,flyHexo1,'scoringmatrix','blosum30'); fprintf('Score = %g \n',lscore) showalignment(locAlig); localscores = zeros(n,1); aas = aacount(flyHexo1); for i = 1:n randProtein = randseq(flyLen,'FROMSTRUCTURE',aas); localscores(i) = swalign(humanProtein,randProtein,'scoringmatrix','blosum30'); end
Score = 152
Постройте очки, вычислите параметры распределения и наложите PDF на столбчатой диаграмме.
figure hist(localscores,buckets) title('Determining Alignment Significance using Monte Carlo Techniques'); xlabel('Score'); ylabel('Number of Sequences'); hold on; stem(lscore,1,'r') parmhat = evfit(localscores) x = min(localscores):max([localscores;lscore]); y = evpdf(x,parmhat(1),parmhat(2)); [v, c] = hist(localscores,buckets); binWidth = c(2) - c(1); scaleFactor = n*binWidth; plot(x,scaleFactor*y,'r'); hold off;
parmhat = 40.8331 3.9312
Вы хотели бы экспериментировать, чтобы видеть, существуют ли существенные различия в распределении очков, сгенерированных с randperm
и randseq
.
С локальным выравниванием кажется, что выравнивание является статистически значительным. На самом деле рассмотрение локального выравнивания показывает очень хорошее выравнивание для полной из последовательности Hexo1.