Kodomo

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

Кластеризация

Презентация лежит здесь: 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)