Кластеризация
Презентация лежит здесь: http://kodomo.cmm.msu.ru/FBB/year_10/term8/R_course/lecture5_NGS.pdf
Как найти расстояние между данными
Шаг 1. Сгенерируем данные
dat <- rbind(samp1=c(0,0,0), samp2=c(0,0,3), samp3=c(1,1,1), samp4=c(2,2,2)) dat
Шаг 2. Получаем расстояния, преобразуем в матрицу
dist(dat, method="euclidian") as.matrix(dist(dat, method="euclidian"))
Простейшая иерархическая кластеризация
Шаг 1. Генерируем данные
y <- matrix(rnorm(50), 10, 5, dimnames=list(paste("g", 1:10, sep=""), paste("t", 1:5, sep="")))
Шаг 2. Находим расстояния с помощью корреляции, строим дерево
c <- cor(t(y), method="spearman") d <- as.dist(1-c) hr <- hclust(d, method = "complete", members=NULL) plot(hr)
Шаг 3. Другой вид представления дерева
plot(as.dendrogram(hr), edgePar=list(col=3, lwd=4), horiz=T)
Метод главных компонент
Шаг 1. Генерируем данные
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="")))
Шаг 2. Строим PCA
pca <- prcomp(mydata, scale=T) summary(pca) summary(pca)$importance[, 1:6]
Шаг 3. Рисуем график
mycolors <- c("red", "green", "blue", "magenta", "black") plot(pca$x, pch=20, col=mycolors[sort(rep(1:5, 500))])
Многомерное шкалирование
Шаг 1. Делаем MDS и рисуем
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)
Деревья
Шаг 1. Загружаем данные об ирисах, смотрим, как они устроены
data(iris) names(iris) table(iris$Species)
Строим график, цветом красим в зависимости от сорта ириса
plot(iris$Petal.Width,iris$Sepal.Width,pch=19,col=as.numeric(iris$Species)) legend(1,4.5,legend=unique(iris$Species),col=unique(as.numeric(iris$Species)),pch=19)
Шаг 2. Строим дерево, на основе данных по лепесткам (petal) и чашелистикам (sepal)
library(tree) tree1 <- tree(Species ~ Sepal.Width + Petal.Width,data=iris) summary(tree1)
Шаг 3. Рисуем дерево
plot(tree1) text(tree1)
Шаг 4. Визуализируем разбиение на группы
plot(iris$Petal.Width,iris$Sepal.Width,pch=19,col=as.numeric(iris$Species)) partition.tree(tree1,label="Species",add=TRUE) legend(1.75,4.5,legend=unique(iris$Species),col=unique(as.numeric(iris$Species)),pch=19)