В этом примере показано, как использовать функции в 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.