Kodomo

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

Учебная страница курса биоинформатики,
год поступления 2015

Множественное тестирование

Генерим на каждом шаге 20 значений из нормального распределения, считаем pvalue тестом Стьюдента

set.seed(12345)
pValues <- rep(NA,1000)
for(i in 1:1000)
{
        x <- rnorm(20)
        pValues[i] <- t.test(x)$p.value
}

Считаем количество значимых экспериментов без поправки и с поправками

sum(pValues < 0.05) # ≈ 0.05*1000
sum(p.adjust(pValues, method="bonferroni") < 0.05)
sum(p.adjust(pValues, method="BH") < 0.05)

Генерим 500 выборок из стандартного нормального распределения и 500 из нормального со средним 1.5. Помечаем результаты, чтобы посчитать TP, FP и т.п.

set.seed(12345)
pValues <- rep(NA,1000)
for(i in 1:500){pValues[i] <- t.test(rnorm(20))$p.value}
for(i in 501:1000){pValues[i] <- t.test(rnorm(20, mean=1.5))$p.value}
trueStatus <- rep(c("zero", "not zero"), each=500)

Анализируем результат

table(pValues < 0.05, trueStatus)
table(p.adjust(pValues, method="bonferroni")<0.05, trueStatus)
table(p.adjust(pValues, method="BH")<0.05,trueStatus)

Задание

1) В качестве примера, García-Arenzana et al. (2014) проверили ассоциации из 25 диетических переменных с маммографической плотностью, важным фактором риска развития рака молочной железы, у испанских женщин. Результаты тут: dietary.csv

Какие переменные значимо ассоциированы с маммографической плотностью на уровне значимости 5%? Как изменится значимость после поправки на множественное тестирование?

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

Работаем с расстояниями

dat <- rbind(samp1=c(0,0,0), samp2=c(0,0,3), samp3=c(1,1,1), samp4=c(2,2,2))
dist(dat, method="euclidian")
as.matrix(dist(dat, method="euclidian"))

Иерархическая кластеризация

y <- matrix(rnorm(50), 10, 5, dimnames=list(paste("g", 1:10, sep=""), paste("t", 1:5, sep=""))) # генерируем данные 
c <- cor(t(y), method="spearman") 
d <- as.dist(1-c)
hr <- hclust(d, method = "complete", members=NULL) 
plot(hr)
plot(as.dendrogram(hr), edgePar=list(col=3, lwd=4), horiz=T)
str(as.dendrogram(hr))
library(ctc); hc2Newick(hr)#скобочная структура

Частота слов в блогах: blogdata.csv

blogdata<-read.csv("blogdata.csv")
idx <- sample(1:dim(blogdata)[1], 10)
blogdataSample <- blogdata[idx,]
blogdataSample$Blog <- NULL
hc <- hclust(dist(blogdataSample), method="single")
plot(hc, hang=-1, labels=blogdata$Blog[idx])

hc <- hclust(dist(blogdataSample), method="complete")

Обрезаем дерево

mycl <- cutree(hc, k=3) 
print(mycl)
plot(hc)
abline(h=55, col="red")

Неиерархическая кластеризация. k-means

km <- kmeans(blogdataSample, 4)

DBSCAN

library(dbscan)
data(iris)
iris <- as.matrix(iris[,1:4])
kNNdistplot(iris, k = 5)
abline(h=.5, col = "red", lty=2)

res <- dbscan(iris, eps = .5, minPts = 5)
print(res)
pairs(iris, col = res$cluster + 1L)

Сгенерируем данные, на которых не сработают алгоритмы кластеризации, основанные на измерении расстояния

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)

Задание

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

1. Постройте иерархическую кластеризацию участков генома. (Проверьте, что вы не передаете на вход алгоритму кластеризации столбец с типом геномного участка).

2. Постойте k-means кластеризацию с k=2. Получилось ли увидеть кластеры энхансеров и промоторов.

3. Примените DBSCAN к тем же данным.