在我使用的R / R-Studio的先前版本中,将回归公式应用于ggplot时,我会得到一个图形,其中的回归方程式正确呈现。但是,现在我切换到R v3.5.3,在回归行中得到了更多的字符。我已经修改了一个先前的问题(Adding Regression Line Equation and R2 on SEPARATE LINES graph)作为示例:
library(ggplot2)
set.seed(5)
df <- data.frame(x = c(1:50))
df$y <- df$x + rnorm(50, sd=5)
lm_eqn <- function(df){
m <- lm(y~x, df)
eq <- substitute(italic(hat(y)) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = format(coef(m)[1], digits=3),
b = format(coef(m)[2], digits=3),
r2 = format(summary(m)$r.squared, digits=3)))
as.character(as.expression(eq))}
ggplot(data=df, aes(x=x, y=y))+
geom_smooth(method="lm", se=FALSE, color="black", formula=y~x)+
geom_point()+
geom_text(x=10, y=50, label=lm_eqn(df), parse=TRUE)
我希望回归行文本为
y ^ =-0.162 + 1.02·x,r²= 0.886
但是,显示的是
y ^ = c(-0.162)+ c(1.02)·x,r²= 0.886
是否有一种方法可以删除之前的ggplot中未显示的c
和()
,或者这是一个错误?
答案 0 :(得分:1)
这是一个开始,但是,请根据需要调整数学文本的格式:
library(ggplot2)
set.seed(5)
df <- data.frame(x = c(1:50))
df$y <- df$x + rnorm(50, sd=5)
mod <- lm(y~x, df)
label <- paste('y = ', round(mod$coefficients[[1]],2), ' + ', round(mod$coefficients[[2]],2),
'x', ', r^2 = ', round(summary(mod)$adj.r.squared,2), sep='')
ggplot(data=df, aes(x=x, y=y))+
geom_smooth(method="lm", se=FALSE, color="black", formula=y~x)+
geom_point()+
geom_text(x=10, y=50, label=label)
答案 1 :(得分:1)
感谢杰克。我一直希望保持lm_eqn函数的格式为yhat和italic,但是您的回应让我重新考虑了原始代码。在玩了一些之后,我将代码修改为:
lm_eqn <- function(df){
m <- lm(y~x, df)
eq <- substitute(italic(hat(y)) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = signif(m$coef[[1]], 3),
b = signif(m$coef[[2]], 3),
r2 = signif(summary(m)$r.squared, 3)))
as.character(as.expression(eq))}
因此,从去年开始,有必要在系数周围包括一组额外的[]。再次感谢您为我提供解决方案!