Этот пример демонстрирует поиск шаблонов в профилях экспрессии гена в хлебопекарных дрожжах с помощью нейронных сетей.
Цель состоит в том, чтобы получить некоторое понимание экспрессий гена в Saccharomyces cerevisiae, который обычно известен как хлебопекарные дрожжи или пивные дрожжи. Это - гриб, который используется, чтобы испечь хлеб и вино фермента от винограда.
Saccharomyces cerevisiae, когда введено в средних богатых в глюкозе, может преобразовать глюкозу в этанол. Первоначально, дрожжи преобразуют глюкозу в этанол названной "ферментацией" метаболического процесса. Однако, если предоставление глюкозы является исчерпанными сдвигами дрожжей от анаэробной ферментации глюкозы к аэробному дыханию этанола. Этот процесс называется сдвигом diauxic. Этот процесс представляет большой интерес, поскольку это сопровождается существенными изменениями в экспрессии гена.
Пример использует микроданные массива ДНК, чтобы изучить временную экспрессию гена почти всех генов в Saccharomyces cerevisiae во время сдвига diauxic.
Вам нужен Bioinformatics Toolbox™, чтобы запустить этот пример.
if ~nnDependency.bioInfoAvailable errordlg('This example requires Bioinformatics Toolbox.'); return; end
Этот пример использует данные DeRisi, JL, Iyer, VR, Брауна, ПО. "Исследуя метаболическое и генетическое управление экспрессии гена по геномной шкале". Наука. 1997 24 октября; 278 (5338):680-6. PMID: 9381177
Полный набор данных может быть загружен с веб-сайта Gene Expression Omnibus: https://www.yeastgenome.org
Запустите путем загрузки данных в MATLAB®.
load yeastdata.mat
Уровни экспрессии гена были измерены в семи моментах времени во время сдвига diauxic. Переменная times
содержит времена, в которые уровни экспрессии были измерены в эксперименте. Переменная genes
содержит имена генов, уровни экспрессии которых были измерены. Переменная yeastvalues
содержит данные "о ЗНАЧЕНИИ" или LOG_RAT2N_MEAN или log2 отношения CH2DN_MEAN и CH1DN_MEAN от этих семи временных шагов в эксперименте.
Чтобы понять размер данных, можно использовать numel (гены), чтобы показать сколько генов, там находятся в наборе данных.
numel(genes)
ans = 6400
гены являются массивом ячеек названий генов. Можно получить доступ к записям использующая индексация массива ячеек MATLAB:
genes{15}
ans = 'YAL054C'
Это указывает, что 15-я строка переменной yeastvalues содержит уровни экспрессии для YAL054C
ORF.
Набор данных является довольно большим, и большая информация соответствует генам, которые не показывают интересных изменений во время эксперимента. Чтобы облегчить находить интересные гены, первое, что нужно сделать состоит в том, чтобы уменьшать размер набора данных путем удаления генов с профилями выражения, которые не показывают ничего интереса. Существует 6 400 профилей выражения. Можно использовать много методов, чтобы уменьшать это до некоторого подмножества, которое содержит старшие значащие гены.
Если вы просмотрите список генов, то вы будете видеть несколько мест, отмеченных, как 'ПУСТЕЮТ'. Это пустые пятна на массиве, и в то время как им можно было сопоставить данные с ними, в целях этого примера, можно рассмотреть эти вопросы, чтобы быть шумом. Эти точки могут быть найдены с помощью функции strcmp и удалены из набора данных с индексацией команд.
emptySpots = strcmp('EMPTY',genes);
yeastvalues(emptySpots,:) = [];
genes(emptySpots) = [];
numel(genes)
ans = 6314
В yeastvalues данных вы будете также видеть несколько мест, где уровень экспрессии отмечен как NaN. Это указывает, что никакие данные не были собраны для этого пятна на шаге определенного времени. Один подход к контакту с этими отсутствующими значениями должен был бы приписать им использующий среднее значение или медиану данных для определенного гена в зависимости от времени. Этот пример использует менее строгий подход простого выбрасывания данных для любых генов, где один или несколько уровень экспрессии не был измерен.
Функция isnan используется, чтобы идентифицировать гены с недостающими данными, и команды индексации используются, чтобы удалить гены с недостающими данными.
nanIndices = any(isnan(yeastvalues),2); yeastvalues(nanIndices,:) = []; genes(nanIndices) = []; numel(genes)
ans = 6276
Если бы необходимо было построить профили выражения всех остающихся профилей, вы видели бы, что большинство профилей является плоским и не существенно отличается от других. Эти плоские данные, очевидно, имеют применение, когда это указывает, что гены, сопоставленные с этими профилями, не значительно затронуты сдвигом diauxic; однако, в этом примере, вы интересуетесь генами с большими изменениями в выражении, сопровождающем сдвиг diauxic. Можно использовать функции фильтрации в Bioinformatics Toolbox™, чтобы удалить гены с различными типами профилей, которые не предоставляют полезную информацию о генах, затронутых метаболическим изменением.
Можно использовать функцию genevarfilter, чтобы отфильтровывать гены с небольшим отклонением в зависимости от времени. Функция возвращает логический массив одного размера с переменными генами с единицами, соответствующими строкам yeastvalues с отклонением, больше, чем 10-я процентиль и нули, соответствующие тем ниже порога.
mask = genevarfilter(yeastvalues);
% Use the mask as an index into the values to remove the filtered genes.
yeastvalues = yeastvalues(mask,:);
genes = genes(mask);
numel(genes)
ans = 5648
Функция genelowvalfilter удаляет гены, которые имеют очень низко абсолютные значения выражения. Обратите внимание на то, что генные функции filter могут также автоматически вычислить отфильтрованные данные и имена.
[mask, yeastvalues, genes] = ... genelowvalfilter(yeastvalues,genes,'absval',log2(3)); numel(genes)
ans = 822
Используйте geneentropyfilter, чтобы удалить гены, профили которых имеют низкую энтропию:
[mask, yeastvalues, genes] = ... geneentropyfilter(yeastvalues,genes,'prctile',15); numel(genes)
ans = 614
Теперь, когда у вас есть управляемый список генов, можно искать отношения между профилями.
Нормализация стандартного отклонения и среднего значения данных позволяет сети обрабатывать каждый вход как одинаково важный в его области значений значений.
Анализ главных компонентов (PCA) является полезным методом, который может использоваться, чтобы уменьшать размерность больших наборов данных, таких как те от анализа микромассивов. Этот метод изолирует основные компоненты набора данных, устраняющего те компоненты, которые способствуют меньше всего изменению набора данных.
Эти две переменные настроек могут использоваться, чтобы применить mapstd и processpca к новым данным, чтобы быть сопоставимыми.
[x,std_settings] = mapstd(yeastvalues'); % Normalize data [x,pca_settings] = processpca(x,0.15); % PCA
Входные векторы сначала нормированы, с помощью mapstd
, так, чтобы у них были нулевое среднее значение и отклонение единицы. processpca
функция, которая реализует алгоритм PCA. Второй аргумент передал processpca
0.15. Это означает тот processpca
устраняет те основные компоненты, которые вносят меньше чем 15% в общее изменение набора данных. Переменная pc
теперь содержит основные компоненты yeastvalues данных.
Основные компоненты могут визуализироваться с помощью поля точек функции.
figure scatter(x(1,:),x(2,:)); xlabel('First Principal Component'); ylabel('Second Principal Component'); title('Principal Component Scatter Plot');
Основные компоненты могут теперь кластеризироваться с помощью Самоорганизующейся карты (SOM), кластеризирующей алгоритм.
Функция selforgmap создает Самоорганизующуюся сеть карты, которая может затем быть обучена с обучать функцией.
Входной размер 0, потому что сеть еще не была сконфигурирована, чтобы совпадать с нашими входными данными. Это произойдет, когда сеть будет обучена.
net = selforgmap([5 3]); view(net)
Теперь сеть готова быть обученной.
Инструмент Обучения Нейронной сети показывает обученную сеть, и алгоритмы раньше обучали его. Это также отображает учебное состояние во время обучения и критериев, которые остановились, обучение будет подсвечено в зеленом.
Кнопки в нижней части открывают полезные графики, которые могут быть открыты в течение и после обучения. Ссылки рядом с именами алгоритма и кнопками графика открывают документацию относительно тех предметов.
net = train(net,x);
nntraintool
nntraintool('close')
Используйте plotsompos, чтобы отобразить сеть по графику рассеивания первых двух размерностей данных.
figure plotsompos(net,x);
Можно присвоить кластеры с помощью SOM путем нахождения самого близкого узла к каждой точке в наборе данных.
y = net(x); cluster_indices = vec2ind(y);
Используйте plotsomhits, чтобы видеть, как много векторов присвоены каждому из нейронов в карте.
figure plotsomhits(net,x);
Можно также использовать другие алгоритмы кластеризации как Иерархическая кластеризация и K-средних значений, доступные в Statistics and Machine Learning Toolbox™ для кластерного анализа.
ORF - Открытая рамка считывания (ORF) является фрагментом последовательности гена, которая содержит последовательность основ, непрерывных последовательностями остановки, которые могли потенциально закодировать белок.