2016-03-17 2 views
2

Предположим, у меня есть гистограмма с двумя перекрывающимися группами. Вот возможная команда из ggplot2 и выдающийся граф вывода.R - ggplot2 - Получить гистограмму разницы между двумя группами

ggplot2(data, aes(x=Variable1, fill=BinaryVariable)) + geom_histogram(position="identity") 

Overlapping histograms

Так что у меня есть частота или количество каждого события. Вместо этого я хотел бы получить разницу между двумя событиями в каждом ящике. Возможно ли это? Как?

Например, если мы делаем красный минус синий:

  • значение при х = 2 будет ~ -10
  • Значение в точке х = 4 будет ~ 40 - 200 = -160
  • Значение в точке х = 6 будет ~ 190 - 25 = 155
  • Значение в точке х = 8 будет ~ 10

Я предпочел бы сделать это с помощью ggplot2, но другим способом было бы хорошо. Мой dataframe устанавливается с элементами, как эта игрушка, например (размеры фактически 25000 строк х 30 столбцов) Редакцией: Вот пример данных для работы сGIST Example

ID Variable1 BinaryVariable 
1  50   T   
2  55   T 
3  51   N 
.. ..   .. 
1000 1001   T 
1001 1944   T 
1002 1042   N 

Как вы можете видеть из моего примера, Я интересуюсь гистограммой для построения Variable1 (непрерывной переменной) отдельно для каждого BinaryVariable (T или N). Но я действительно хочу это различие между их частотами.

ответ

2

Итак, для этого нам нужно убедиться, что «бины», которые мы используем для гистограмм, одинаковы для обоих уровней вашей индикаторной переменной. Вот несколько наивное решение (в базе R):

df = data.frame(y = c(rnorm(50), rnorm(50, mean = 1)), 
       x = rep(c(0,1), each = 50)) 
#full hist 
fullhist = hist(df$y, breaks = 20) #specify more breaks than probably necessary 
#create histograms for 0 & 1 using breaks from full histogram 
zerohist = with(subset(df, x == 0), hist(y, breaks = fullhist$breaks)) 
oneshist = with(subset(df, x == 1), hist(y, breaks = fullhist$breaks)) 
#combine the hists 
combhist = fullhist 
combhist$counts = zerohist$counts - oneshist$counts 
plot(combhist) 

Таким образом мы определяем, сколько перерывов следует использовать (на основе значений из гистограммы на полных данных), а затем вычислить разницу в подсчетах на каждый из этих перерывов.

PS Возможно, было бы полезно изучить, что такое неграфический вывод hist().

Смежные вопросы