2013-08-21 2 views
-2

У меня гены с их соответствующими р-значений в следующем виде:распределение р-значение в R

Gene p-value 
gene1 0.01 
gene2 0.02 
gene3 0.06 
gene4 0.05 
gene5 0.09 
gene6 0.01 
gene7 0.05 
gene8 0.09 
gene9 0.01 
gene10 0.06 

Я хотел бы создать блок-диаграмме, как показано в примере ниже:

enter image description here

Вместо месяцев я хотел бы, чтобы это число генов (частота генов). В соответствии с огромным набором данных, который у меня есть, ось x должна быть числом генов, попадающих под определенную категорию p-значения (которая находится по оси y). Таким образом, ось у будет р-значения от 0,01 до говорят 1.

Я использовал

boxplot(gene ~ p-value, col=rainbow(12)) 

Но это не работает.

+0

Пара вещей - вы можете дать 'Str()' ваших данных? Несмотря на это, вам нужно правильно ссылаться на переменные, т. Е. Если 'data.frame'' 'dat',' dat $ gene' – alexwhan

+0

str (newmat) 'data.frame': \t 22810 obs. из 2 переменных: $ probes: Factor w/22810 levels "244901_at", "244902_at", ..: 1 2 3 4 5 6 7 8 9 10 ... $ P.value: num 0.5503 0.4814 0.0145 0.8207 0.5697. .. – user1805343

+0

У вас есть столбец с именем 'p-value'? Это не стандартное имя, оно смущает «p - значение» (минус). –

ответ

1

Я использовал функции cut и aggregate здесь. Вы можете узнать о них больше, выполнив ?cut и ?aggregate в консоли R. Идея заключалась в том, чтобы взять ваш кадр данных о генах и p-значениях и cut p-значениях в ячейки. Если вы хотите больше или меньше ящиков, вы можете изменить аргумент breaks в функции cut. Затем вы можете построить распределение значений p по их ячейке с помощью boxplot.

Я добавил аргумент xaxt=FALSE к boxplot, поэтому мы можем определить нашу собственную ось - в этом случае количество генов, которые попадают в каждый бит. Я вычислил количество генов, используя функцию aggregate с length, а затем добавил ось.

set.seed(1) 
example <- data.frame(gene=sample(paste("gene",1:10),size=500,replace=TRUE),pval=sample(seq(0.01,1,0.01),500,replace=TRUE)) 
example$bin <- cut(example$pval,breaks=10) 
boxplot(example$pval~example$bin,xaxt="n",ylab="p value",xlab="number of genes") 
ngenes <- aggregate(example$gene,by=list("bin"=example$bin),length) 
axis(side=1,labels=ngenes$x,at=1:10) 

enter image description here

+0

@ user1805343 Что значит, что вы не знаете, как читать данные? – dayne

+1

@ user1805343 Это должно было показать вам, как пройти процесс с помощью собственных данных. Вы не должны изменять мой пример. Пройдитесь по моему примеру, чтобы понять, что я сделал, а затем примените его к вашим собственным данным. Вы будете использовать свой 'newmat' и использовать функции' cut' и 'aggregate', чтобы сделать свой сюжет. – dayne