Kodomo

Пользователь

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

Загрузим данные об эпигенетических модификациях в энхансерах и промоторах. Для простоты создано две таблицы - обучающая выборка (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)