2012-10-29 220 views
7

如何將RMSE,斜率,截距和r^2添加到使用R的圖中?我附上了一個帶有示例數據的腳本,這與我的真實數據集類似 - 不幸的是,我處於靜止狀態。有沒有更容易的方法將這些統計信息添加到圖中,而不是通過公式創建對象並將其插入到text()?理想情況下,我會將統計信息顯示在圖表上。我怎樣才能做到這一點?如何在R圖上添加RMSE,斜率,截距,r^2?

## Generate Sample Data 
x = c(2,4,6,8,9,4,5,7,8,9,10) 
y = c(4,7,6,5,8,9,5,6,7,9,10) 

# Create a dataframe to resemble existing data 
mydata = data.frame(x,y) 

#Plot the data 
plot(mydata$x,mydata$y) 
abline(fit <- lm(y~x)) 

# Calculate RMSE 
model = sqrt(deviance(fit)/df.residual(fit)) 

# Add RMSE value to plot 
text(3,9,model) 
+0

看看這個問題http://stackoverflow.com/questions/7549694/ggplot2-adding-regression-line-equation-and-r2-on-graph – mnel

+0

關於如何添加「RMSE = value 「除了r^2和一個整齊,格式化的坡度和截距的eq? – Borealis

+0

您還沒有提供任何關於「格式化時尚」的意思的詳細信息。在基本圖形中,您向文本添加文本的方式是使用'text'(或'mtext'),並且您獲得了ggplot的出色答案的鏈接。還有什麼問題? – joran

回答

16

下面是使用基本圖形和?plotmath繪製的情節和其標註

## Generate Sample Data 
x = c(2,4,6,8,9,4,5,7,8,9,10) 
y = c(4,7,6,5,8,9,5,6,7,9,10) 

## Create a dataframe to resemble existing data 
mydata = data.frame(x,y) 

## fit model 
fit <- lm(y~x, data = mydata) 

下計算出你希望出現在註釋的值的版本。爲此,我更喜歡bquote(),其中.(foo)中標記的任何內容都將被對象foo的值替換。 Answer @mnel指出你在評論中使用substitute()來實現同樣的事情,但通過不同的方式。所以我創建工作區中的每個值對象,你可能希望在註釋中顯示:

## Calculate RMSE and other values 
rmse <- round(sqrt(mean(resid(fit)^2)), 2) 
coefs <- coef(fit) 
b0 <- round(coefs[1], 2) 
b1 <- round(coefs[2],2) 
r2 <- round(summary(fit)$r.squared, 2) 

現在建立使用?plotmath的描述結構式:

eqn <- bquote(italic(y) == .(b0) + .(b1)*italic(x) * "," ~~ 
        r^2 == .(r2) * "," ~~ RMSE == .(rmse)) 

一旦做到這一點,你可以畫的情節,並與你的表達

## Plot the data 
plot(y ~ x, data = mydata) 
abline(fit) 
text(2, 10, eqn, pos = 4) 

其中給出標註爲:

enter image description here

+1

如果你想在新行上使用'\ n'而不是''''在等式中的每個描述符。 – MikeRSpencer