你好,Stack Overflow,
TL;DR: I want to plot a bar plot with bar height 34.30, the upper error
bar extending to 55.68, and the lower error bar extending to 21.12. Can I set
error bars manually in R?
长版:
我正在为基因表达数据做δ δ Ct计算。我想用柱状图来表示我的表达式。我还想在计算中传播误差。我可以按照Livak等人(2001)的方法在R或excel中进行传播计算,并得到我的置信区间的上界和下界。但是要在R中画出这些是很麻烦的,因为我首先对每个处理取平均值,然后取这些平均值之间的差,然后对差进行变换。因此,我绘制的值不会从多个测量中获得输入,而只是一个数字。因此,用标准方法绘制误差条是行不通的,因为一个数字没有误差范围。
自己做计算,我可以找到95%置信区间的上限和下限。我希望能把这些指定为误差条的上下限。这可能吗?
Livak et al. (2001): http://www.gene-quantification.net/livak-2001.pdf
下面是一个数据的示例:
control
sample, gene1, gene2
1 , 30.00, 27.00
2 , 30.50, 27.25
3 , 29.50, 26.50
4 , 30.10, 26.90
treatment
sample, gene1, gene2
5 , 25.00, 27.00
6 , 25.50, 27.15
7 , 24.50, 26.80
8 , 25.10, 27.10
那么对照组中每个基因的平均值为:gene1 = 30.03, gene2 = 26.91
The difference of control values is then: 30.03-26.91 = 3.12
则各基因在处理中的平均值为:gene1 = 25.03, gene2 = 27.01
The difference of control values is then: 25.03-27.01 = -1.98
和
The difference in expression between the control and treatment is: -1.98 - 3.12 = -5.10
我正在绘制的表达式值(折叠变化)是:2^-(5.10)= 34.30因此,条形图代表了34.30倍的表达式变化。
我为我的误差条使用误差范围,我得到(-5.10)的上限和下限,然后以相同的方式(即2^-X)对它们进行转换,以找到转换后数据的误差范围的上限和下限。我需要在变换前计算上界和下界,否则我在表达式的折叠变化中得到错误的上界和下界。
Margin of Error = (StDev*(T-stat/sqrt(n))) = 0.70, thus
The upper bound of -5.10 is -4.40
The lower bound of -5.10 is -5.80
The transformed gene expression (2^-(-5.1)) is: 34.30
The transformed upper bound is: 55.68
The transformed lower bound is: 21.12
所以我希望我的柱高为34.30,然后上面的误差柱延伸到55.68,下面的误差柱延伸到21.12。
谢谢!
是的,所以我相当有信心这是可能的。我假设你可以得到上界和下界作为两个向量的值,称它们为upper
和lower
。首先定义一个错误条函数:
# Adding error bars to the barplot
error.bar <- function(x, y, upper, lower=upper, length=0.1, ...){
if(length(x) != length(y) | length(y) !=length(lower) | length(lower) != length(upper))
stop("vectors must be same length")
arrows(x,y+upper, x, y-lower, angle=90, code=3, length=length, lwd = 2, ...)
}
然后用你想要的任何值来制作你的情节。
# Plotting the barplot
barx <- barplot(values)
现在我们可以把错误图,替换y_values
, lower_values
和upper_values
与你的数据或你计算的。
# Adding the bars.
error.bar(barx, y_values, lower_value, upper_value)