Анализ сводных данных по экспрессии генов Illumina ® Bead

Этот пример показывает, как анализировать сводные данные по экспрессии гена Illumina BeadChip с помощью функций MATLAB ® и Bioinformatics Toolbox™.

Введение

В этом примере показано, как импортировать и проанализировать данные экспрессии генов с платформы микромассивов Illumina BeadChip. Данные, представленные в этом примере, взяты из исследования профилей экспрессии генов сперматогенеза человека Platts et al. [1]. Уровни экспрессии измеряли на Illumina Sentrix Human 6 (WG6) BeadChips.

Данные большинства экспериментов по экспрессии генов микромассивов обычно состоят из четырех компонентов: значения данных эксперимента, информация о выборке, аннотации функций и информация об эксперименте. Вы будете работать с данными микромассивов, создавать каждый из четырех компонентов, собирать их в ExpressionSet объект, и найти дифференциально экспрессированные гены. Для получения дополнительных примеров о ExpressionSet класс см. «Работа с объектами для данных эксперимента с микромассивами».

Импорт экспериментальных данных из базы данных GEO

Выборки гибридизовали с тремя Human 6 (WG6) BeadChips Illumina Sentrix. Получите данные серии GEO GSE6967 используя getgeodata функция.

TNGEOData = getgeodata('GSE6967')
TNGEOData = 

  struct with fields:

    Header: [1×1 struct]
      Data: [47293×13 bioma.data.DataMatrix]

The TNGEOData структура содержит Header и Data поля. The Header поле имеет два поля, Series и Samples, содержащего описание эксперимента и выборок соответственно. The Data поле содержит DataMatrix нормализованных суммарных уровней экспрессии из эксперимента.

Определите количество выборок в эксперименте.

nSamples = numel(TNGEOData.Header.Samples.geo_accession)
nSamples =

    13

Смотрите заголовки образцов из Header.Samples поле.

TNGEOData.Header.Samples.title'
ans =

  13×1 cell array

    {'Teratozoospermic individual: Sample T2'}
    {'Teratozoospermic individual: Sample T1'}
    {'Teratozoospermic individual: Sample T6'}
    {'Teratozoospermic individual: Sample T4'}
    {'Teratozoospermic individual: Sample T8'}
    {'Normospermic individual: Sample N11'   }
    {'Teratozoospermic individual: Sample T3'}
    {'Teratozoospermic individual: Sample T7'}
    {'Teratozoospermic individual: Sample T5'}
    {'Normospermic individual: Sample N6'    }
    {'Normospermic individual: Sample N12'   }
    {'Normospermic individual: Sample N5'    }
    {'Normospermic individual: Sample N1'    }

Для простоты извлеките метки выборок из заголовков образцов.

sampleLabels = cellfun(@(x) char(regexp(x, '\w\d+', 'match')),...
                TNGEOData.Header.Samples.title, 'UniformOutput',false)
sampleLabels =

  1×13 cell array

  Columns 1 through 7

    {'T2'}    {'T1'}    {'T6'}    {'T4'}    {'T8'}    {'N11'}    {'T3'}

  Columns 8 through 13

    {'T7'}    {'T5'}    {'N6'}    {'N12'}    {'N5'}    {'N1'}

Импорт данных выражения из сводных файлов Illumina BeadStudio

Загрузите дополнительный файл GSE6967_RAW.tar и разархивируйте файл, чтобы получить доступ к 13 текстовым файлам, созданным программным обеспечением BeadStudio, которые содержат необработанные, ненормализованные суммарные значения шариков.

Необработанные файлы данных называются с их номерами доступа GSM. В данном примере создайте имена файлов текстовых файлов данных с помощью пути, в котором расположены текстовые файлы.

rawDataFiles = cell(1,nSamples);
for i = 1:nSamples
    rawDataFiles {i} = [TNGEOData.Header.Samples.geo_accession{i} '.txt'];
end

Установите переменную rawDataPath в путь и директорию, в который вы извлекли файлы данных.

rawDataPath = 'C:\Examples\illuminagedemo\GSE6967';

Используйте ilmnbsread функция для чтения первого из сводных файлов и хранения содержимого в структуре.

