我(一个新手,R)分析了两个处理对基因表达的影响的随机研究。在基线和1年后,我们评估了5个不同的基因。基因折叠计算为1年时的值除以基线值。
示例基因: IL10_BL IL10_1Y IL10_fold
基因表达是作为一个连续变量来测量的,通常在0.1到5.0之间。100名患者被随机分为他汀类药物或饮食疗法。
我想做的是:-Y轴应该以95%的置信限显示基因的平均表达-X轴应该是绝对的,以基线、1年和折叠值为5个基因,按治疗分组。因此,两组中每个基因有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;")我将非常感谢任何帮助(或链接到类似的线程)来做到这一点。
发布于 2014-08-09 19:17:54
首先,您需要将数据融化成一种长格式,以便一列(X列)包含一个分类变量,指示观察是BL、1Y还是fold。
(您的命令创建了一个空列,您可能首先需要删除它:genes$X = NULL)
library(reshape2)
genes.long = melt(genes, id.vars='treatment', value.name='expression')然后你需要基因和测量(基线,1年,折叠)在不同的列(来自this question)。
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'))然后,您可以使用stat_summary()调用来绘制平均值和置信区间。使用小面分离各组(治疗和基因组合)。
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)

如果你想要顶级基因而不是治疗,你可以倒转顺序到facet_grid(.~gene+treatment)。
https://stackoverflow.com/questions/25220221
复制相似问题