ggplot2添加回归线与回归方程
ggplot2没有内置函数??还是我没找到?搜了很久都没有找到这个excel下使用很频繁的功能。搜来搜去就一种方法,多个出处这里和这里,均是写一个函数来实现:
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 + geomtext(aes(x = 25, y = 300, label = lmeqn(lm(y ~ x, df))), parse = TRUE)
但是我用起来有问题,主要是他每一个点都显示一个公式,全乱套了,也不知道在哪里修改,于是自己也依样画葫芦实现一个简单的。
setwd("~/下载")
jy <- read.csv("jy-xrf111.csv")
library(dplyr)
library(ggplot2)
jyxrf <- filter(jy,depth>3400)
xrf1 <- filter(jyxrf,depth>。。。 & depth<。。。)
xrf2 <- 。。。
p1 <- qplot(Si,Al,data=xrf1,ylim = c(0,10))
##添加回归线
p1 <- p1+ geom_point() + stat_smooth(method='loess')
##添加回归方程
p1+geom_text(x=35,y=7.5,label = paste0("y=",format(lm(Al ~ Si, xrf1)$coef[1],digits = 2),"+",format(lm(Al ~ Si, xrf1)$coef[2],digits = 2),"x"))
主要思路是利用ggplot2中的statsmooth和geomtext。 首先用stat_smooth添加回归线,这个函数的method选项很多:smoothing method (function) to use, eg. lm, glm, gam, loess, rlm. For datasets with n < 1000 default is loess. For datasets with 1000 or more observations defaults to gam, see gam for more details.
添加回归方程直接用的是暴力方法,利用geom_text函数,添加一个label,然后用lm的coef构建出y=a+bx的形式,用x,y坐标显示出来,这里x和y需要根据图形情况手动调整,比较麻烦。。。
问题:回归线用的是loess,回归方程用的是lm。。。因为我不知道怎么表达loess,肖凯老师曾经说过,“LOESS的优势是并不需要确定具体的函数形式,而是让数据自己来说话,其缺点在于需要大量的数据和运算能力。LOESS作为一种平滑技术,其目的是为了探寻响应变量和预测变量之间的关系,所以LOESS更被看作一种数据探索方法,而不是作为最终的结论。”
不知道是不是意味着loess不能表达为具体的函数形式?Y叔没说不能,但我也没搞明白到底怎么做。ggplot2真的没有内置函数??好奇怪。。。。
你用geom_segment()添加就行。
谢谢,geom_segment()是用来添加线的吧? 和我想的如同excel里自动添加回归线和回归方程、相关系数还是差别很大的,是我没搞懂segment的用法?