В этом примере показано, как использовать функции в Bioinformatics Toolbox™ для работы с данными Affymetrix® GeneChip®.
Функциональный affyread может считать четыре типа файлов данных Affymetrix. Это Dat-файлы, которые содержат необработанные данные изображения, файлы CEL, которые содержат информацию о значениях интенсивности отдельных зондов, файлы CHP, которые содержат информацию о тестовых наборах и файлы EXP, которые содержат информацию об экспериментальных условиях и протоколах. affyread может также считать файлы библиотеки CDF и GIN. CDF-файл содержит информацию, о которой принадлежат зонды, к которому тестовый набор и файл GIN содержат информацию о тестовых наборах, таких как название гена, с которым сопоставлен тестовый набор. Чтобы узнать больше о фактических файлах, можно загрузить файлы выборочных данных с сайта поддержки Affymetrix. Большинство наборов данных хранится в архивах DTT. Чтобы извлечь DAT, CEL и файлы CHP, необходимо будет установить Инструмент Передачи данных.
В данном примере вам будут нужны некоторые файлы выборочных данных (DAT, CEL, CHP) от E. coli Массив Генома Антисмысла. Загрузите их с Извлечения Demo_Data_E-coli-antisense.zip файлы данных из архива DTT использование Инструмента Передачи данных. Установите переменную exampleDataDir к имени пути и директории, к которой вы извлекли файлы выборочных данных.
exampleDataDir = 'C:\Examples\affydemo\data';
В дополнение к файлам данных вам также будет нужен Ecoli_ASv2. CDF и Ecoli_ASv2. GIN, файлы библиотеки для E. coli Массив Генома Антисмысла. У вас могут уже быть эти файлы, если у вас есть какое-либо программное обеспечение Affymetrix GeneChip, установленное на вашей машине. В противном случае получите файлы библиотеки путем загрузки и разархивации E. coli zip-файл Генома Антисмысла Массивов
Обратите внимание на то, что необходимо будет указать для того, чтобы получить доступ к файлам библиотеки.
Только необходимо разархивировать файлы, вы не должны запускать файл 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

Можно увеличить масштаб конкретной области при помощи инструмента Zoom In с мышью, или при помощи 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 поле содержит информацию о тестовых наборах. Это включает некоторую информацию о библиотеке, такую как 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' называется 'Крайний'.
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]
Большая часть информации в файле о тестовых наборах. В этом примере существует 7 312 регулярных тестовых наборов и 13 наборов зонда Qc. 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 соответствует 'смыслу', и 2 соответствует 'антисмыслу'. Остальные столбцы дают координаты X и Y премьер-министра и зондов 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Фон, 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.