exponenta event banner

Изучение данных экспрессии генов микрочипов

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

Введение

Микрочипы содержат олигонуклеотидные или кДНК зонды для сравнения профиля экспрессии генов в геномной шкале. Определение того, являются ли изменения в экспрессии генов статистически значимыми между различными состояниями, например двумя различными типами опухолей, и определение биологической функции дифференциально экспрессируемых генов, являются важными целями в эксперименте с микрочипами.

Для этого примера используют общедоступный набор данных, содержащий данные экспрессии генов 42 опухолевых тканей эмбриональной центральной нервной системы (ЦНС) [1]. Файлы CEL можно загрузить здесь. Образцы гибридизовали на массивах Affymetrix ® HuGeneFL GeneChip ®. Необработанный набор данных был предварительно обработан с помощью процедур Rability Multi-array Average (RMA) и GC Rustive Multi-array Average (GCRMA). Для получения дополнительной информации о предварительной обработке микрочипов Аффиметрикс олигонуклеотида см. Данные микрочипов аффиметрикс ® предварительной обработки на уровне зонда.

Вы будете использовать t-тест и частоту ложных открытий, чтобы обнаружить дифференциально экспрессируемые гены между двумя типами опухолей. Кроме того, вы посмотрите на термины генной онтологии, связанные со значительно повышенными генами.

Загрузка данных выражения

Загрузка файла MAT cnsexpressiondata содержит три объекта DataMatrix, связанные со значениями экспрессии генов, предварительно обработанными с помощью RMA (expr_cns_rma), GCRMA с оценкой максимального правдоподобия (expr_cns_gcrma_mle) и GCRMA с эмпирической оценкой Байеса (expr_cns_gcrma_eb).

load cnsexpressiondata

В каждом объекте DataMatrix каждая строка соответствует набору зондов в массиве, а каждый столбец соответствует выборке. Объект DataMatrix expr_cns_gcrma_eb будет использоваться в этом примере, но также могут использоваться данные одной из двух других переменных выражения.

Получение свойств объекта DataMatrix expr_cns_gcrma_eb с использованием get команда.

get(expr_cns_gcrma_eb)
            Name: ''
        RowNames: {7129×1 cell}
        ColNames: {1×42 cell}
           NRows: 7129
           NCols: 42
           NDims: 2
    ElementClass: 'single'

Определите количество генов и образцов путем обращения к количеству строк и количеству столбцов объекта DataMatrix соответственно.

nGenes = expr_cns_gcrma_eb.NRows
nSamples = expr_cns_gcrma_eb.NCols
nGenes =

        7129


nSamples =

    42

Отображение между ID набора зондов и соответствующим генным символом предоставляется как объект Map в файле MAT. HuGeneFL_GeneSymbol_Map.

load HuGeneFL_GeneSymbol_Map

Аннотирование значений выражения в expr_cns_gcrma_eb с соответствующими символами генов путем создания клеточного массива символов генов из объекта Map и установки имен строк объекта Data Matrix.

huGenes = values(hu6800GeneSymbolMap, expr_cns_gcrma_eb.RowNames);
expr_cns_gcrma_eb = rownames(expr_cns_gcrma_eb, ':', huGenes);

Фильтрация данных выражения

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

Удалить данные экспрессии генов с пустыми символами генов (в этом примере пустые символы помечены как '---').

expr_cns_gcrma_eb('---', :) = [];

Использовать genelowvalfilter отфильтровывать гены с очень низкими абсолютными значениями экспрессии.

[~, expr_cns_gcrma_eb] = genelowvalfilter(expr_cns_gcrma_eb);

Использовать genevarfilter для фильтрации генов с небольшой дисперсией по образцам.

[~, expr_cns_gcrma_eb] = genevarfilter(expr_cns_gcrma_eb);

Определите количество генов после фильтрации.

nGenes = expr_cns_gcrma_eb.NRows
nGenes =

        5669

