如何将 RMSE、斜率、截距、r^2 添加到 R 图中?
Posted
技术标签:
【中文标题】如何将 RMSE、斜率、截距、r^2 添加到 R 图中?【英文标题】:How to add RMSE, slope, intercept, r^2 to R plot? 【发布时间】:2012-10-18 08:22:37 【问题描述】:如何使用 R 将 RMSE、斜率、截距和 r^2 添加到绘图中?我附上了一个带有样本数据的脚本,它的格式与我的真实数据集相似——不幸的是,我处于静止状态。有没有比从方程式创建对象并将其插入text()
更简单的方法将这些统计信息添加到图表中?理想情况下,我希望统计数据显示在图表上。我怎样才能做到这一点?
## 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)
【问题讨论】:
看这个问题***.com/questions/7549694/… 除了 r^2 和斜率和截距的 eq 之外,如何以简洁的格式化方式添加“RMSE = 值”有什么想法吗? 你没有提供任何关于你所说的“格式化时尚”的细节。在基本图形中,您向绘图添加文本的方式是使用text
(或mtext
),并且您获得了指向ggplot 的优秀答案的链接。还有什么问题?
您还可以查看?plotmath
中的示例以获取一些想法。
【参考方案1】:
这是一个使用基本图形和?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
的值。 @mnel 指出您在 cmets 中的答案使用 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)
这给出了:
【讨论】:
如果您希望每个描述符在新行中使用\n
而不是等式中的 ,
。以上是关于如何将 RMSE、斜率、截距、r^2 添加到 R 图中?的主要内容,如果未能解决你的问题,请参考以下文章