опробуем применить различные классификаторы на уже знакомом нам датасете про эпигенетические модификации в промоторах и энхансерах.
Загрузим данные об эпигенетических модификациях в энхансерах и промоторах. Для простоты создано две таблицы - обучающая выборка (train) и тестовая (test) выборка. Данные для удобства уже прологарифмированы.
train=read.table("http://makarich.fbb.msu.ru/artemov/R/enhancer_promoter_train.tab", header=T) test=read.table("http://makarich.fbb.msu.ru/artemov/R/enhancer_promoter_test.tab", header=T)
PCA
(Шаг 0). Посмотрим, как устроены данные, методом PCA:
#все колонки, кроме y (столбец Type) train2=train[,2:ncol(train)] pc=prcomp(train2) pc=prcomp(train2, scale=T) # с применением шкалирования #покрасим по типа элемента (энхансер и промотер) plot(pc$x, pch=19, col=train$Type)
Сразу нарисовать графики со всеми главными осями
pairs(pc$x, col=train$Type) #или pairs(pc$x[,1:4], col=train$Type)
Какие переменные x вносят наибольший вклад в главные оси?
plot(pc$rotation, pch=19) text(pc$rotation[,1], pc$rotation[,2], rownames(pc$rotation)) barplot(pc$rotation[,1], las=2, main="PC1")
Кластеризация
1. Постройте иерархическую кластеризацию участков генома. (Проверьте, что вы не передаете на вход алгоритму кластеризации столбец с типом геномного участка.) (*) Покрасьте дерево в соответствии с типом участка (промотор - энхансер).
2. Постойте k-means кластеризацию с k=2. Получилось ли увидеть кластеры энхансеров и промоторов.
3. (*) Примените DBSCAN к тем же данным (см. ниже).
DBSCAN
Сгенерируем данные, на которых не сработают алгоритмы кластеризации, основанные на измерении расстояния
r1=runif(200) alpha1=runif(200, 0, 2*pi) cl1=data.frame(x=r1*cos(alpha1), y=r1*sin(alpha1)) plot(cl1) alpha2=runif(200, 0, 2*pi) r2=rnorm(200, mean=5) cl2=data.frame(x=r2*cos(alpha2), y=r2*sin(alpha2)) plot(cl2) cl_both=rbind(cl1, cl2) colors=c(rep("black", 200), rep("red", 200)) plot(cl_both, col=colors, pch=19)
Применим k-means clustering (k=2)
km = kmeans(cl_both, 2) plot(cl_both, col=1+km$cluster, pch=19)
Применими DBSCAN
install.packages("dbscan") library(dbscan) res = dbscan(cl_both, eps=0.3) plot(cl_both, col=1+res$cluster, pch=19)