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를 사용 - 난 그냥 대신 빨간색 점으로 "WM"값을 표시하려합니다. 나는 그것이 "무게 = .."을 올바르게 사용해야한다고 생각합니다. 그러나 지금은 포기하고 있습니다 ...

정말 도움이되기를 바랍니다. 다음

답변

5

나는 제 meanweighted meansummary으로 data.frame를 만들 것이다 :

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

그리고, I는 평균과 가중 평균을 나타 내기위한 데이터를로드하여 플롯 것이다.

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

안녕하세요. 너무 새롭지는 않지만 - 대부분은 내 영역의 대부분의 질문에 적어도 한 번 이상 질문을했기 때문에 주로 답을 읽습니다.)). 나는 즉시 받아들이려고했으나 잠시 시스템을 기다려야했다. 어쨌든 빠른 도움을 주셔서 감사합니다. – pallevillesen