r - 在随机实验中用均值绘制基因表达数据

标签 r plot ggplot2 genetics

我(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;")

如果有任何帮助(或指向类似主题的链接),我将不胜感激。

最佳答案

首先,您需要将数据融为长格式,以便一列(您的 X 列)包含一个分类变量,指示观察值是否为 BL1Y,或折叠

(您的命令创建了一个您可能需要先删除的空列: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)

genes

如果您希望顶层是基因而不是治疗,您可以将顺序反转为 facet_grid(.~gene+treatment)

关于r - 在随机实验中用均值绘制基因表达数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220221/

相关文章:

r - 如何从r中的列表列表中删除零向量

r - 组织结构图三角图

r - ggplot2垂直线未插入到所需位置

r - C++ 全局变量导致段错误

json - 将R字符对象写入JSON时如何去除\"

R向量减法

r - 匹配对的条件逻辑回归

r - geom_smooth 没有出现在 ggplot 上

r - R:ggplot更好的渐变色

r - 将额外参数传递给 ggplot2 中的自定义几何图形