rawData = ilmnbsread(fullfile(rawDataPath, rawDataFiles{1}))
rawData = 

  struct with fields:

             Header: [1×1 struct]
           TargetID: {47293×1 cell}
        ColumnNames: {1×8 cell}
               Data: [47293×8 double]
    TextColumnNames: {}
           TextData: {}

Просмотрите имена столбцов в rawData структура.

rawData.ColumnNames'
ans =

  8×1 cell array

    {'MIN_Signal-1412091085_A' }
    {'AVG_Signal-1412091085_A' }
    {'MAX_Signal-1412091085_A' }
    {'NARRAYS-1412091085_A'    }
    {'ARRAY_STDEV-1412091085_A'}
    {'BEAD_STDEV-1412091085_A' }
    {'Avg_NBEADS-1412091085_A' }
    {'Detection-1412091085_A'  }

Определите количество целевых зондов.

nTargets = size(rawData.Data, 1)
nTargets =

       47293

Считайте ненормализованные значения выражения (Avg_Signal), пределы доверия обнаружения и идентификаторы микросхем Sentrix из файлов сводных данных. Значения экспрессии генов идентифицируют с идентификаторов зонда Illumina. Можно задать столбцы для чтения из файла данных.

rawMatrix = bioma.data.DataMatrix(zeros(nTargets, nSamples),...
                                  rawData.TargetID, sampleLabels);
detectionConf = bioma.data.DataMatrix(zeros(nTargets, nSamples),...
                                      rawData.TargetID, sampleLabels);
chipIDs = categorical([]);

for i = 1:nSamples
    rawData =ilmnbsread(fullfile(rawDataPath, rawDataFiles{i}),...
                                'COLUMNS', {'AVG_Signal', 'Detection'});
    chipIDs(i) = regexp(rawData.ColumnNames(1), '\d*', 'match', 'once');
    rawMatrix(:, i) = rawData.Data(:, 1);
    detectionConf(:,i) = rawData.Data(:,2);
end

В эксперименте используются три Sentrix BeadChips. Смотрите идентификаторы бисера Illumina Sentrix в chipIDs для определения количества выборок, гибридизованных на каждом чипе.

summary(chipIDs)

samplesChip1 = sampleLabels(chipIDs=='1412091085')
samplesChip2 = sampleLabels(chipIDs=='1412091086')
samplesChip3 = sampleLabels(chipIDs=='1477791158')
     1412091085      1412091086      1477791158 
     6               4               3          

samplesChip1 =

  1×6 cell array

    {'T2'}    {'T1'}    {'T6'}    {'T4'}    {'T8'}    {'N11'}


samplesChip2 =

  1×4 cell array

    {'T3'}    {'T7'}    {'T5'}    {'N6'}


samplesChip3 =

  1×3 cell array

    {'N12'}    {'N5'}    {'N1'}

Шесть выборок (T2, T1, T6, T4, T8 и N11) были скрещены к шести массивам на первом чипе, четыре выборки (T3, T7, T5 и N6) на втором чипе и трех выборках (N12, N5 и N1) на третьем чипе.

Нормализация данных выражения

Используйте boxplot, чтобы просмотреть необработанные уровни экспрессии каждой выборки в эксперименте.

logRawExprs = log2(rawMatrix);

maboxplot(logRawExprs, 'Orientation', 'horizontal')
ylabel('Sample Labels')
xlabel('log2(Expression Value)')
title('Before Normalization')

Различие интенсивности между выборками на одном чипе и выборки на разных чипах не кажется слишком большим. Первый BeadChip, содержа выборки T2, T1, T6, T4, T8 и N11, кажется, немного больше переменной, чем другие.

Использование графиков MA и XY для парного сравнения массивов на BeadChip может быть информативным. На графике MA среднее значение (A) уровней выражения двух массивов строится на оси x и различие (M) в измерении на оси y. График XY является графиком поля точек одного массива против другого. Этот пример использует функцию helper maxyplot построение графиков MAXY для парного сравнения трех массивов на первом чипе, гибридизованных с тератозооспермическими выборками (T2, T1 и T6).

Примечание: Вы также можете использовать mairplot функция для создания графиков MA или IR (Intensity/Ratio) для сравнения конкретных массивов.

