2014-10-31 3 views
0

R^2 값을 플롯에 추가하는 것과 관련하여 많은 항목이 있지만 코드를 따르는 데 문제가 있습니다. 나는 세 범주로 구성된 산점도를 그래프로 나타냅니다. 나는 각각에 대해 선형 회귀선을 추가했다. 각각에 대해 r^2 값을 추가하고 싶습니다. 그러나이를 수행하는 방법을 알 수는 없습니다.ggplot2 및 회귀선 및 R^2 값

내 코드 : R^2 개 값을 추가하는 방법에 어떤 도움을 크게 감상 할 수

veg <- read.csv("latandwtall2.csv", header=TRUE) 

library("ggplot2") 

a <- ggplot(veg, aes(x=avglat, y=wtfi, color=genus)) + geom_point(shape=19, size=4) 
b <- a + scale_colour_hue(l=50) + stat_smooth(method = "lm", formula = y ~ x, size = 1, se = FALSE) 
c <- b + labs(x="Latitude", y="Weight (g)") 
d <- c + theme_bw() 
e <- d + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank()) 

#changes size of text 
f <- e + theme(
    axis.title.x = element_text(color="black", vjust=-0.35, size=15, face="bold"), 
    axis.title.y = element_text(color="black" , vjust=0.35, size=15, face="bold") 
) 
g <- e+theme(legend.key=element_rect(fill='white')) 
g 

. 감사!

답변

0

난 정말 당신이 무슨 일을하는지 재현 할 수 있지만이 될 것이다 주석() (10 점에서 R2를 퍼 팅) 일할 수있는

뭔가를 사용해야합니다 :

R2 = 0.4 
i = 10 
text = paste("R-squared = ", R2, sep="") 
g = g + annotate("text", x=avglat[i], y=wtfi[i], label=text, font="Calibri", colour="red", vjust = -2, hjust = 1) 

vjust 및 hjust을 사용하여 텍스트의 위치를 ​​점으로 조정하고 (i를 변경) 변수 r2를 계산 된 rsquared로 채 웁니다. 원하는 지점을 선택하거나 직접 x, y 좌표를 입력 할 수 있습니다. 그게 도움이 되니?

추신. 나는 여분의 매개 변수 (글꼴, 색상)를 넣어 유연성을 변경할 수 있습니다.

0

모델을 별도로 빌드하고 거기에서 R^2를 가져 와서 플롯에 추가하십시오. 약간의 더미 코드를 제공 하겠지만 샘플 데이터 프레임을 제공했다면 더 나은 품질을 얻을 수 있습니다.

r2 = summary(lm(wtfi ~ avglat, data=veg))$r.squared 
#to piggyback on Romain's code... 
i=10 
g = g + annotate("text", x=avglat[i], y=wtfi[i], label=round(r2,2), font="Calibri", colour="red", vjust = -2, hjust = 1) 

난 당신이 하드 코드에서 R^2 값을 필요가 없습니다.

4

을 당신이 R- 제곱 값으로 데이터 프레임을 빌드하는 경우 여기를 쓴 방법, 당신은 할 수 있습니다 geom_text에 대한 호출로 포함하여 주석 텍스트의 위치 지정을 (주로) 자동화합니다.

다음은 장난감의 예입니다. rsq 데이터 프레임은 geom_text에서 r- 제곱 레이블을 배치하는 데 사용됩니다. 이 경우, 가장 높은 x 값 바로 뒤에 레이블을 넣도록 설정했고 predict 함수는 y 값을 얻습니다. 단일 플롯의 경우 너무 많은 작업 일 것입니다.하지만이 작업을 많이 수행하면 매번 설정 코드를 반복 할 필요가 없도록 함수로 변환 할 수 있습니다. 더 멋진 로직을 추가 할 수 있습니다 라벨의 위치를보다 유연하게하기 :

library(reshape2) # For melt function 

# Fake data 
set.seed(12) 
x = runif(100, 0, 10) 
dat = data.frame(x, y1 = 2*x + 3 + rnorm(100, 0, 5), 
       y2 = 4*x + 20 + rnorm(100, 0, 10)) 
dat.m = melt(dat, id.var="x") 

# linear models 
my1 = lm(y1 ~ x, data=dat) 
my2 = lm(y2 ~ x, data=dat) 

# Data frame for adding r-squared values to plot 
rsq = data.frame(model=c("y1","y2"), 
       r2=c(summary(my1)$adj.r.squared, 
         summary(my2)$adj.r.squared), 
       x=max(dat$x), 
       y=c(predict(my1, newdata=data.frame(x=max(dat$x))), 
        predict(my2, newdata=data.frame(x=max(dat$x))))) 

ggplot() + 
    geom_point(data=dat.m, aes(x, value, colour=variable)) + 
    geom_smooth(data=dat.m, aes(x, value, colour=variable), 
       method="lm", se=FALSE) + 
    geom_text(data=rsq, aes(label=paste("r^2 == ", round(r2,2)), 
          x=1.05*x, y=y, colour=model, hjust=0.5), 
      size=4.5, parse=TRUE) 

enter image description here

관련 문제