Пользовательские панели погрешностей в R — распространение ошибки в экспрессии гена

Привет, переполнение стека,

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 для данных экспрессии генов. Я хочу использовать гистограмму, чтобы показать свое выражение. Я также хочу распространять ошибку в своих вычислениях. Я могу выполнить вычисления распространения в R или преуспеть, следуя методологии Livak et al. (2001) и получить верхнюю и нижнюю границы для моих доверительных интервалов. Но отображать их в R проблематично, потому что я сначала беру среднее значение каждого из моих методов лечения, затем беру разницу между этими средними значениями, а затем преобразую разницу. Таким образом, значение, которое я рисую, не зависит от нескольких измерений, а только от одного числа. Таким образом, построение планок погрешностей стандартным способом не работает, потому что для одного числа нет предела погрешности.

Выполняя расчеты самостоятельно, я могу найти верхнюю и нижнюю границы 95% доверительных интервалов. Я хотел бы иметь возможность просто указать их как верхний и нижний пределы моих планок погрешностей. Это возможно?

Ливак и др. (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

Таким образом, средние значения каждого гена в контроле составляют: ген1 = 30,03, ген2 = 26,91.

The difference of control values is then: 30.03-26.91 = 3.12

И тогда средние значения для каждого гена в лечении составляют: ген1 = 25,03, ген2 = 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.

Спасибо!


person Crawdaunt    schedule 20.09.2015    source источник
comment
да. docs.ggplot2.org/current/geom_errorbar.html   -  person Roman Luštrik    schedule 20.09.2015
comment
stackoverflow.com/q/9732720/1480928 содержит ответ для базовой графики.   -  person atiretoo    schedule 20.09.2015


Ответы (1)


Ага, так что я вполне уверен, что это возможно. Я предполагаю, что вы можете получить верхнюю и нижнюю границы как два вектора значений, назовите их 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)
person JCollerton    schedule 20.09.2015
comment
Спасибо, JCollerton, (и благодаря Роману, я действительно должен научиться работать с ggplot на днях). не возражаете, если я задам пару вопросов? edit: что-то выясняя, я думаю, что, возможно, это сработало так, как я хотел. - person Crawdaunt; 21.09.2015
comment
Оставил свой комментарий слишком долго. K... У меня есть вектор моих верхних значений (длины, которой я хочу, чтобы были столбцы) и вектор моих нижних значений (то же самое). Во-первых, мои верхние и нижние значения не равны. Таким образом, определение ..., верхний, нижний = верхний, ... не то, что мне нужно в этих планках ошибок. Если я хочу, чтобы верхняя и нижняя полосы рисовались отдельно и получали их значения из разных векторов, как мне настроить эту функцию? в данный момент ищу определения функции if(then) - person Crawdaunt; 21.09.2015
comment
Итак, нижний=верхний — это аргумент функции по умолчанию. Если вы не укажете ему оба вектора верхней и нижней границ, а только вектор верхних границ, он будет считать, что нижние границы равны верхним границам. Однако, когда вы указываете вектор нижних границ, это переопределяет аргумент по умолчанию, и вы получаете желаемый эффект. - person JCollerton; 21.09.2015
comment
Чтобы указать вектор, я бы сказал ..., верхний, нижний, ... верно? Это определение не помогло изменить мои нижние планки погрешностей. Я думаю, что верхняя часть работает, так как верхние полосы кажутся правильного размера. Нижние полосы продолжают просто отражать верхние полосы. Взяв мой пример с 4 образцами на обработку, у меня есть вектор с именем верхний и вектор с именем нижний, которые выглядят так: верхний‹- c((55,68-34,30), вверх2, вверх3, вверх4) 21.12), низкий2, низкий3, низкий4) - person Crawdaunt; 21.09.2015
comment
ОК, попробуйте удалить =upper из lower=upper. - person JCollerton; 21.09.2015
comment
Конечно. Это не изменило вывод. Я также только что понял, что ни мои верхние, ни нижние планки не достигают желаемой высоты. Вот выходной график: / Я указал пунктирными линиями, до каких пределов должны доходить планки погрешностей для одной действительно высокой полосы, помеченной как Dpt. Значение этого действительно высокого столбца равно 125,1. Верхний столбец должен простираться до 166,9. Нижний столбец должен простираться до 93,8. Мой верхний вектор содержит 8 значений (для 8 столбцов на этом графике), и значение верхнего вектора этого столбца составляет 166,9-125,1 = 41.8. - person Crawdaunt; 21.09.2015
comment
Итак, значения, которые я рисую здесь, следующие: значения‹-c(1,0, 0,8, 1,0, 7,9, 1,0, 125,1, 1,0, 38,2) ................. ..........верхний‹-c(0,3, 0,2, 4,9, 4,8, 2,2, 41,8, 2,4, 9,0) .......... нижний‹-c(0,3, 0,2 , 0,8, 3,0, 0,7, 31,3, 0,7, 7,3)......... - person Crawdaunt; 21.09.2015
comment
xD Я только что понял, что не так. # Добавление баров. error.bar(barx, y_values, lower_value, upper_value) Должно быть: # Добавление баров. error.bar(barx, значения_у, верхнее_значение, нижнее_значение) Спасибо JCollerton! Работает как шарм! - person Crawdaunt; 21.09.2015