1

我试图显示不同因子水平(样本)和加权平均值(权重=覆盖)的变量(等位基因特定表达式)。

我做了一些示例数据:

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

所以 - 我只是想将“wm”值显示为红点 - 使用 ggplot2. 我认为它必须正确使用“重量=..” - 但我现在放弃了......

我真的希望有人可以提供帮助。

4

1 回答 1

5

我会先创建summarydata.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)

在此处输入图像描述

您可能需要考虑使用scale_size_area()为价值分配提供更好/无偏见的大小。

于 2013-04-05T14:03:01.173 回答