Идентификация дифференциальной экспрессии генов

Теперь можно сравнить значения экспрессии генов между двумя группами данных: медуллобластомы ЦНС (MD) и злокачественные глиомы ненейронного происхождения (Mglio) опухоли.

Из данных экспрессии всех 42 выборок в наборе данных извлекают данные 10 выборок MD и 10 выборок Mglio.

MDs = strncmp(expr_cns_gcrma_eb.ColNames,'Brain_MD', 8);
Mglios = strncmp(expr_cns_gcrma_eb.ColNames,'Brain_MGlio', 11);

MDData = expr_cns_gcrma_eb(:, MDs);
get(MDData)

MglioData = expr_cns_gcrma_eb(:, Mglios);
get(MglioData)
            Name: ''
        RowNames: {5669×1 cell}
        ColNames: {1×10 cell}
           NRows: 5669
           NCols: 10
           NDims: 2
    ElementClass: 'single'

            Name: ''
        RowNames: {5669×1 cell}
        ColNames: {1×10 cell}
           NRows: 5669
           NCols: 10
           NDims: 2
    ElementClass: 'single'

Проведите t-тест для каждого гена, чтобы идентифицировать значительные изменения в значениях экспрессии между образцами MD и образцами Mglio. Можно проверить результаты теста из нормального графика квантилей t-баллов и гистограмм t-баллов и p-значений t-тестов.