inspectIdx = 1:3;
maxyplot(rawMatrix, inspectIdx)
sgtitle('Before Normalization')

На графике MAXY графики MA для всех попарных сравнений находятся в правом верхнем углу. В левом нижнем углу расположены графики XY сравнений. График MAXY показывает, что два массива, T1 и T2, довольно похожи, в то время как другие массивы, T6.

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

Примечание: Вы также можете попробовать инвариантную нормализацию набора с помощью mainvarsetnorm функция.

normExprs = rawMatrix;
normExprs(:, :) = quantilenorm(rawMatrix.(':')(':'));

log2NormExprs = log2(normExprs);

Отобразите и проверьте нормированные уровни выражения на прямоугольном графике.

figure;
maboxplot(log2NormExprs, 'ORIENTATION', 'horizontal')
ylabel('Sample Labels')
xlabel('log2(Expression Value)')
title('After Quantile Normalization')

Отображение и просмотр графика MAXY трех массивов (T2, T1 и T6) на первом чипе после нормализации.

maxyplot(normExprs, inspectIdx)
sgtitle('After Quantile Normalization')

Многие гены в этом исследовании не экспрессируются или имеют только небольшую изменчивость по выборкам.

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

[mask, log2NormExprs] = genelowvalfilter(log2NormExprs);
detectionConf = detectionConf(mask, :);

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

[mask, log2NormExprs] = genevarfilter(log2NormExprs);
detectionConf = detectionConf(mask, :);

Импорт метаданных функции из файла аннотации BeadChip

Производители микромассивов обычно предоставляют аннотации набора функций для каждого типа чипа. Файлы аннотации чипа содержат такие метаданные, как имя гена, символ, номер присоединения NCBI, расположение хромосомы и информация о пути. Перед сборкой ExpressionSet объект для эксперимента получает аннотации о функциях или зондах на BeadChip. Вы можете скачать Human_WG-6.csv файл аннотации для Sentrix Human 6 (WG6) BeadChips со страницы поддержки на веб-сайте Illumina и сохраните файл локально. Считайте файл аннотации в MATLAB как dataset массив. Установите переменную annotPath в путь и директорию, в который вы загрузили файл аннотации.

annotPath = fullfile('C:\Examples\illuminagedemo\Annotation');
WG6Annot = dataset('xlsfile', fullfile(annotPath, 'Human_WG-6.csv'));

Просмотр свойств этого dataset массив.

get(WG6Annot)
       Description: ''
    VarDescription: {}
             Units: {}
          DimNames: {'Observations'  'Variables'}
          UserData: []
          ObsNames: {}
          VarNames: {1×13 cell}

Получите имена переменных, описывающих функции чипа.

fDataVariables = get(WG6Annot, 'VarNames')
fDataVariables =

  1×13 cell array

  Columns 1 through 5

    {'Search_key'}    {'Target'}    {'ProbeId'}    {'Gid'}    {'Transcript'}

  Columns 6 through 10

    {'Accession'}    {'Symbol'}    {'Type'}    {'Start'}    {'Probe_Sequence'}

  Columns 11 through 13

    {'Definition'}    {'Ontology'}    {'Synonym'}

Проверьте количество целевых идентификаторов зондов в файле аннотации.

numel(WG6Annot.Target)
ans =

       47296

Поскольку данные выражения в этом примере являются только небольшим набором полных значений выражения, вы будете работать только с функциями в DataMatrix log2NormExprs объекта. Найдите соответствующие функции в log2NormExprs и WG6Annot.Target.

[commTargets, fI, WGI] = intersect(rownames(log2NormExprs), WG6Annot.Target);

Создание объекта ExpressionSet для экспериментальных данных

Можно хранить предварительно обработанные значения выражения и пределы обнаружения аннотированных целей зонда как ExptData объект.

fNames = rownames(log2NormExprs);
TNExptData = bioma.data.ExptData({log2NormExprs(fI, :), 'ExprsValues'},...
                                 {detectionConf(fI, :), 'DetectionConfidences'})
TNExptData = 

Experiment Data:
  42313 features,  13 samples
  2 elements
  Element names: ExprsValues, DetectionConfidences

