В этом примере показано, как использовать функции Toolbox™ биоинформатики для работы с данными Affymetrix ® GeneChip ®.
Функция affyread может считывать четыре типа файлов данных Affymetrix. Это файлы DAT, содержащие необработанные данные изображения, файлы CEL, содержащие информацию о значениях интенсивности отдельных зондов, файлы CHP, содержащие информацию о наборах зондов, и файлы EXP, содержащие информацию об экспериментальных условиях и протоколах. affyread также может читать файлы библиотеки CDF и GIN. Файл CDF содержит информацию о том, какие зонды принадлежат какому набору зондов, а файл GIN содержит информацию о наборах зондов, такую как имя гена, с которым связан набор зондов. Чтобы узнать больше о фактических файлах, можно загрузить образцы файлов данных с сайта поддержки Affymetrix. Большинство наборов данных хранятся в архивах DTT. Для извлечения файлов DAT, CEL и CHP необходимо установить средство передачи данных.
Для этого примера потребуется несколько образцов файлов данных (DAT, CEL, CHP) из массива генома E.coli Antisense. Загрузите их из Demo_Data_E-coli-antisense.zip Извлеките файлы данных из архива DTT с помощью инструмента передачи данных. Установка переменной 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);
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]
ProbeSets содержит информацию о наборах зондов. Это включает в себя некоторую библиотечную информацию, такую как идентификатор и тип набора зондов, а также информацию о результатах, такую как вычисленное значение сигнала и 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' называется '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 наборов зондов КК. 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.