簡體   English   中英

從回歸線方程中刪除不需要的字符

[英]Removing unwanted characters from regression line equation

在我使用的R / R-Studio的先前版本中,將回歸公式應用於ggplot時,我會得到一個圖形,其中的回歸方程式正確渲染。 但是,現在我切換到R v3.5.3,在回歸行中得到了更多的字符。 我已經修改了一個先前的問題( 在SEPARATE LINES圖上添加回歸線方程和R2 )作為示例:

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() ,或者這是一個錯誤嗎?

但是,這是一個開始,但是您可以根據需要調整數學文本的格式:

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)

情節

謝謝傑克的回答。 我一直希望保持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))}

幸運的是,該圖現在變為: 在此處輸入圖片說明

因此,從去年開始,有必要在系數周圍包括一組額外的[]。 再次感謝您為我提供解決方案!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM