Этот пример показывает несколько способов визуализировать результаты функциональных метагеномных исследований. Обсуждение основано на двух исследованиях, фокусирующихся на метагеномном анализе человеческого дистального микробиома пищеварительного тракта.
Человеческий дистальный пищеварительный тракт является самой высокой плотностью, естественная бактериальная экосистема, известная до настоящего времени. Его размер - до 100 триллионов ячеек - далеко превышают размер других микробных сообществ всего человеческого тела. Недавние исследования показали, что микробиоматерия пищеварительного тракта помогает отрегулировать энергетический баланс, и путем извлечения калорий из в противном случае трудно перевариваемых компонентов, и путем управления устройством хранения данных энергии в адипоцитах. Кроме того, микробиоматерия пищеварительного тракта вовлечена в несметное число биопроцессов в пределах от синтеза существенных витаминов к метаболизму углеводов, липидов и других ксенобиотиков, которые мы поглощаем.
В данном примере мы будем использовать два набора данных. First Data устанавливают, состоит из данных, следующих из анализа дистального микробиома пищеварительного тракта двух взрослых американских предметов [1]. Это включает филогенетический обзор микробных сообществ и функциональный анализ метаболических функций, представленных идентифицированным генофондом. Переменные включены в dataset1
описаны ниже. Обратите внимание на то, что таксономические присвоения представлены как номинальный категориальный массив.
load gutmicrobiomedata.mat % === first data set variables rank1 = dataset1.rank1; % superkingdom assignments of each hit rank2 = dataset1.rank2; % phylum assignments of each hit rank3 = dataset1.rank3; % class assignments of each hit subjF = dataset1.subjF; % number of hits in female subject subjM = dataset1.subjM; % number of hits in male subject
Мы выполняем таксономическое профилирование First Data, установленной путем рассмотрения таксономического присвоения контигов согласно лучшему хиту BLASTX.
Мы запускаем путем вычисления количества присвоенных хитов, которые принадлежат каждому суперкоролевству для каждого предмета.
l1 = getlabels(rank1); % superkingdom labels n1 = numel(l1); count1 = zeros(n1,1); % number of hits for each superkingdom and subject for i = 1:n1 obs = rank1 == l1{i}; count1(i,1) = sum(subjF(obs)); count1(i,2) = sum(subjM(obs)); end % === plot figure() barh(count1); colormap(summer); ax = gca; ax.YTickLabel = l1; xlabel('Number of hits'); title('Superkingdom assignment of best-BLASTX-hits'); legend({'SubjF', 'SubjM'}, 'Location','southeast');
Как вы видите из столбиковой диаграммы, микробное сообщество, живущее в дистальном микробиоме пищеварительного тракта, имеет распространено бактериальную природу. Различия, наблюдаемые между участниками эксперимента и участницами эксперимента, не могут быть обращены из-за ограниченного подчиненного объема выборки и возможности, что эти различия могут быть связаны, чтобы разместить генотип или образ жизни.
Мы теперь повторяем анализ на уровне филюма.
l2 = getlabels(rank2); % phylum labels n2 = numel(l2); count2 = zeros(n2,1); % number of hits for each phylum and subject for i = 1:n2 obs = rank2 == l2{i}; count2(i,1) = sum(subjF(obs)); count2(i,2) = sum(subjM(obs)); end % === plot figure() barh(count2); colormap(summer); ax = gca; ax.YTick = 1:n2; ax.YTickLabel = l2; xlabel('Number of hits'); title('Phylum assignment of best-BLASTX-hits'); legend('SubjF', 'SubjM');
Бактериальные phylotypes присвоены в основном двум делениям, Фирмикьютам и Actinobacteria. Относительный недостаток конфликтов присвоений Bacteroidetes с данными из других исследований, но несоответствие может быть вызван известными смещениями фекального лизиса и используемых методов экстракции ДНК.
Наконец, мы выполняем те же шаги на присвоениях на уровне класса.
l3 = getlabels(rank3); % class labels n3 = numel(l3); count3 = zeros(n3,1); % number of hits for each class and subject for i = 1:n3 obs = rank3 == l3{i}; count3(i,1) = sum(subjF(obs)); count3(i,2) = sum(subjM(obs)); end % === plot figure(); barh(count3); colormap(summer); ax = gca; ax.YTick = 1:n3; ax.YTickLabel = l3; xlabel('Number of hits'); title('Class assignment of best-BLASTX-hits'); legend('SubjF', 'SubjM');
Таксономическое распределение на уровне класса показывает распространенность бактериального phylotypes у Клостридии и групп Бацилл, и также Actinobacteria и Methanobacteria.
Можно объединить таксономическое распределение и базовую таксономическую классификацию в одно представление при помощи графика, где каждая вершина представляет класс, и каждый внутренний узел представляет филюм или суперкоролевство.
Чтобы создать такой график, мы должны определить матрицу смежности CM
представление связей между родительскими объектами и их потомками среди узлов. Мы идентифицируем филюмы (дочерние элементы), принадлежащие каждому суперкоролевству (родительский элемент), и в свою очередь классы (дочерние элементы), принадлежащие каждому филюму (родительский элемент).
L = nominal([l1 l2 l3]); N = n1 + n2 + n3; CM = zeros(N, N); % connectivity matrix % === populate CM with relationships between superkingdoms and phyla for i = 1:n1 obs = rank1 == l1{i}; % entries classified in a given superkingdom from = find(L == l1{i}); % parent node subobs = unique(rank2(obs)); % phyla in a given superkigdom for j = 1:numel(subobs) to = find(L == subobs(j)); % child node CM(from, to) = 1; end end % === populate CM with relationships between phyla and classes for i = 1:n2 obs = rank2 == l2{i}; % entries classified in a given phylum from = find(L == l2{i}); from = from(end); subobs = unique(rank3(obs)); % classes in a given phylum for j = 1:numel(subobs) to = find(L == subobs(j)); to = to(end); CM(from, to) = 1; end end % === create biograph object bg = biograph(CM-diag(diag(CM)),[],'NodeAutoSize','off','ShowTextInNodes','Label');
Получившийся график имеет 60 узлов и 58 ребер. Каждый уровень в графике сопоставлен с данным таксономическим рангом, и ребра представляют базовую таксономическую классификацию. Мы можем теперь пометить каждый узел соответствующим таксономическим присвоением и вращать целый график против часовой стрелки 90 градусами.
% === label each node set(bg.Nodes,'Size',[10 100]); for i = 1:numel(bg.Nodes) bg.Nodes(i).Label = char(L(i)); end dolayout(bg); % === rotate counterclockwise by 90 degrees for i = 1:numel(bg.Nodes) bg.Nodes(i).Position = fliplr(bg.Nodes(i).Position).*[-1 1]; bg.Nodes(i).Size = [100 15]; end % === redraw edges without changing node positions bg.LayoutType = 'equilibrium'; dolayout(bg,'PathsOnly',true); view(bg)
Чтобы включать данные о распределении в график, для каждого присвоения, мы рассматриваем среднее количество хитов между двумя предметами и соответствующим процентом. Мы затем настраиваем цвет и размер каждого узла. В частности, вершины представлены полями, в то время как внутренние узлы представлены кругами, и размер каждого узла пропорционален количеству хитов (процент), которые находятся в пределах данного таксономического присвоения.
% === compute distribution among ranks count = [count1; count2; count3]; count = sum(count,2)/2; % avg between subjects pct = (count + 1)/sum(count + 1) * 100; % add pseudocounts % === determine color schema t = accumarray(round(pct+1),1); t(t>0) = 1:nnz(t); colors = flipud(summer(nnz(t))); cindex = t(round(pct+1)); % === customize color of nodes according to distribution for i = 1:numel(bg.Nodes) mynode = bg.Nodes(i); if (numel(getdescendants(mynode))~= 1) % leaf mynode.Shape = 'circle'; end mynode.Color = colors(cindex(i),:); end view(bg)
От этого представления можно сразу видеть, как большинство микробных сообществ состоит из Бактерий, в конкретном Firmicutes, включая Клостридию и Бациллы.
Филогенетические оценки микробных сообществ обеспечивают начальную точку для интерпретации функциональных предсказаний из метагеномных данных. Метаболический потенциал микробиоматерии изучен, чтобы изучить, как человеческий дистальный микробиом пищеварительного тракта предоставляет нам физиологические свойства, которые мы не должны были развивать самостоятельно.
Здесь мы считаем метаболические функции сопоставленными с человеческим дистальным микробиомом пищеварительного тракта через присвоения трасс KEGG. Мы используем отношения разногласий, чтобы оценить обогащение или истощение категорий KEGG относительно ссылочных геномных наборов данных, а именно, геном Человека разумного, набор упорядоченных бактериальных геномов и набор упорядоченных archaeal геномов.
genome = dataset1.genome; % reference genomes considered keggCat = dataset1.keggCat; % KEGG category assignment keggData = dataset1.keggData; % odds ratio for each KEGG category relative to reference genomes
Отношение разногласий одного (соответствие журналу нуля) указывает, что у микробного сообщества была та же пропорция хитов к данной категории как набор справочных данных. Отношение разногласий, больше, чем одно (соответствие журналу, больше, чем нуль), указывает на обогащение, тогда как отношение разногласий меньше чем один (соответствие журналу меньше, чем нуль) указывает под представлением относительно набора справочных данных.
figure() hi = imagesc(log(keggData)); colormap(redbluecmap); colorbar; ha = gca; ha.XTick = 1:numel(genome); ha.XTickLabel = genome; ha.YTick = 1:numel(keggCat); ha.YTickLabel = keggCat;
Из карты тепла выше, мы замечаем, что человеческий микробиом пищеварительного тракта является высокообогащенным относительно генома человека, похожим на упорядоченные бактерии, и умеренно обогащенный относительно упорядоченного archaea.
Категории COG, которые используют эволюционные отношения, чтобы сгруппировать функционально связанные гены, могут использоваться, чтобы выполнить функциональный анализ вместо категорий KEGG, которые сопоставляют ферменты на известные метаболические трассы. Объект DataMatrix dm2
состоит из данных, следующих из сравнительного метагеномного анализа человеческого дистального микробиома пищеварительного тракта нескольких японских предметов, включая младенцев, дочерние элементы и взрослых [2]. Для ссылки сообщают о данных американских предметов, рассмотренных выше, а также другие метагеномные наборы данных. Строки представляют различные наблюдения COG, тогда как столбцы представляют различные подчиненные группы. Числовые данные состоят из нормированных процентов хитов в данной категории COG для данной подчиненной группы.
get(dm2)
Name: '' RowNames: {3868x1 cell} ColNames: {1x12 cell} NRows: 3868 NCols: 12 NDims: 2 ElementClass: 'double'
Для каждой основной категории COG мы вычисляем совокупный нормированный процент и храним результаты в новом объекте DataMatrix под названием dm2Count
.
codes = {'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', ... 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'}; % COG code to consider n = numel(codes); N = size(dm2,2); count = zeros(n,N); for i = 1:n try count(i,:) = sum(dm2.(codes{i})); catch sprintf('COG code %s is not found in the data set.',codes{i}); end end dm2Count = bioma.data.DataMatrix(count, codes, dm2.ColNames);
Чтобы заняться расследованиями, отличаются ли шаблоны обогащения COG среди трех возрастных групп, мы сначала считаем данные сопоставленными со взрослым, дочерними и младенческими предметами.
group1 = {'Adult', 'Child', 'Infant'}; figure() plot(dm2Count.(':')(group1), '.-', 'LineWidth', 2); haxis = gca; haxis.XTick = 1:n; haxis.XTickLabel = codes; legend(group1, 'location', 'northwest') xlabel('COG categories'); ylabel('Normalized percentage of assigned genes');
Мы замечаем из этого графика, что у взрослых предметов и дочерних элементов, кажется, есть подобный шаблон обогащения в терминах категорий COG. Младенческие предметы, с другой стороны, отображают некоторую сингулярность для категорий G, K и L, соответствуя транспорту углевода и метаболизму, записи и репликации соответственно.
В свете этого сродства между взрослым и дочерним микробиомом функциональные шаблоны мы рассматриваем комбинацию этих двух выборок (Adult+Child) при выполнении сравнения с другими экологическими демонстрационными микробиомами.
group2 = {'Adult+Child', 'Soil', 'Whale Fall Ave.', 'Sargasso'}; figure() plot(dm2Count.(':')(group2), '.-', 'LineWidth', 2); haxis = gca; haxis.XTick = 1:n; haxis.XTickLabel = codes; legend(group2, 'location', 'north'); xlabel('COG categories'); ylabel('Normalized percentage of assigned genes');
Самые поразительные различия между человеческим шаблоном обогащения микробиома и теми из других экологических микробных сообществ связаны с категорией COG G (метаболизм углевода). Это, возможно, связано с понятием, что микробиоматерия толстой кишки использует в противном случае трудно перевариваемые полисахариды и пептиды как главный ресурс для выработки энергии и биосинтеза сотовых компонентов. Обогащение нескольких ферментов для восстановления ДНК также примечательно (категория COG L).
Более эффективный способ визуализировать распределение шаблонов присвоенных COG генов между каждым типом микробиома состоит из графического вывода значений обогащения для каждой категории COG вдоль окружности. Для каждой точки данных расстояние от центра круга пропорционально значению обогащения.
r = dm2Count.(':')(group2); colors = {'b', 'g', 'r', 'k'}; theta = (linspace(0, 2*pi, n+1))'; figure(); hold on; for i = 1:numel(group2) rho = [r(:,i); r(1,i)]; plot(rho .* cos(theta), rho .* sin(theta), '-', 'Color', colors{i}, 'LineWidth', 2); end % === plot outside circle and labels m = max(max(r)); for i = 1:n text( (m + .5) * cos(theta(i)), (m + .5) * sin(theta(i)), codes{i}, ... 'HorizontalAlignment', 'center'); end theta = (linspace(0,2*pi,100))'; plot(m * cos(theta), m * sin(theta), 'k-'); axis equal axis([-1 1 -1 1] * (m+1)) axis off legend(group2, 'location', 'NorthEastOutside')
Мы можем исследовать отношение между человеческими микробиомами пищеварительного тракта и другими экологическими микробиомами с помощью значений обогащения для каждого COG. Мы создаем иерархическое кластерное дерево с помощью полного алгоритма рычажного устройства и матрицы расстояния, сгенерированной путем рассмотрения корреляции между точками данных. Рассмотренные выборки включают: Взрослый, Дочерний элемент, Младенец, американец, Почва, падение Кита (1, 2, и 3) и Саргассовая водоросль.
group3 = {'Adult', 'Child', 'Infant', 'American (SubjF)', 'American (SubjM)', ... 'Soil', 'Whale Fall 1', 'Whale Fall 2', 'Whale Fall 3', 'Sargasso'}; z = linkage((dm2Count.(':')(group3))', 'complete', 'correlation'); dendrogram(z, 'orientation', 'left', 'labels', group3, 'colorthreshold', 'default')
Кластеризирующийся анализ далее показывает, что, в то время как взрослые и дочерние микробиомы представляют подобные профили, те из младенцев имеют отличный профиль. Кроме того, некоторые различия могут наблюдаться между японскими физическими лицами и американскими предметами. Наконец, как ожидалось, человеческий микробиом пищеварительного тракта, кажется, конкретен человеческих разновидностей, и не связанный с другими экологическими микробными сообществами.
[1] Жабры, S., и др., "Метагеномный Анализ Человеческого Дистального Микробиома Пищеварительного тракта", Наука, 312 (5778):1355-9, 2006.
[2] Курокава, K., и др., "Сравнительная Метагеномика Показала Обычно Обогащаемые Генные Наборы в Человеческих Микробиомах Пищеварительного тракта", Исследование ДНК, 14 (4):169-81, 2007.