2015-07-15 2 views
1

Я пытаюсь понять, как читать в матрице счетчиков в R, а затем кластер на основе эвклидова расстояния и полной метрики связи. Исходная матрица имеет 56 000 строк (генов) и 7 столбцов (обработки). Я хочу посмотреть, существует ли кластеризация между обработками. Тем не менее, каждый раз, когда я пытаюсь это сделать, я сначала получаю сообщение об ошибке: Error: cannot allocate vector of size 544.4 Gb Поскольку я пытаюсь воспроизвести работу, опубликованную кем-то еще, мне интересно, не ошибаюсь ли я с моим первоначальным вводом данных.Использование R для кластера на основе эвклидовой дистанции и полной метрики связи, слишком много векторов?

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

Вот код, который я пытаюсь запустить:

exprs <- as.matrix(read.table("small_RMA_table.txt", header=TRUE, sep = "\t", row.names = 1, as.is=TRUE)) 
eucl_dist=dist(matrix(exprs),method = 'euclidean') 
hie_clust=hclust(eucl_dist,method = 'complete') 
plot(hie_clust) 

А вот пример из моей таблицы данных:.

AGS KATOIII MKN45 N87 SNU1 SNU5 SNU16 
1_DDR1 11.18467721 11.91358171 11.81568242 11.08565284 8.054326631 12.46899188 10.54972491 
2_RFC2 9.19869822 9.609015734 8.925772678 8.3641799 8.550993726 10.32160527 9.421779056 
3_HSPA6 6.455324139 6.088320986 7.949175048 6.128573129 6.113793411 6.317460116 7.726657567 
4_PAX8 8.511225092 8.719103196 8.706242048 8.705618546 8.696547633 9.292782564 8.710369119 
5_GUCA1A 3.773404228 3.797729793 3.574286779 3.848753216 3.684193193 3.66065606 3.88239872 
6_UBA7 6.477543321 6.631538303 6.506133756 6.433793116 6.145507918 6.92197071 6.479113995 
7_THRA 6.263090367 6.507397854 6.896879084 6.696356125 6.243160864 6.936051147 6.444444498 
8_PTPN21 6.88050894 6.342007735 6.55408163 6.099950167 5.836763044 5.904301086 6.097067306 
9_CCL5 6.197989448 4.00619542 4.445053893 7.350765625 3.892650264 7.140038596 4.123639647 
10_CYP2E1 4.379433632 4.867741561 4.719912827 4.547433566 6.530890968 4.187701905 4.453267508 
11_EPHB3 6.655231606 7.984278173 7.025962652 7.111129175 6.246989328 6.169529157 6.546374446 
12_ESRRA 8.675023046 9.270153715 8.948209029 9.412638347 9.4470612 9.98312055 9.534236722 
13_CYP2A6 6.834018146 7.18386746 6.826740822 7.244411918 6.744588768 6.715122111 7.302922762 
14_SCARB1 8.856802264 8.962211232 8.975200168 9.710291176 9.120002571 10.29588004 10.55749325 
15_TTLL12 8.659539601 9.93935462 8.309244963 9.21145716 9.792647852 10.46958091 10.51879844 
16_LINC00152 5.108632654 4.906321384 4.958158343 5.315532543 5.456138001 5.242577092 5.180295902 
17_WFDC2 5.595843025 5.590991341 5.776102664 5.622086284 5.273603946 5.304240608 5.573746302 
18_MAPK1 6.970036434 5.739881305 4.927993642 5.807358161 7.368137365 6.17697538 5.985006279 
19_MAPK1 8.333269232 8.758733916 7.855324572 9.03596893 7.808283302 7.675434022 7.450262521 
20_ADAM32 4.075355477 4.216259982 4.653654879 4.250333684 4.648194266 4.250333684 4.114286071 

Строки описывают гены (Ex, 1_DDR1, 2_RFC2, и т. д.), а столбцы - экспериментальные образцы (пример AGS, KATOIII). Я хочу видеть связанность образцов в кластере.

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

enter image description here

дендрограммы газеты (в том числе этих 8 образцов и многое другое, а) ниже: enter image description here

Спасибо за любую помощь, вы может обеспечить!

ответ

1

У вас закончилось ОЗУ. Вот и все. Вы не можете выделить вектор, который превышает объем вашей памяти. Перейдите на компьютер с большим объемом памяти или, возможно, попробуйте использовать bigmemory (я никогда не пробовал).

https://support.bioconductor.org/p/53848/

+0

Спасибо, я сделаю это. До тех пор, пока я не делаю что-то неправильно с начальным вводом данных, я не против поиска больших ресурсов вообще. У вас есть понимание во второй половине вопроса? Как получить ветви дендрограммы для представления образцов? – jake9115

+1

@ jake9115 О, вы можете перенести свою матрицу с помощью 't (your_data)', прежде чем класть на нее. Я думаю, что это перевернет кластеризацию из генов в образцы. – VermillionAzure

+0

Я думал, что это тоже сработает! Я предполагаю, что dist() сравнивает строки, поэтому я сделал строки образцов, но у моей кластерной графики все еще есть больше терминальных ветвей, чем у образцов, поэтому я понятия не имею, что происходит! – jake9115

1

В случае кто-нибудь задавался вопросом, ответ на мой второй вопрос ниже. Я звонил as.matrix на матрицу, и это закручивало данные. Следующий код работает сейчас!

exprs <- as.matrix(read.table("small_RMA_table.txt", header=TRUE, sep = "\t", row.names = 1, as.is=TRUE)) 
eucl_dist=dist(exprs,method = 'euclidean') 
hie_clust=hclust(eucl_dist,method = 'complete') 
plot(hie_clust) 
1

вы хотите кластера на столбцов (обнаруживаемых сходство между процедурами) или строк (обнаружить сходство между генами) ли? Похоже, вы хотите первого, учитывая, что вы ожидаете 7 ветвей дендрограммы для 7 сеансов.

Если это так, вам необходимо транспонировать ваш набор данных. dist вычисляет матрицу расстояний для строк, а не столбцов, что не то, что вы хотите.

После того, как вы выполнили транспонирование, ваша кластеризация займет совсем немного времени и минимальная память.

+0

Спасибо Хонгу. На самом деле у меня были две проблемы, и мне пришлось перенести первую проблему. Я также случайно вызывал 'as.matrix()' на матрице, что было еще одной большой проблемой! – jake9115