用随机实验中的平均值绘制基因表达数据

时间:2014-08-09 15:40:42

标签: r plot ggplot2 genetics

我(R的新手)分析了一项关于两种治疗对基因表达影响的随机研究。我们在基线和1年后评估了5种不同的基因。基因倍数计算为1年时的值除以基线值。

示例基因: IL10_BL IL10_1Y IL10_fold

基因表达作为连续变量测量,通常为0.1至5.0。 100名患者被随机分配到他汀类药物或饮食方案中。

我想做以下情节: - Y轴应显示95%置信限的平均基因表达 - X轴应该是分类的,基线,5年基因中的每一个的1年和倍数值,按治疗分组。因此,两组中每个基因具有3个值的5个基因将在X轴上表示30个类别。对于相同的基因来说,用一条线连接起来真是太好了。

我自己尝试过(使用ggplot2)但没有成功。我试图直接从原始数据中做到这一点,这看起来像这样(前6个观察结果和2个不同的基因):

    genes <- read.table(header=TRUE, sep=";", text = 
    "treatment;IL10_BL;IL10_1Y;IL10_fold;IL6_BL;IL6_1Y;IL6_fold;
    diet;1.1;1.5;1.4;1.4;1.4;1.1;
    statin;2.5;3.3;1.3;2.7;3.1;1.1;
    statin;3.2;4.0;1.3;1.5;1.6;1.1;
    diet;3.8;4.4;1.2;3.0;2.9;0.9;
    statin;1.1;3.1;2.8;1.0;1.0;1.0;
    diet;3.0;6.0;2.0;2.0;1.0;0.5;")

我非常感谢任何帮助(或类似线程的链接)来做到这一点。

1 个答案:

答案 0 :(得分:1)

首先,您需要将数据融合为长格式,以便一列(您的X列)包含一个分类变量,指示观察是BL1Y还是{{1 }}

(您的命令会创建一个空列,您可能需要先删除它:fold

genes$X = NULL

然后你需要不同列中的基因和测量(基线,1年,折叠)(来自this question)。

library(reshape2)
genes.long = melt(genes, id.vars='treatment', value.name='expression')

按照您期望的顺序进行测量:

genes.long$gene = as.character(lapply(strsplit(as.character(genes.long$variable), split='_'), '[', 1))
genes.long$measurement = as.character(lapply(strsplit(as.character(genes.long$variable), split='_'), '[', 2))

然后,您可以使用genes.long$measurement = factor(genes.long$measurement, levels=c('BL', '1Y', 'fold')) 调用绘制平均值和置信区间。使用facets分组(治疗和基因组合)。

stat_summary()

genes

如果您希望最高级别是基因而不是治疗,您可以将顺序反转为ggplot(genes.long, aes(measurement, expression)) + stat_summary(fun.y = mean, geom='point') + stat_summary(fun.data = 'mean_cl_boot', geom='errorbar', width=.25) + facet_grid(.~treatment+gene)