Создание объекта ExpressionSet для выборочной информации

Выборочные данные в Header.Samples поле TNGEOData структура может быть подавляющей и трудно ориентироваться. Из данных в Header.Samples поле, можно собрать необходимую информацию о выборках, таких как заголовки образцов, номера присоединения к GEO и т.д., и сохранить выборочные данные как MetaData объект.

Найдите описание выборочных характеристик.

sampleChars = cellfun(@(x) char(regexp(x, '\w*tile', 'match')),...
               TNGEOData.Header.Samples.characteristics_ch1, 'UniformOutput', false)
sampleChars =

  1×13 cell array

  Columns 1 through 4

    {'Infertile'}    {'Infertile'}    {'Infertile'}    {'Infertile'}

  Columns 5 through 8

    {'Infertile'}    {'Fertile'}    {'Infertile'}    {'Infertile'}

  Columns 9 through 13

    {'Infertile'}    {'Fertile'}    {'Fertile'}    {'Fertile'}    {'Fertile'}

Создайте dataset массив для хранения только что извлеченных выборочных данных.

sampleDS = dataset({TNGEOData.Header.Samples.geo_accession', 'GSM'},...
                   {strtok(TNGEOData.Header.Samples.title)', 'Type'},...
                   {sampleChars', 'Characteristics'}, 'obsnames', sampleLabels')
sampleDS = 

           GSM                  Type                        Characteristics  
    T2     {'GSM160620'}        {'Teratozoospermic'}        {'Infertile'}    
    T1     {'GSM160621'}        {'Teratozoospermic'}        {'Infertile'}    
    T6     {'GSM160622'}        {'Teratozoospermic'}        {'Infertile'}    
    T4     {'GSM160623'}        {'Teratozoospermic'}        {'Infertile'}    
    T8     {'GSM160624'}        {'Teratozoospermic'}        {'Infertile'}    
    N11    {'GSM160625'}        {'Normospermic'    }        {'Fertile'  }    
    T3     {'GSM160626'}        {'Teratozoospermic'}        {'Infertile'}    
    T7     {'GSM160627'}        {'Teratozoospermic'}        {'Infertile'}    
    T5     {'GSM160628'}        {'Teratozoospermic'}        {'Infertile'}    
    N6     {'GSM160629'}        {'Normospermic'    }        {'Fertile'  }    
    N12    {'GSM160630'}        {'Normospermic'    }        {'Fertile'  }    
    N5     {'GSM160631'}        {'Normospermic'    }        {'Fertile'  }    
    N1     {'GSM160632'}        {'Normospermic'    }        {'Fertile'  }    

Сохраните выборочные метаданные как объект MetaData класс, включая краткое описание для каждой переменной.

TNSData = bioma.data.MetaData(sampleDS,...
    {'Sample GEO accession number',...
    'Spermic type',...
    'Fertility characteristics'})
TNSData = 

Sample Names:
    T2, T1, ...,N1 (13 total)
Variable Names and Meta Information:
                       VariableDescription                
    GSM                {'Sample GEO accession number'}    
    Type               {'Spermic type'               }    
    Characteristics    {'Fertility characteristics'  }    

Создание объекта ExpressionSet для аннотаций функций

Набор метаданных функций для Sentrix Human 6 BeadChips велик и разнообразен. Выберите информацию о функциях, уникальных для эксперимента, и сохраните информацию как MetaData объект. Извлеките интересующие аннотации, например Accession и Symbol.

fIdx = ismember(fDataVariables, {'Accession', 'Symbol'});

featureAnnot = WG6Annot(WGI, fDataVariables(fIdx));
featureAnnot = set(featureAnnot, 'ObsNames', WG6Annot.Target(WGI));

Создайте MetaData объект для информации аннотации функции с кратким описанием двух переменных метаданных.

WG6FData = bioma.data.MetaData(featureAnnot, ...
            {'Accession number of probe target', 'Gene Symbol of probe target'})
WG6FData = 

Sample Names:
    GI_10047089-S, GI_10047091-S, ...,hmm9988-S (42313 total)
Variable Names and Meta Information:
                 VariableDescription                     
    Accession    {'Accession number of probe target'}    
    Symbol       {'Gene Symbol of probe target'     }    

Создание объекта ExpressionSet для информации об эксперименте

Большинство описаний экспериментов в Header.Series поле TNGEOData структура может быть реорганизована и сохранена как MIAME объект, который вы будете использовать, чтобы собрать ExpressionSet объект для эксперимента.

TNExptInfo = bioma.data.MIAME(TNGEOData)
TNExptInfo = 

Experiment Description:
  Author name: Adrian,E,Platts
David,J,Dix
Hector,E,Chemes
Kary,E,Thompson
Robert,,Goodrich
John,C,Rockett
Vanesa,Y,Rawe
Silvina,,Quintana
Michael,P,Diamond
Lillian,F,Strader
Stephen,A,Krawetz
  Laboratory: Wayne State University
  Contact information: Stephen,A,Krawetz
  URL: http://compbio.med.wayne.edu
  PubMedIDs: 17327269
  Abstract: A 82 word abstract is available. Use the Abstract property.
  Experiment Design: A 61 word summary is available. Use the ExptDesign property.
  Other notes: 
    {'ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE6nnn/GSE6967/suppl/GSE6967_RAW.tar'}

Сборка объекта ExpressionSet

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

TNExprSet = bioma.ExpressionSet(TNExptData, 'sData', TNSData,...
                                            'fData', WG6FData,...
                                            'eInfo', TNExptInfo)
TNExprSet = 

ExpressionSet
Experiment Data: 42313 features, 13 samples
  Element names: Expressions, DetectionConfidences
Sample Data:
    Sample names:     T2, T1, ...,N1 (13 total)
    Sample variable names and meta information: 
        GSM: Sample GEO accession number
        Type: Spermic type
        Characteristics: Fertility characteristics
Feature Data:
    Feature names:     GI_10047089-S, GI_10047091-S, ...,hmm9988-S (42313 total)
    Feature variable names and meta information: 
        Accession: Accession number of probe target
        Symbol: Gene Symbol of probe target
Experiment Information: use 'exptInfo(obj)'

Примечание: The ExprsValues элемент в ExptData объект, TNExptData, переименован в Expressions в TNGeneExprSet.

Можно сохранить объект ExpressionSet класс как MAT файл для дальнейшего анализа данных.

save TNGeneExprSet TNExprSet

Профилирование экспрессии генов с помощью сочетаний

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

load TNGeneExprSet

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

TNSamples = sampleNames(TNExprSet);
Tz = strncmp(TNSamples, 'T', 1);
Ns = strncmp(TNSamples, 'N', 1);
nTz = sum(Tz)
nNs = sum(Ns)

TNExprs = expressions(TNExprSet);
TzData = TNExprs(:,Tz);
NsData = TNExprs(:,Ns);
meanTzData = mean(TzData,2);
meanNsData = mean(NsData,2);
groupLabels = [TNSamples(Tz), TNSamples(Ns)];
nTz =

     8


nNs =

     5

Выполните сочетание t-тест с помощью mattest функция для транспозиции столбцов матрицы данных экспрессии генов TzData и NsData. Примечание: В зависимости от размера выборки, может быть нецелесообразно учитывать все возможные сочетания. Обычно случайное подмножество сочетаний рассматривается в случае большого размера выборки.

Используйте nchoosek функция в Statistics and Machine Learning Toolbox™, чтобы определить количество всех возможных сочетаний выборок в этом примере.

perms = nchoosek(1:nTz+nNs, nTz);
nPerms = size(perms,1)
nPerms =

        1287

Используйте PERMUTE опция mattest функция для вычисления значений p всех сочетаний.

pValues = mattest(TzData, NsData, 'Permute', nPerms);

Вы также можете вычислить дифференциальный счет от значений p с помощью следующей анонимной функции [1].

diffscore = @(p, avgTest, avgRef) -10*sign(avgTest - avgRef).*log10(p);

Дифференциальный счет 13 соответствует p-значению 0,05, дифференциальный счет 20 соответствует p-значению 0,01 и дифференциальный счет 30 соответствует p-значению 0,001. Положительный дифференциальный счет представляет повышающую регуляцию, а отрицательная счет понижающую регуляцию генов.

diffScores = diffscore(pValues, meanTzData, meanNsData);

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

up = sum(diffScores > 20)

down = sum(diffScores < -20)
up =

        3741


down =

        3033

Оценка ложной скорости обнаружения (FDR)

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

figure;
[pFDR, qValues] = mafdr(pValues, 'showplot', true);
diffScoresFDRQ = diffscore(qValues, meanTzData, meanNsData);

Определите количество генов с абсолютным дифференциальным счетом более 20. Примечание: Вы можете получить разное количество генов из-за теста сочетания и результатов bootstrap.

sum(abs(diffScoresFDRQ)>=20)
ans =

        3122

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

Постройте график -log10 значений p от изменений складок на графике вулкана.

diffStruct = mavolcanoplot(TzData, NsData, qValues,...
                                   'pcutoff', 0.01, 'foldchange', 5);

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

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

nDiffGenes = numel(diffStruct.GeneLabels)
nDiffGenes =

   451

Получите список регулируемых генов для Tz выборки по сравнению с Ns выборки.

up_genes = diffStruct.GeneLabels(diffStruct.FoldChanges > 0);
nUpGenes = length(up_genes)
nUpGenes =

   223

Получите список регулируемых вниз генов для Tz выборки по сравнению с Ns выборки.

down_genes = diffStruct.GeneLabels(diffStruct.FoldChanges < 0);
nDownGenes = length(down_genes)
nDownGenes =

   228

Извлеките список дифференциально экспрессированных генов.

diff_geneidx = zeros(nDiffGenes, 1);
for i = 1:nDiffGenes
    diff_geneidx(i) = find(strncmpi(TNExprSet.featureNames, ...
                            diffStruct.GeneLabels{i}, length(diffStruct.GeneLabels{i})), 1);
end

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

TNDiffExprSet = TNExprSet(diff_geneidx, groupLabels);

Выполнение анализа PCA и кластеризации значимых профилей генов

Анализ основного компонента (PCA) на дифференциально экспрессируемых генах показывает линейную разделяемость Tz выборки из Ns выборки.

PCAScore = pca(TNDiffExprSet.expressions);

Отобразите коэффициенты первого и шестого главных компонентов.

figure;
plot(PCAScore(:,1), PCAScore(:,6), 's', 'MarkerSize',10, 'MarkerFaceColor','g');
hold on
text(PCAScore(:,1)+0.02, PCAScore(:,6), TNDiffExprSet.sampleNames)
plot([0,0], [-0.5 0.5], '--r')
ax = gca;
ax.XTick = [];
ax.YTick = [];
ax.YTickLabel = [];
title('PCA Mapping')
xlabel('Principal Component 1')
ylabel('Principal Component 6')

Можно также использовать интерактивный инструмент, созданный mapcaplot функция для выполнения анализа основного компонента.

mapcaplot((TNDiffExprSet.expressions)')

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

sampleDist = pdist(TNDiffExprSet.expressions','correlation');
sampleLink = linkage(sampleDist);

figure;
dendrogram(sampleLink, 'labels', TNDiffExprSet.sampleNames,'ColorThreshold',0.5)
ax = gca;
ax.YTick = [];
ax.Box = 'on';
title('Hierarchical Sample Clustering')

Используйте clustergram функция для создания иерархической кластеризации дифференциально экспрессированных генов и применения палитры redbluecmap в кластерграмму.

cmap = redbluecmap(9);
cg = clustergram(TNDiffExprSet.expressions,'Colormap',cmap,'Standardize',2);
addTitle(cg,'Hierarchical Gene Clustering')

Кластеризация наиболее дифференциально распространенных транскриптов явно разделяет тератозооспермические (Tz) и нормоспермический (Ns) сперматозоальные РНК.

Ссылки

[1] Platts, A.E., et al., «Success and отказа in human spermatogenesis as showed by teratozoospermic RNAs», Human Molecular Genetics, 16 (7): 763-73, 2007.

[2] Storey, J.D. and Tibshirani, R., «Statistical valuance for genomewide studies», PNAS, 100 (16): 9440-5, 2003.