Как генерировать медоидные участки - PullRequest
2 голосов
/ 01 апреля 2012

Привет! Я использую алгоритм разбиения вокруг medoids для кластеризации с использованием функции pam в пакете кластеризации. У меня есть 4 атрибута в наборе данных, которые я кластеризовал, и они, кажется, дают мне около 6 кластеров, и я хочу сгенерировать график этих кластеров для этих 4 атрибутов, например 1 : http://www.flickr.com/photos/52099123@N06/7036003411/in/photostream/lightbox/ " Центроидный сюжет "

Но единственный способ получить результат кластеризации - это использовать дендрограмму или plot (data, col = result$clustering) команда, которая, кажется, генерирует сюжет, подобный этому [2]: http://www.flickr.com/photos/52099123@N06/7036003777/in/photostream "pam results".

Несмотря на то, что первое изображение представляет собой график центроида, мне интересно, есть ли в R инструменты, позволяющие сделать то же самое с графиком в виде мидоида. Обратите внимание, что он также печатает размер каждого кластера на графике. Было бы здорово узнать, есть ли какие-либо пакеты / решения, доступные в R, которые облегчают это, или нет, что должно быть хорошей отправной точкой для достижения графиков, подобных изображенному на рисунке 1.

Спасибо

Привет, все, я пытался решить проблему так, как сказал Джоран, но, думаю, я не понял ее правильно и не сделал это правильно, как это и должно быть. Во всяком случае, это то, что я сделал до сих пор. Вот как выглядит файл, который я пытался кластеризовать

 geneID         RPKM-base       RPKM-1cm        RPKM+4cm        RPKMtip  
GRMZM2G181227   3.412444267     3.16437442      1.287909035     0.037320722  
GRMZM2G146885   14.17287135     11.3577013      2.778514642     2.226818648  
GRMZM2G139463   6.866752401     5.373925806     1.388843962     1.062745344  
GRMZM2G015295   1349.446347     447.4635291     29.43627879     29.2643755  
GRMZM2G111909   47.95903081     27.5256729      1.656555758     0.949824883 
GRMZM2G078097   4.433627458     0.928492841     0.063329249     0.034255945  
GRMZM2G450498   36.15941083     9.45235616      0.700105077     0.194759794  
GRMZM2G413652   25.06985426     15.91342458     5.372151214     3.618914949     
GRMZM2G090087   21.00891969     18.02318412     17.49531186     10.74302155 

следующий вывод кластеризации Pam

GRMZM2G181227
1
GRMZM2G146885
2
GRMZM2G139463
2
GRMZM2G015295
2
GRMZM2G111909
2
GRMZM2G078097
3
GRMZM2G450498
3
GRMZM2G413652
2
GRMZM2G090087
2
AC217811.3_FG003
2

Используя два вышеупомянутых файла, я создал третий файл, который выглядит примерно так и имеет информацию о кластере в виде кластера типа K1, K2 и т. Д.

geneID  RPKM-base       RPKM-1cm        RPKM+4cm        RPKMtip Cluster_type
GRMZM2G181227   3.412444267     3.16437442      1.287909035     0.037320722     K1
GRMZM2G146885   14.17287135     11.3577013      2.778514642     2.226818648     K2
GRMZM2G139463   6.866752401     5.373925806     1.388843962     1.062745344     K2
GRMZM2G015295   1349.446347     447.4635291     29.43627879     29.2643755      K2
GRMZM2G111909   47.95903081     27.5256729      1.656555758     0.949824883     K2
GRMZM2G078097   4.433627458     0.928492841     0.063329249     0.034255945     K3
GRMZM2G450498   36.15941083     9.45235616      0.700105077     0.194759794     K3
GRMZM2G413652   25.06985426     15.91342458     5.372151214     3.618914949     K2
GRMZM2G090087   21.00891969     18.02318412     17.49531186     10.74302155     K2

Я, конечно, не думаю, что это файл, который Джоран хотел бы создать, но я не мог придумать ничего другого, поэтому я запустил решетку для указанного выше файла, используя следующий код.

clusres<- read.table("clusinput.txt",header=TRUE,sep="\t");
jpeg(filename = "clusplot.jpeg", width = 800, height = 1078,
     pointsize = 12, quality = 100, bg = "white",res=100);
     parallel(~clusres[2:5]|Cluster_type,clusres,horizontal.axis=FALSE);
dev.off();

и я получаю такую ​​картинку parallel plot of the cluster

Поскольку я хочу, чтобы одна единица представляла весь кластер в четырех разных точках, этот вывод неправильный, более того, я попытался поиграть с решеткой, но не могу понять, как заставить ее принимать значения Rpkm в качестве координаты X Кажется, что на графике столько линий от максимального или минимального значения в координате Y, что я не понимаю, что это такое.

Будет здорово, если кто-нибудь сможет мне помочь. Извините, если мой вопрос все еще кажется вам абсурдным.

Ответы [ 2 ]

4 голосов
/ 01 апреля 2012

Я не знаю ни одной предварительно созданной функции, которая генерирует указанный вами график, который выглядит для меня как своего рода график параллельных координат.

Но создание такого графика было бы довольно тривиальным упражнением.

  1. Добавьте столбец меток кластера (K1, K2 и т. Д.) К исходному набору данных на основе выходных данных вашего алгоритма кластеризации.

  2. Используйте один из множества инструментов R для агрегирования данных ( plyr , aggregate и т. Д.), Чтобы рассчитать релевантную сводную статистику по кластерам по каждой из четырех переменных.(Вы не сказали, что на самом деле изображает первый график. Среднее и сд? Медиана и MAD?)

  3. Поскольку вы хотите, чтобы графики были разделены на шесть отдельных панелей или фасетов, выВероятно, вы захотите построить данные, используя ggplot или lattice , оба из которых обеспечивают превосходную поддержку для создания одного и того же графика, разбитого по одному вектору группировки (т.е. кластерам в вашем случае).

Но это примерно так же конкретно, как любой может получить, учитывая, что вы предоставили так мало информации (т.е. нет минимального запускаемого примера, как рекомендовано здесь ).

1 голос
/ 02 апреля 2012

Как насчет использования clusplot из пакета кластера с разбиением вокруг медоидов ? Вот простой пример (из раздела примеров):

require(cluster)
#generate 25 objects, divided into 2 clusters.
x <- rbind(cbind(rnorm(10,0,0.5), rnorm(10,0,0.5)),
     cbind(rnorm(15,5,0.5), rnorm(15,5,0.5))) 
clusplot(pam(x, 2)) #`pam` does you partitioning

enter image description here

...