В этом примере показано, как использовать функции в Bioinformatics Toolbox™ для работы с данными Affymetrix ® GeneChip ®.
Функция affyread
может считать четыре типа файлов данных Affymetrix. Это файлы DAT, которые содержат необработанные данные изображений, файлы CEL, которые содержат информацию о значениях интенсивности отдельных зондов, файлы CHP, которые содержат информацию о наборах зондов, и файлы EXP, которые содержат информацию об экспериментальных условиях и протоколах. affyread
можно также читать файлы библиотеки CDF и GIN. CDF-файл содержит информацию о том, какие зонды относятся к какому набору зондов, а файл GIN содержит информацию о наборах зондов, таких как имя гена, с которым связан набор зондов. Чтобы узнать больше о фактических файлах, можно скачать выборочные данные файлы с сайта поддержки Affymetrix. Большинство наборов данных хранится в архивах DTT. Для извлечения файлов DAT, CEL и CHP необходимо установить Data Transfer Tool.
В данном примере вам понадобятся некоторые файлы выборочных данных (DAT, CEL, CHP) из массива генома E. coli Antisense. Загрузите их из Demo_Data_E-coli-antisense.zip Извлечь файлы данных из архива DTT с помощью Data Transfer Tool. Установите переменную exampleDataDir
к имени пути и директории, в которые вы извлекли файлы выборочных данных.
exampleDataDir = 'C:\Examples\affydemo\data';
В дополнение к файлам данных вам также понадобятся Ecoli_ASv2.CDF и Ecoli_ASv2.GIN файлы библиотеки для массива генома E. coli Antisense. Возможно, у вас уже есть эти файлы, если на вашем компьютере установлено программное обеспечение Affymetrix GeneChip. Если нет, получите файлы библиотеки, загрузив и разархивировав zip-файл E. coli Antisense Genome Array
Обратите внимание, что для доступа к файлам библиотеки вам придется зарегистрироваться в порядок.
Вы должны только разархивировать файлы, вы не должны запускать файл Setup.exe в архиве.
Установите переменную libDir
к имени пути и директории, в который вы извлекли файлы библиотеки.
libDir = 'C:\Examples\affydemo\libfiles';
Необработанные данные изображения из сканера чипа сохраняются в файле DAT. Если вы используете affyread
для чтения файла DAT вы увидите, что он создает структуру MATLAB ®.
datStruct = affyread(fullfile(exampleDataDir,'Ecoli-antisense-121502.dat'))
datStruct = struct with fields: Name: 'Ecoli-antisense-121502.dat' DataPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data' LibPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data' FullPathName: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data/Ecoli-antisense-121502.dat' ChipType: 'Ecoli_ASv2' NumPixelsPerRow: 4733 NumRows: 4733 MinData: 0 MaxData: 46108 PixelSize: 3 CellMargin: 2 ScanSpeed: 17 ScanDate: '13-Aug-0001 11:31:58' ScannerID: '' UpperLeftX: 231 UpperLeftY: 235 UpperRightX: 4492 UpperRightY: 253 LowerLeftX: 220 LowerLeftY: 4501 LowerRightX: 4482 LowerRightY: 4519 ServerName: '' Image: [4733x4733 uint16]
Вы можете получить доступ к полям структуры с помощью записи через точку.
datStruct.NumRows
ans = 4733
Можно использовать imagesc
команда для отображения изображения.
datFigure = figure; imagesc(datStruct.Image);
Можно изменить colormap
из jet
по умолчанию другому, использующему
colormap
команда.
colormap pink
Вы можете масштабировать конкретную область, используя инструмент «Масштабирование» с помощью мыши или используя axis
команда. Заметьте, что это растягивает ось Y.
axis([1900 2800 160 650])
Можно использовать axis image
команда для установки правильного соотношения сторон.
axis image
axis([1900 2800 160 650])
Информация о каждом зонде на чипе извлекается из данных изображения программным обеспечением анализа изображений Affymetrix. Информация хранится в файле CEL. affyread
считывает файл CEL в структуру. Заметьте, что многие поля совпадают с полями в структуре DAT.
celStruct = affyread(fullfile(exampleDataDir,'Ecoli-antisense-121502.CEL'))
celStruct = struct with fields: Name: 'Ecoli-antisense-121502.CEL' DataPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data' LibPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data' FullPathName: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data/Ecoli-antisense-121502.CEL' ChipType: 'Ecoli_ASv2' Date: '01-Feb-2013 11:55:24' FileVersion: 3 Algorithm: 'Percentile' AlgParams: 'Percentile:75;CellMargin:2;OutlierHigh:1.500;OutlierLow:1.004' NumAlgParams: 4 CellMargin: 2 Rows: 544 Cols: 544 NumMasked: 0 NumOutliers: 115 NumProbes: 295936 UpperLeftX: 231 UpperLeftY: 235 UpperRightX: 4492 UpperRightY: 253 LowerLeftX: 220 LowerLeftY: 4501 LowerRightX: 4482 LowerRightY: 4519 ProbeColumnNames: {8x1 cell} Probes: [295936x8 single]
Файл CEL содержит информацию о том, где каждый зонд находится на чипе, а также значения интенсивности для зонда. Можно использовать maimage
функция для отображения чипа.
celFigure = figure; maimage(celStruct)
Снова можно масштабировать конкретную область.
axis([200 340 0 70])
Если сравнить изображение, созданное из файла CEL, и изображение, созданное из файла DAT, вы заметите, что изображение CEL имеет более низкое разрешение. Это связано с тем, что в этом изображении есть только один пиксель на каждый зонд, в то время как изображение файла DAT имеет много пикселей на каждый зонд.
Структуры, созданные affyread
может быть очень большим. Это хорошая идея, чтобы очистить их от памяти, когда они больше не нужны.
clear datStruct
close(datFigure); close(celFigure);
The Probes
поле структуры CEL содержит информацию об отдельных зондах. На каждый зонд приходится восемь значений. Они хранятся в ProbeColumnNames
поле структуры.
celStruct.ProbeColumnNames
ans = 8x1 cell array {'PosX' } {'PosY' } {'Intensity'} {'StdDev' } {'Pixels' } {'Outlier' } {'Masked' } {'ProbeType'}
Так что, если вы посмотрите на одну строку Probes
поле структуры CEL вы увидите восемь значений, соответствующих положению X, положению Y, интенсивности и так далее.
celStruct.Probes(1:10,:)
ans = 10x8 single matrix 1.0e+04 * Columns 1 through 7 0 0 0.0082 0.0030 0.0036 0 0 0.0001 0 1.4202 0.3160 0.0036 0 0 0.0002 0 0.0080 0.0014 0.0030 0 0 0.0003 0 1.4760 0.2265 0.0036 0 0 0.0004 0 0.0050 0.0014 0.0036 0 0 0.0005 0 0.0073 0.0015 0.0036 0 0 0.0006 0 1.3595 0.2367 0.0036 0 0 0.0007 0 0.0087 0.0018 0.0036 0 0 0.0008 0 1.3284 0.2926 0.0036 0 0 0.0009 0 0.0104 0.0018 0.0030 0 0 Column 8 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001
Файл CHP содержит результаты эксперимента. Они включают средние измерения сигнала для каждого набора зондов, определяемые программным обеспечением Affymetrix, и информацию о том, какие наборы зондов вызываются как существующие, отсутствующие или маргинальные, и p-значения для этих вызовов.
chpStruct = affyread(fullfile(exampleDataDir,'Ecoli-antisense-121502.CHP'),libDir)
chpStruct = struct with fields: Name: 'Ecoli-antisense-121502.CHP' DataPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data' LibPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/libfiles' FullPathName: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/data/Ecoli-antisense-121502.CHP' ChipType: 'Ecoli_ASv2' AssayType: 'Expression' Date: '01-Feb-2013 11:55:24' CellFile: 'c:\documents and settings\bkolou\desktop\demo_data_e-coli-antisense\Ecoli-antisense-121502.CEL' Algorithm: 'ExpressionStat' AlgVersion: '5.0' NumAlgParams: 13 AlgParams: 'SFGene=All SF=5.578290 NF=1.000000 TGT=500 Perturbation=1.1 Gamma2L=0.006 Gamma2H=0.006 Gamma1L=0.0045 Gamma1H=0.0045 Tau=0.015 Alpha2=0.065 Alpha1=0.05 BF= ' NumChipSummary: 3 ChipSummary: 'RawQ=1.62 Noise=Avg:1.33,Stdev:0.20,Max:1.7,Min:1.0 Background=Avg:42.81,Stdev:1.91,Max:46.5,Min:38.1 ' BackgroundZones: [1x1 struct] Rows: 544 Cols: 544 NumProbeSets: 7312 NumQCProbeSets: 0 ProbeSets: [7312x1 struct]
The ProbeSets
поле содержит информацию о наборах зондов. Это включает в себя некоторую информацию библиотеки, такую как ID и тип набора зондов, а также приводит к получению информации, такой как вычисленное значение сигналов и Present/Absent/Marginal
информацию о вызове. Вызов дается в Detection
поле структуры ProbeSets. Набор зондов 'argG _ b3172 _ at' вызывается как 'Present'
.
chpStruct.ProbeSets(5213)
ans = struct with fields: Name: 'argG_b3172_at' ProbeSetType: 'Expression' CompDataExists: 0 NumPairs: 15 NumPairsUsed: 15 Signal: 127.6070 Detection: 'Present' DetectionPValue: 0.0134 CommonPairs: [] SignalLogRatio: [] SignalLogRatioLow: [] SignalLogRatioHigh: [] Change: [] ChangePValue: []
Однако набор зондов 'IG _ 2069 _ 3319273 _ 3319712 _ rev _ at' вызывается 'Absent'
.
chpStruct.ProbeSets(5216)
ans = struct with fields: Name: 'IG_2069_3319273_3319712_rev_at' ProbeSetType: 'Expression' CompDataExists: 0 NumPairs: 15 NumPairsUsed: 15 Signal: 35.0037 Detection: 'Absent' DetectionPValue: 0.2661 CommonPairs: [] SignalLogRatio: [] SignalLogRatioLow: [] SignalLogRatioHigh: [] Change: [] ChangePValue: []
И 'yhbX _ b3173 _ at' probe set называется 'Marginal'.
chpStruct.ProbeSets(5215)
ans = struct with fields: Name: 'yhbX_b3173_at' ProbeSetType: 'Expression' CompDataExists: 0 NumPairs: 15 NumPairsUsed: 15 Signal: 147.7237 Detection: 'Marginal' DetectionPValue: 0.0559 CommonPairs: [] SignalLogRatio: [] SignalLogRatioLow: [] SignalLogRatioHigh: [] Change: [] ChangePValue: []
Можно вычислить, сколько наборов зондов вызывается как 'Present'
,
numPresent = sum(strcmp('Present',{chpStruct.ProbeSets.Detection}))
numPresent = 4605
'Absent'
,
numAbsent = sum(strcmp('Absent',{chpStruct.ProbeSets.Detection}))
numAbsent = 2524
и 'Marginal'
.
numMarginal = sum(strcmp('Marginal',{chpStruct.ProbeSets.Detection}))
numMarginal = 183
maboxplot
отобразит прямоугольный график значений сигналов log2 для всех наборов зондов.
maboxplot(chpStruct,'Signal','title',chpStruct.Name)
Файл CHP предоставляет сводную информацию о наборах зондов, но если вы хотите получить более подробную информацию о том, как себя ведут отдельные зонды в наборе зондов, вам нужно подключить информацию зондов в файле CEL к соответствующим наборам зондов. Эта информация хранится в файле библиотеки CDF, сопоставленном с типом микросхемы. Обычно CDF-файлы хранятся в центральной библиотечной директории.
cdfStruct = affyread('Ecoli_ASv2.cdf',libDir)
cdfStruct = struct with fields: Name: 'Ecoli_ASv2.cdf' ChipType: 'Ecoli_ASv2' LibPath: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/libfiles' FullPathName: '/mathworks/hub/qe/test_data/Bioinformatics_Toolbox/v000/demoData/affydemo/libfiles/Ecoli_ASv2.cdf' Date: '04-Feb-2013 11:14:01' Rows: 544 Cols: 544 NumProbeSets: 7312 NumQCProbeSets: 13 ProbeSetColumnNames: {6x1 cell} ProbeSets: [7325x1 struct]
Большая часть информации в файле посвящена наборам зондов. В этом примере существует 7312 регулярных наборов зондов и 13 наборов зондов контроля качества. The ProbeSets
полем структуры является массив структур 7325x1.
cdfStruct.ProbeSets
ans = 7325x1 struct array with fields: Name ProbeSetType CompDataExists NumPairs NumQCProbes QCType GroupNames ProbePairs
Запись набора зондов содержит информацию о имени, типе и количестве пар зондов в наборе зондов.
probeSetIndex = 5213; cdfStruct.ProbeSets(probeSetIndex)
ans = struct with fields: Name: 'argG_b3172_at' ProbeSetType: 'Expression' CompDataExists: 0 NumPairs: 15 NumQCProbes: 0 QCType: 0 GroupNames: {'argG_b3172_at'} ProbePairs: [15x6 int32]
Информация о том, где зонды для набора зондов находятся на чипе, сохранена в ProbePairs
поле. Это матрица с одной строкой для каждой пары зондов и шестью столбцами. Информация в столбцах соответствует ProbeSetColumnNames
структуры CDF.
cdfStruct.ProbeSetColumnNames cdfStruct.ProbeSets(probeSetIndex).ProbePairs
ans = 6x1 cell array {'GroupNumber'} {'Direction' } {'PMPosX' } {'PMPosY' } {'MMPosX' } {'MMPosY' } ans = 15x6 int32 matrix 1 2 430 177 430 178 1 2 431 177 431 178 1 2 432 177 432 178 1 2 433 177 433 178 1 2 434 177 434 178 1 2 435 177 435 178 1 2 436 177 436 178 1 2 437 177 437 178 1 2 438 177 438 178 1 2 439 177 439 178 1 2 440 177 440 178 1 2 441 177 441 178 1 2 442 177 442 178 1 2 443 177 443 178 1 2 444 177 444 178
В первом столбце показан номер группы зондов. Второй столбец показывает направление зонда. Номер группы всегда равен 1 для массивов выражений. Направление 1 соответствует 'sense', а 2 соответствует 'anti-sense'. Остальные столбцы задают координаты X и Y зондов PM и MM на чипе. Можно использовать эти координаты, чтобы найти индекс зонда в celStruct.
PMX = cdfStruct.ProbeSets(probeSetIndex).ProbePairs(1,3);
PMY = cdfStruct.ProbeSets(probeSetIndex).ProbePairs(1,4);
theProbe = find((celStruct.Probes(:,1) == PMX) & ...
(celStruct.Probes(:,2) == PMY))
theProbe = 96719
Затем можно извлечь всю информацию об этом зонде из структуры CEL.
celStruct.Probes(theProbe,:)
ans = 1x8 single row vector Columns 1 through 7 430.0000 177.0000 169.0000 35.4000 25.0000 0 0 Column 8 1.0000
Если вы хотите сделать этот поиск для всех зондов, можно использовать функцию probelibraryinfo
. Это создает матрицу с одной строкой на зонд и тремя столбцами. Первый столбец является индексом набора зондов, к которому принадлежит зонд. Во втором столбце содержится индекс пары зондов, а в третьем столбце указывается, является ли зонд полностью соответствующим (1) или несовпадающим (-1) зондом. Заметьте, что индекс пары зондов равен 1.
probeinfo = probelibraryinfo(celStruct,cdfStruct); probeinfo(theProbe,:)
ans = 5213 1 1
Функция probesetvalues
Выполняет обратный поиск и создает матрицу информации из структур CEL и CDF, содержащую всю информацию о данном наборе зондов. Эта матрица имеет 20 столбцов, соответствующих ProbeSetNumber
, ProbePairNumber
, UseProbePair
, Background
, PMPosX
, PMPosY
, PMIntensity
, PMStdDev
, PMPixels
, PMOutlier
, PMMasked
, MMPosX
, MMPosY
, MMIntensity
, MMStdDev
, MMPixels
, MMOutlier
, MMMasked
, Group
, и Direction
.
probeName = cdfStruct.ProbeSets(probeSetIndex).Name; psvals = probesetvalues(celStruct,cdfStruct,probeName); sprintf( ['%4d %2d %d %d PM: %3d %3d %5.1f %5.1f %2d %d %d',... ' MM: %3d %3d %5.1f %5.1f %2d %d %d %d %d\n'],psvals')
ans = '5212 0 0 4.543512e+01 PM: 430 177 169.0 35.4 25 0 0 MM: 430 178 163.5 24.1 30 0 0 1 2 5212 1 0 4.545356e+01 PM: 431 177 127.3 21.8 30 0 0 MM: 431 178 100.3 14.6 36 0 0 1 2 5212 2 0 4.547230e+01 PM: 432 177 127.0 23.7 30 0 0 MM: 432 178 175.0 28.6 36 0 0 1 2 5212 3 0 4.549129e+01 PM: 433 177 133.3 25.9 36 0 0 MM: 433 178 94.0 22.7 30 0 0 1 2 5212 4 0 4.551051e+01 PM: 434 177 212.3 43.3 36 0 0 MM: 434 178 171.8 36.5 30 0 0 1 2 5212 5 0 4.552995e+01 PM: 435 177 149.5 27.5 36 0 0 MM: 435 178 154.0 30.3 30 0 0 1 2 5212 6 0 4.554958e+01 PM: 436 177 50.3 11.2 30 0 0 MM: 436 178 46.0 9.8 25 0 0 1 2 5212 7 0 4.556938e+01 PM: 437 177 152.5 37.7 36 0 0 MM: 437 178 107.0 21.0 36 0 0 1 2 5212 8 0 4.558934e+01 PM: 438 177 164.5 31.2 36 0 0 MM: 438 178 97.3 21.9 36 0 0 1 2 5212 9 0 4.560939e+01 PM: 439 177 126.0 23.4 36 0 0 MM: 439 178 121.3 25.3 36 0 0 1 2 5212 10 0 4.562955e+01 PM: 440 177 54.0 11.2 36 0 0 MM: 440 178 54.0 12.9 36 0 0 1 2 5212 11 0 4.564975e+01 PM: 441 177 83.3 17.4 36 0 0 MM: 441 178 62.3 12.5 36 0 0 1 2 5212 12 0 4.566998e+01 PM: 442 177 95.5 17.1 30 0 0 MM: 442 178 84.0 18.6 30 0 0 1 2 5212 13 0 4.569022e+01 PM: 443 177 110.0 19.6 36 0 0 MM: 443 178 92.5 22.0 36 0 0 1 2 5212 14 0 4.571042e+01 PM: 444 177 251.0 46.0 36 0 0 MM: 444 178 111.8 20.7 36 0 0 1 2 '
Можно извлечь значения интенсивности из матрицы и просмотреть некоторые статистические данные.
pmIntensity = psvals(:,7); mmIntensity = psvals(:,14); boxplot([pmIntensity,mmIntensity],'labels',{'Perfect Match','Mismatch'}) title(sprintf('Boxplot of raw intensity values for probe set %s',... probeName),'interpreter','none') % Use interpreter none to prevent the TeX interpreter treating the _ as % subscript.
Теперь, когда у вас есть значения интенсивности для зондов, можно построить графики для идеальных зондов соответствия и несоответствия.
figure plot(pmIntensity,'b'); hold on plot(mmIntensity,'r'); hold off title(sprintf('Probe intensity values for probe set %s',... probeName),'interpreter','none')
Также можно использовать функцию probesetplot
чтобы создать этот график непосредственно из структур CEL и CDF. Опция showstats добавляет среднее, а линии для +/- одно стандартное отклонение как для идеального соответствия, так и для датчиков несоответствия к графику.
probesetplot(celStruct,cdfStruct,probeName,'showstats',true);
Идентификаторы набора зондов Affymetrix не являются особенно описательными. Отображение между идентификаторами набора зондов и идентификаторами генов хранится в файле библиотеки GIN. Это текстовый файл, который можно открыть в редакторе и просмотреть в файле, или можно использовать affyread
для чтения информации в структуру.
ginStruct = affyread('Ecoli_ASv2.GIN',libDir)
ginStruct = struct with fields: Name: 'Ecoli_ASv2' Version: 2 ProbeSetName: {7312x1 cell} ID: {7312x1 cell} Description: {7312x1 cell} SourceNames: {2x1 cell} SourceURL: {2x1 cell} SourceID: [7312x1 double]
Вы можете искать в структуре конкретный набор зондов. Также можно использовать функцию probesetlookup
чтобы найти информацию о гене для набора зондов.
info = probesetlookup(cdfStruct,probeName)
info = struct with fields: Identifier: '3315278' ProbeSetName: 'argG_b3172_at' CDFIndex: 5213 GINIndex: 3074 Description: '/start=3316278 /end=3317621 /direction=+ /description=argininosuccinate synthetase' Source: 'NCBI EColi Genome' SourceURL: 'http://www.ncbi.nlm.nih.gov/cgi-bin/Entrez/altvik?gi=115&db=g&from=3315278'
Функция probesetlink
будет ссылаться на веб-узел NetAffx™, чтобы показать фактические последовательности, используемые для зондов. Обратите внимание, что для получения доступа к этой информации вам необходимо быть зарегистрированным пользователем NetAffx.
probesetlink(cdfStruct,probeName);
Affymetrix, GeneChip и NetAffx являются зарегистрированными товарными знаками Affymetrix, Inc.