2013-04-05 2 views
1

Я пытаюсь показать переменную (конкретное выражение для аллеля) для разных уровней факторов (выборок) и взвешенного среднего (вес = охват).Показывать исходные значения и средневзвешенное значение для каждого уровня фактора в ggplot2

Я сделал некоторые образцы данных:

set.seed(2) 
x <- sample(c("A","B","C"), 100, replace=T) 
y <- rnorm(100) 
w <- ceiling(rnorm(100,200,200)) 
df <- data.frame(x, y, w) 

library(ggplot2) 
ggplot(df, aes(x=factor(x), y=y, weight=w)) + 
    geom_point(aes(size=w)) + 
    stat_summary(fun.y=mean, colour="red", geom="point", size=5) 

(и я попытался отправить сюжет, а также - но у меня нет достаточно очков, пока).

Это прекрасно работает - но это показывает, невзвешенное среднее ...

library(plyr) 
means <- ddply(df, "x", function(x) data.frame(wm=weighted.mean(x$y, x$w), 
               m=mean(x$y))) 
means 

x   wm   m 
1 A 0.00878432 0.11027454 
2 B -0.07283770 -0.13605530 
3 C -0.14233389 0.08116117 

Так что - я просто пытаюсь показать «СУС» значения, как красные точки, а не - с помощью ggplot2. Я думаю, что он должен правильно использовать «вес = ..», но я сейчас сдаюсь ...

Я действительно надеюсь, что кто-то может помочь.

ответ

5

Я бы создать summary data.frame с mean и weighted mean первый следующим образом:

require(plyr) 
dd <- ddply(df, .(x), summarise, m=mean(y), wm=weighted.mean(y, w)) 

Тогда, я бы построить по загрузке данных для отображения среднего значения и взвешенного среднего.

require(reshape2) # for melt 
require(ggplot2) 
ggplot() + geom_point(data = df, aes(x=factor(x), y=y, size=w)) + 
      geom_point(data = melt(dd, id.var="x"), 
      aes(x=x, y=value, colour=variable), size=5) 

# if you want to remove the legend "variable" 
scale_colour_discrete(breaks=NULL) 

enter image description here

Вы могли бы рассмотреть возможность использования scale_size_area(), чтобы обеспечить лучшее/непредвзятый размер ценить распределение.

+0

Спасибо - вы только что спасли мои выходные! – pallevillesen

+1

Привет снова. Не совсем новый для SO - но в основном чтение ответов (так как большинство вопросов в моей области задавали хотя бы один раз раньше;)). Я попытался принять это немедленно, но был вынужден ждать некоторое время системой. Во всяком случае: большое спасибо за быструю помощь. – pallevillesen

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