[pvalues, tscores] = mattest(MDData, MglioData,...
                                'Showhist', true', 'Showplot', true);

В любой тестовой ситуации могут возникать два типа ошибок, ложноположительные, заявляя, что ген дифференциально экспрессируется, когда его нет, и ложноотрицательные, когда тест не идентифицирует действительно дифференциально экспрессируемый ген. В тестировании множественных гипотез, которое одновременно проверяет нулевую гипотезу тысяч генов, каждый тест имеет специфическую ложноположительную частоту или частоту ложных открытий (FDR). Частота ложного обнаружения определяется как ожидаемое отношение числа ложных срабатываний к общему числу положительных вызовов в анализе дифференциального выражения между двумя группами выборок [2].

В этом примере FDR вычисляется с помощью процедуры Storey-Tibshirani [2]. Процедура также вычисляет q-значение теста, которое измеряет минимальный FDR, возникающий при вызове теста. Оценка БУР зависит от истинно нулевого распределения множественных тестов, которое неизвестно. Методы перестановки могут использоваться для оценки истинно нулевого распределения тестовой статистики путем перестановки столбцов матрицы данных экспрессии генов [2] [3]. В зависимости от размера выборки может оказаться невозможным рассмотреть все возможные перестановки. Обычно случайное подмножество перестановок рассматривается в случае большого размера выборки. Используйте nchoosek в Toolbox™ Статистика и машинное обучение, чтобы узнать количество всех возможных перестановок выборок в этом примере.

all_possible_perms = nchoosek(1:MDData.NCols+MglioData.NCols, MDData.NCols);
size(all_possible_perms, 1)
ans =

      184756

Выполнение t-теста перестановки с использованием mattest и PERMUTE возможность вычисления p-значений 10000 перестановок путем перестановки столбцов матрицы данных экспрессии генов MDData и MglioData [3].

pvaluesCorr = mattest(MDData, MglioData, 'Permute', 10000);

Определите количество генов, которые считаются имеющими статистическую значимость при отсечении p-значения 0,05. Примечание: Вы можете получить другое количество генов из-за результата теста перестановки.

cutoff = 0.05;
sum(pvaluesCorr < cutoff)
ans =

        2121

Оценка значений FDR и q для каждого теста с использованием mafdr. Величина pi0 является общей долей истинных нулевых гипотез в исследовании. Он оценивается по моделируемому нулевому распределению с помощью начальной загрузки или кубического полинома. Примечание: Вы также можете вручную установить значение лямбда для оценки pi0.

figure;
[pFDR, qvalues] = mafdr(pvaluesCorr, 'showplot', true);

Определите количество генов, которые имеют q-значения, меньшие, чем пороговое значение. Примечание: Вы можете получить другое количество генов из-за теста перестановки и результатов начальной загрузки.

sum(qvalues < cutoff)
ans =

        2173

Многие гены с низким FDR предполагают, что две группы, MD и Mglio, биологически различны.

Вы также можете эмпирически оценить скорректированные значения p FDR с помощью процедуры Бенджамини-Хохберга (BH) [4], установив mafdr входной параметр BHFDR к true.

pvaluesBH = mafdr(pvaluesCorr, 'BHFDR', true);
sum(pvaluesBH < cutoff)
ans =

        1374

Можно хранить t-оценки, p-значения, pFDR, q-значения и скорректированные p-значения BH FDR вместе как объект DataMatrix.

testResults = [tscores pvaluesCorr pFDR qvalues pvaluesBH];

Обновите имя столбца для исправленных значений p БУР BH с помощью colnames метод объекта DataMatrix.

testResults = colnames(testResults, 5, {'FDR_BH'});

Можно сортировать по значениям p pvaluesCorr с использованием sortrows матод.

testResults = sortrows(testResults, 2);

Отображение первых 20 генов в testResults. Примечание.Ваши результаты могут отличаться от приведенных ниже из-за теста перестановки и результатов начальной загрузки.

testResults(1:20, :)
ans = 

                t-scores    p-values      FDR           q-values      FDR_BH    
    PLEC1       -9.6223     6.7194e-09    1.3675e-05     7.171e-06    1.9974e-05
    HNRPA1        9.359      1.382e-08    1.4063e-05     7.171e-06    1.9974e-05
    FCGR2A      -9.3548      1.394e-08     9.457e-06     7.171e-06    1.9974e-05
    PLEC1       -9.3495     1.4094e-08     7.171e-06     7.171e-06    1.9974e-05
    FBL          9.1518     1.9875e-08    8.0899e-06    7.1728e-06     1.998e-05
    KIAA0367     -8.996     2.4324e-08    8.2509e-06    7.1728e-06     1.998e-05
    ID2B        -8.9285     2.6667e-08    7.7533e-06    7.1728e-06     1.998e-05
    RBMX         8.8905     2.8195e-08    7.1728e-06    7.1728e-06     1.998e-05
    PAFAH1B3     8.7561     3.5317e-08    7.9864e-06    7.9864e-06    2.2246e-05
    H3F3A        8.6512     4.5191e-08    9.1973e-06    8.5559e-06    2.3832e-05
    LRP1        -8.6465     4.6243e-08    8.5559e-06    8.5559e-06    2.3832e-05
    PEA15       -8.3256     1.1419e-07    1.9367e-05    1.9367e-05    5.3947e-05
    ID2B        -8.1183     1.7041e-07    2.6679e-05    2.4793e-05    6.9059e-05
    SFRS3        8.1166     1.7055e-07    2.4793e-05    2.4793e-05    6.9059e-05
    HLA-DPA1    -7.8546     2.4004e-07    3.2569e-05    3.2569e-05     9.072e-05
    C5orf13      7.7195     2.9229e-07    3.7179e-05    3.3475e-05    9.3243e-05
    PTMA         7.7013     2.9658e-07    3.5506e-05    3.3475e-05    9.3243e-05
    NAP1L1        7.674     3.0489e-07    3.4474e-05    3.3475e-05    9.3243e-05
    HMGB2        7.6532     3.1251e-07    3.3475e-05    3.3475e-05    9.3243e-05
    RAB31       -13.664      3.308e-07    3.3662e-05    3.3662e-05    9.3766e-05

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

Постройте график -log10 p-значений против биологического эффекта на графике вулкана. Примечание: Из UI графика вулкана можно в интерактивном режиме изменить предел отсечки и изменения кратности p-значения, а также экспортировать дифференциально экспрессированные гены.

diffStruct = mavolcanoplot(MDData, MglioData, pvaluesCorr)
diffStruct = 

  struct with fields:

           Name: 'Differentially Expressed'
       PVCutoff: 0.0500
    FCThreshold: 2
     GeneLabels: {327×1 cell}
        PValues: [327×1 bioma.data.DataMatrix]
    FoldChanges: [327×1 bioma.data.DataMatrix]

Щелкните гены в списках генов, удерживая нажатой клавишу Ctrl, чтобы пометить гены на графике. Как видно на графике вулкана, гены, специфичные для гранул мозжечка на основе нейронов, такие как ZIC и NEUROD, обнаружены в списке генов с повышенной регуляцией, в то время как гены, типичные для астроцитарной и олигодендроцитарной линии и дифференцировки клеток, такие как SOX2, PEA15 и ID2B, обнаружены в списке с пониженной регуляцией.

Определите количество дифференциально экспрессируемых генов.

nDiffGenes = diffStruct.PValues.NRows
nDiffGenes =

   327

В частности, определите список генов с повышенной регуляцией и список генов с пониженной регуляцией для MD по сравнению с Mglio.

up_geneidx = find(diffStruct.FoldChanges > 0);
nUpGenes = length(up_geneidx)

down_geneidx = find(diffStruct.FoldChanges < 0);
nDownGenes = length(down_geneidx)
nUpGenes =

   225


nDownGenes =

   102

Аннотирование регулируемых генов с использованием генной онтологии

Вы можете использовать информацию о генной онтологии (GO), чтобы аннотировать дифференциально экспрессируемые гены, идентифицированные выше. Файл аннотации GO (GAF) для человека можно загрузить из Gene Ontology Current Annotations. Для удобства карта между генными символами и связанными идентификаторами GO относительно поля аспекта Function включен в файл MAT goa_human.

load goa_human

Кроме того, вы можете запустить код ниже, чтобы загрузить базу данных Gene Ontology с последними аннотациями, прочитать загруженный файл аннотаций Homo sapiens (назовите файл как goa_human.gaf) и создайте отображение между генными символами и связанными терминами GO.

% GO = geneont('live',true);
% HGann = goannotread('goa_human.gaf',...
%    'Aspect','F','Fields',{'DB_Object_Symbol','GOid'});
% HGmap = containers.Map();
% for i = 1:numel(HGann)
%     key = HGann(i).DB_Object_Symbol;
%     if isKey(HGmap,key)
%         HGmap(key) = [HGmap(key) HGann(i).GOid];
%     else
%         HGmap(key) = HGann(i).GOid;
%     end
% end

Найдите индексы генов с повышенной регуляцией для анализа генной онтологии.

up_genes = rownames(diffStruct.FoldChanges, up_geneidx);
huGenes = rownames(expr_cns_gcrma_eb);
for i = 1:nUpGenes
    up_geneidx(i) = find(strncmpi(huGenes, up_genes{i}, length(up_genes{i})), 1);
end

Не все гены на чипе HuGeneFL аннотированы. Для каждого гена на чипе проверьте, аннотирован ли он, сравнивая его генный символ со списком генных символов из GO. Отслеживайте количество аннотированных генов и количество генов с повышенной регуляцией, связанных с каждым термином GO. Следует отметить, что данные в публичных хранилищах часто обрабатываются и обновляются; поэтому результаты этого примера могут несколько отличаться при использовании актуальных наборов данных. Также возможно получение предупреждений о недопустимых или устаревших идентификаторах из-за обновленного файла аннотаций гена Homo sapiens.

m = GO.Terms(end).id;        % gets the last term id
chipgenesCount = zeros(m,1); % a vector of GO term counts for the entire chip.
upgenesCount  = zeros(m,1);  % a vector of GO term counts for up-regulated genes.
for i = 1:length(huGenes)
    if isKey(HGmap,huGenes{i})
        goid = getrelatives(GO,HGmap(huGenes{i}));
        chipgenesCount(goid) = chipgenesCount(goid) + 1;
        if (any(i == up_geneidx))
            upgenesCount(goid) = upgenesCount(goid) + 1;
        end
    end
end

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

gopvalues = hygepdf(upgenesCount,max(chipgenesCount),...
                        max(upgenesCount),chipgenesCount);
[dummy, idx] = sort(gopvalues);

Сообщите десять наиболее значимых условий GO следующим образом.

report = sprintf('GO Term     p-value     counts      definition\n');
for i = 1:10
    term = idx(i);
    report = sprintf('%s%s\t%-1.5f\t%3d / %3d\t%s...\n',...
             report, char(num2goid(term)), gopvalues(term),...
             upgenesCount(term), chipgenesCount(term),...
            GO(term).Term.definition(2:min(50,end)));
end
disp(report);
GO Term     p-value     counts      definition
GO:0005515	0.00000	131 / 3459	Interacting selectively and non-covalently with a...
GO:0044822	0.00000	 94 / 514	Interacting non-covalently with a poly(A) RNA, a ...
GO:0003723	0.00000	 95 / 611	Interacting selectively and non-covalently with a...
GO:0003729	0.00000	 82 / 460	Interacting selectively and non-covalently with m...
GO:0003735	0.00000	 54 / 159	The action of a molecule that contributes to the ...
GO:0019843	0.00000	 48 / 186	Interacting selectively and non-covalently with r...
GO:0008135	0.00000	 50 / 208	Functions during translation by interacting selec...
GO:0000049	0.00000	 47 / 188	Interacting selectively and non-covalently with t...
GO:0000498	0.00000	 46 / 179	Interacting selectively and non-covalently with r...
GO:0001069	0.00000	 46 / 179	Interacting selectively and non-covalently with a...

Выберите термины GO, связанные с определенными функциями молекул, и создайте субонтологию, которая включает предков терминов. Визуализировать эту онтологию с помощью biograph функция. Можно окрашивать узлы графиков в соответствии с их значимостью. В этом примере красные узлы являются наиболее значимыми, в то время как синие узлы являются наименее значимыми терминами онтологии генов. Примечание: Возвращенные термины GO могут отличаться от показанных из-за частого обновления файла аннотаций гена Homo sapiens.

fcnAncestors = GO(getancestors(GO,idx(1:5)));
[cm,acc,rels] = getmatrix(fcnAncestors);
BG = biograph(cm,get(fcnAncestors.Terms,'name'));

for i = 1:numel(acc)
    pval = gopvalues(acc(i));
    color = [(1-pval).^(1) pval.^(1/8) pval.^(1/8)];
    BG.Nodes(i).Color = color;
end
view(BG)

Поиск дифференциально экспрессируемых генов в путях

Вы можете запросить информацию о путях дифференциально экспрессируемых генов из базы данных путей KEGG через веб-службу KEGG.

Ниже приведены несколько карт путей с выделенными генами в списке генов с повышенной регуляцией:

Клеточный цикл

Сигнальный путь Ежа

Сигнальный путь mTor

Ссылки

[1] Pomeroy, S.L., et al., «Предсказание исхода эмбриональной опухоли центральной нервной системы на основе экспрессии генов». Природа, 415 (6870): 436-42, 2001.

[2] Стори, Дж. Д. и Тибширани, Р., «Статистическая значимость для исследований по всему геному», PNAS, 100 (16): 9440-5, 2003.

[3] Dudoit, S., Shaffer, J.P. и Boldrick, J.C., «Множественное тестирование гипотез в эксперименте с микрочипами», Statistical Science, 18 (1): 71-103, 2003.

[4] Benjamini, Y. и Hochberg, Y., «Контроль частоты ложных открытий: практический и мощный подход к множественному тестированию», Journal of the Royal Statistical Society, Series B, 57 (1): 289-300, 1995.