Методы понижения размерности
PCA
z1 <- rnorm(10000, mean=1, sd=1) z2 <- rnorm(10000, mean=3, sd=3) z3 <- rnorm(10000, mean=5, sd=5) z4 <- rnorm(10000, mean=7, sd=7) z5 <- rnorm(10000, mean=9, sd=9) mydata <- matrix(c(z1, z2, z3, z4, z5), 2500, 20, byrow=T, dimnames=list(paste("R", 1:2500, sep=""), paste("C", 1:20, sep=""))) summary(pca) # Выводит на экран summary для всех компонент summary(pca)$importance[, 1:6] # для первых шести компонент pca$rotation #перевод старых координат в новые mycolors <- c("red", "green", "blue", "magenta", "black") #График двух первых компонет plot(pca$x, pch=20, col=mycolors[sort(rep(1:5, 500))])
Многомерное шкалирование
loc <- cmdscale(eurodist) plot(loc[,1], -loc[,2], type="n", xlab="", ylab="", main="cmdscale(eurodist)") text(loc[,1], -loc[,2], rownames(loc), cex=0.8)
tSNE
install.packages("Rtsne") library("Rtsne") iris_unique <- unique(iris) tsne<-Rtsne(iris_unique[, c(-5)]) plot(tsne$Y, col=iris_unique[,5], pch=19)
Сделаем для сравнения PCA
pca<-prcomp(iris_unique[, -5]) plot(pca$x, col=iris_unique[,5], pch=19)
Промоторы и энхансеры
Попробуем применить различные методы уменьшения размерности на уже знакомом нам датасете про эпигенетические модификации в промоторах и энхансерах.
Загрузим данные об эпигенетических модификациях в энхансерах и промоторах. Для простоты создано две таблицы - обучающая выборка (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)
Можно рисовать в 3d и крутить картинку
install.packages("rgl") library(rgl) plot3d(pc$x, col=as.integer(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")
Задание
Попробуйте применить к тем же данным tSNE. Поварьируйте параметр perplexity (20, 30, 50) и dim (преобразуем в двумерные и трехмерные координаты).