Анализ человеческого дистального микробиома пищеварительного тракта

Этот пример показывает несколько способов визуализировать результаты функциональных метагеномных исследований. Обсуждение основано на двух исследованиях, фокусирующихся на метагеномном анализе человеческого дистального микробиома пищеварительного тракта.

Введение

Человеческий дистальный пищеварительный тракт является самой высокой плотностью, естественная бактериальная экосистема, известная до настоящего времени. Его размер - до 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. Мы используем отношения разногласий, чтобы оценить обогащение или истощение категорий 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

Категории 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.