2015-11-30 5 views
2

У меня есть эти данные выборки экспрессии двух различных вариантов гена:Finding среза между двумя участками перекрывающихся плотности

value<-cbind(c(rnorm(100,500,90),rnorm(100,800,120))) 
genotype<-cbind(c(rep("A",100),rep("B",100))) 
df<-cbind(value,genotype) 
df<-as.data.frame(df) 
colnames(df)<-c("value","genotype") 
df$value<-as.numeric(as.character(df$value)) 

Я нанесенными эти два варианта генотипа их выражения и пытаюсь определить оптимальное значение отсечки анализ, который проводит различие между ними:

d <- density(value) 
plot(d, main="Genotypes A and B", ,type="n",xlim=c(200,1100),ylim=c(0,0.005),xlab="Units of expression",ylab="") 
d1 <- density(subset(value,genotype=="A")) 
polygon(d1, col = adjustcolor('gray', alpha.f = .40), border="black") 
d2 <- density(subset(value,genotype=="B")) 
polygon(d2, col = adjustcolor('gray', alpha.f = .40), border="black") 

Очевидно, что я могу использовать «abline» функцию, чтобы найти наилучшую отсечку между двумя плотностями, но есть аккуратнее способ определить обрезание?

+0

Таким образом, вы определяете отсечка точкой, где две плотности имеют одинаковое значение (предполагается, что имеется ровно одна такая точка), правильно? – Julius

+0

Да, точно - где они пересекают друг друга. – Oposum

+0

Возможный дубликат [Как найти пересечение двух плотностей с ggplot2 в R] (http://stackoverflow.com/questions/25453706/how-to-find-the-intersection-of-two-densities-with-ggplot2 -in-r) – Julius

ответ

0

Вот ответ, основанный на ссылке, предоставленной @Julius:

A.density <- density(subset(df, genotype == "A")$value, from = min(df$value), to = max(df$value), n = 2^10) 
B.density <- density(subset(df, genotype == "B")$value, from = min(df$value), to = max(df$value), n = 2^10) 
intersection.point <- A.density$x[which(diff((A.density$y - B.density$y) > 0) != 0) + 1] 
+0

Вот еще одно более простое решение, которое кажется более точным:' library (pROC) ', как только пакет будет загружен, выполните следующую команду: ' coords (roc (генотип, значение), "b", ret = "t") ' – Oposum