在图上添加回归直线方程和R2
我想知道如何在ggplot
上添加回归直线方程和R ^ 2。 我的代码是
library(ggplot2) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) + geom_point() p
任何帮助将不胜感激。
这是一个解决scheme
# GET EQUATION AND R-SQUARED AS STRING # SOURCE: http://goo.gl/K4yh lm_eqn <- function(df){ m <- lm(y ~ x, df); eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, list(a = format(coef(m)[1], digits = 2), b = format(coef(m)[2], digits = 2), r2 = format(summary(m)$r.squared, digits = 3))) as.character(as.expression(eq)); } p1 <- p + geom_text(x = 25, y = 300, label = lm_eqn(df), parse = TRUE)
编辑。 我从中找出了这个代码的来源。 这里是链接到ggplot2谷歌组中的原始文章
我已经修改Ramnath的post到a)使更通用,因此它接受线性模型作为参数,而不是数据框和b)更适当地显示底片。
lm_eqn = function(m) { l <- list(a = format(coef(m)[1], digits = 2), b = format(abs(coef(m)[2]), digits = 2), r2 = format(summary(m)$r.squared, digits = 3)); if (coef(m)[2] >= 0) { eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,l) } else { eq <- substitute(italic(y) == a - b %.% italic(x)*","~~italic(r)^2~"="~r2,l) } as.character(as.expression(eq)); }
用法将更改为:
p1 = p + geom_text(aes(x = 25, y = 300, label = lm_eqn(lm(y ~ x, df))), parse = TRUE)
我改变了stat_smooth
和相关函数的几行来创build一个新的函数,将拟合方程和R平方值相加。 这也会在小平面上工作!
library(devtools) source_gist("524eade46135f6348140") df = data.frame(x = c(1:100)) df$y = 2 + 5 * df$x + rnorm(100, sd = 40) df$class = rep(1:2,50) ggplot(data = df, aes(x = x, y = y, label=y)) + stat_smooth_func(geom="text",method="lm",hjust=0,parse=TRUE) + geom_smooth(method="lm",se=FALSE) + geom_point() + facet_wrap(~class)
我用@ Ramnath的答案中的代码来格式化方程。 stat_smooth_func
函数不是很健壮,但是玩起来应该不难。
https://gist.github.com/kdauria/524eade46135f6348140 。 如果出现错误,请尝试更新ggplot2
。
我在我的包“ggpmisc”中包含了一个统计stat_poly_eq()
,它允许这个答案:
library(ggplot2) library(ggpmisc) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) my.formula <- y ~ x p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE) + geom_point() p
这个统计量适用于任何多项式,没有缺失项,并希望有足够的灵活性,通常是有用的。 R ^ 2或调整后的R ^ 2标签可以与任何适合lm()的模型公式一起使用。 作为一个ggplot统计,它的行为与组和面都一样。
'ggpmisc'包可以通过CRAN获得。
CRA版本只接受0.2.6版本。
它解决了@shabbychef和@ MYaseen208的评论。
@ MYaseen208这个显示了如何添加一个帽子 。
library(ggplot2) library(ggpmisc) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) my.formula <- y ~ x p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, eq.with.lhs = "italic(hat(y))~`=`~", aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE) + geom_point() p
@shabbychef现在可以将公式中的variables与用于轴标签的variables进行匹配。 用z和yreplacex ,可以使用:
p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, eq.with.lhs = "italic(h)~`=`~", eq.x.rhs = "~italic(z)", aes(label = ..eq.label..), parse = TRUE) + labs(x = expression(italic(z)), y = expression(italic(h))) + geom_point() p
正如这些正常的Rparsingexpression式希腊字母现在也可以在方程的lhs和rhs中使用。
[2017-03-08] @elarry编辑更准确地解决原始问题,显示如何在方程和R2标签之间添加逗号。
p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, eq.with.lhs = "italic(hat(y))~`=`~", aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~")), parse = TRUE) + geom_point() p