2013-02-25 3 views
0

Я использую R для создания гистограмм частотной частоты для больных и здоровых людей с установленными нормальными линиями распределения. У меня есть 2 вопроса, о которых я ищу.Построение 2 гистограмм вместе с агрегированными данными

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

dput (данные)

'structure(list(Size = c(25L, 28L, 31L, 45L, 60L), diseased = c(0L, 
22L, 10L, 5L, 2L), healthy = c(55L, 40L, 15L, 7L, 2L)), .Names = c("Size", 
"diseased", "healthy"), class = "data.frame", row.names = c(NA, 
-5L))' 

2.How я перекрывать обе гистограмму в 1 фигуру со встроенными нормальными распределительными линиями.

Я пробовал следующий код для агрегированных данных ggplot (данные, aes (x = размер, y = больной)) + geom_bar (stat = 'identity'), который работает хорошо, но я не могу понять, как добавить гистограмму для здоровых людей.

Я также попытался использовать следующий текст, чтобы вернуть обобщенные данные (называемые «данные») в исходный необработанный формат: raw < - данные [rep (1: data, times = data $ sickased), "Размер ", drop = FALSE]

Появляется следующее сообщение об ошибке: Ошибка в rep (1: data, times = data $ sickased): неверный аргумент« times ». Из предыдущих комментариев кажется, что функция rep не может обрабатывать «0»

+1

ли это сообщение Помогите? http://stackoverflow.com/questions/3541713/how-to-plot-two-histograms-together-in-r или, может быть, лучше это: http://stackoverflow.com/questions/6957549/overlaying-histograms-with- ggplot2-in-r – jasonflaherty

+0

Можете ли вы сделать свои данные воспроизводимыми, показывая результат 'dput (data)' или 'dput (head (data))'? Кроме того, как ваши столбцы могут иметь различное количество строк? –

+0

@DavidRobinson, я считаю, что это точный дубликат сообщения, связанного с buildakicker. – Arun

ответ

0

Итак, я спешу, и я как бы взломал нормальную кривую, но вы можете использовать ее для построения двух «гистограмм- стиль "сюжеты друг на друга.

Было бы легче получить кривые, если бы у нас был полный набор данных, а не только сводки, конечно. Я как бы объединил их вместе, но я думаю, этого достаточно, чтобы получить общую идею здесь.

Я не совсем ясно, почему вы хотите , чтобы сделать это, но вы можете ...

library(SDMTools) # Use this to get weighted means 

testdata <- structure(list(Size=c(25L, 28L, 31L, 45L, 60L), 
          diseased=c(0L, 22L, 10L, 5L, 2L), 
          healthy=c(55L, 40L, 15L, 7L, 2L)), 
         .Names = c("Size", "diseased", "healthy"), 
         class = "data.frame", 
         row.names = c(NA, -5L)) 

barplot(testdata$healthy, 
     names.arg=paste("     ",testdata$Size), 
     col="light blue", 
     border="blue", 
     xlim=c(0,6), 
     ylim=c(0,70), 
     width=0.5, 
     space=1) 
par(new=TRUE) 
barplot(testdata$diseased, 
     col="pink", 
     border="red", 
     xlim=c(0,6), 
     ylim=c(0,70), 
     width=0.5, 
     space=c(2,1,1,1,1)) 

healthy_mean <- wt.mean(x=testdata$healthy,wt=testdata$Size) 
healthy_sd <- wt.sd(x=testdata$healthy,wt=testdata$Size) 
diseased_mean <- wt.mean(x=testdata$diseased,wt=testdata$Size) 
diseased_sd <- wt.sd(x=testdata$diseased,wt=testdata$Size) 

yfit_healthy <- as.data.frame(dnorm(0:max(testdata$healthy), 
           mean=healthy_mean,sd=healthy_sd)) 
names(yfit_healthy) <- "y" 
yfit_diseased <- as.data.frame(dnorm(0:max(testdata$diseased), 
           mean=diseased_mean,sd=diseased_sd)) 
names(yfit_diseased) <- "y" 

yfit_healthy$x <- seq(0,6,length.out=length(yfit_healthy$y)) 
yfit_diseased$x <- seq(0,6,length.out=length(yfit_diseased$y)) 

lines(yfit_healthy$x, 
     (max(testdata$healthy)*yfit_healthy$y)/max(yfit_healthy$y), 
     col="blue",lwd=2) 

lines(yfit_diseased$x, 
     (max(testdata$diseased)*yfit_diseased$y)/max(yfit_diseased$y), 
     col="red",lwd=2) 

Этот код заставляет меня:

Not Exactly My Finest Graph

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