R语言在散点图中添加lm线性回归公式

  • 1. 简单的线性回归
  • 2. 使用ggplot2展示
  • 3. 提取线性回归p值

1. 简单的线性回归

函数自带的例子(R 中键入?lm),lm(y ~ x)回归y=kx + blm( y ~ x -1 )省略b,不对截距进行估计

require(graphics)## Annette Dobson (1990) "An Introduction to Generalized Linear Models".
## Page 9: Plant Weight Data.
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
lm.D90 <- lm(weight ~ group - 1) # omitting interceptanova(lm.D9)
summary(lm.D90)opar <- par(mfrow = c(2,2), oma = c(0, 0, 1.1, 0))
plot(lm.D9, las = 1)      # Residuals, Fitted, ...
par(opar)

使用R中自带的mtcars数据,可以得到截距和斜率,也可以得到解释率R-square:

require(ggplot2)
library(dplyr) #加载dplyr包
library(ggpmisc) #加载ggpmisc包
library(ggpubr)
require(gridExtra)
model=lm(mtcars$wt ~ mtcars$mpg)
model
## 输出:
Call:
lm(formula = mtcars$wt ~ mtcars$mpg)Coefficients:
(Intercept)   mtcars$mpg  6.047       -0.141```
```handlebars
summary(model)## 输出:
Call:
lm(formula = mtcars$wt ~ mtcars$mpg)Residuals:Min     1Q Median     3Q    Max
-0.652 -0.349 -0.138  0.319  1.368 Coefficients:Estimate Std. Error t value Pr(>|t|)
(Intercept)   6.0473     0.3087   19.59  < 2e-16 ***
mtcars$mpg   -0.1409     0.0147   -9.56  1.3e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 0.494 on 30 degrees of freedom
Multiple R-squared:  0.753, Adjusted R-squared:  0.745
F-statistic: 91.4 on 1 and 30 DF,  p-value: 1.29e-10

提取回归R-square值:

通过summary提取:
## 上面的例子## mtcars例子
model=lm(mtcars$wt ~ mtcars$mpg)
res=summary(model)
str(res)
## 提取各个值:
res$r.squared
res$coefficients
res$adj.r.squared  ## df 矫正后的结果
res$coefficients[1,1]
res$coefficients[2,1]

使用默认的plot绘制回归散点:

plot(mtcars$mpg, mtcars$wt, pch=20,cex=2)
abline(model,col="red",lwd=2)


计算Confidence interval(95%):

test=mtcars[c("mpg","wt")]
head(test)
colnames(test)=c("x","y")
model = lm(y ~ x, test)test$predicted = predict(object = model,newdata = test)test$CI = predict(object = model,newdata = test,se.fit = TRUE
)$se.fit * qt(1 - (1-0.95)/2, nrow(test))test$predicted = predict(object = model,newdata = test)test$CI_u=test$predicted+test$CI
test$CI_l=test$predicted-test$CI
plot(mtcars$mpg, mtcars$wt, pch=20,cex=1) ##  have replicated x values
abline(model,col="red",lwd=2)
lines(x=test$x,y=test$CI_u,col="blue")
lines(x=test$x,y=test$CI_l,col="blue")


上面的图蓝线有点奇怪,简单绘制最初的plot:

plot(mtcars$mpg, mtcars$wt, pch=20,cex=1,type="b") ##  have replicated x values


实际上面的计算方法没问题,但是数据不合适,因为数据x含有重复值,所以要考虑这个。

2. 使用ggplot2展示

ggplot2例子:

p <- ggplot(df, aes(x=yreal, y=ypred)) +geom_point(color = "grey20",size = 1, alpha = 0.8)
#回归线
#添加回归曲线
p2 <- p + geom_smooth(formula = y ~ x, color = "red",fill = "blue", method = "lm",se = T, level=0.95) +theme_bw() +stat_poly_eq(aes(label = paste(..eq.label.., ..adj.rr.label.., sep = '~~~')),formula = y ~ x,  parse = TRUE,color="blue",size = 5, #公式字体大小label.x = 0.05,  #位置 ,0-1之间的比例label.y = 0.95) + labs(title="test",x="Real Value (Huang Huaihai 1777)" , y="Predicted Value (Correlation: 0.5029)")
p2

ggplot版本的手动计算:

require(ggplot2)
library(dplyr) #加载dplyr包
library(ggpmisc) #加载ggpmisc包
library(ggpubr)
require(gridExtra)
ggplot(data=df, aes(x=yreal, y=ypred)) +geom_smooth(formula = y ~ x, color = "blue",fill = "grey10", method = "lm")  +geom_point() +stat_regline_equation(label.x=0.1, label.y=-1.5) +stat_cor(aes(label=..rr.label..), label.x=0.1, label.y=-2)test=df
head(test)
colnames(test)=c("x","y")
model = lm(y ~ x, test)
test$predicted = predict(object = model,newdata = test)test$CI = predict(object = model,newdata = test,se.fit = TRUE
)$se.fit * qt(1 - (1-0.95)/2, nrow(test))ggplot(test) +aes(x = x, y = y) +geom_point(size = 1,colour="grey40") +geom_smooth(formula =y ~ x,method = "lm",  fullrange = TRUE, color = "black") +geom_line(aes(y = predicted + CI), color = "blue") + # uppergeom_line(aes(y = predicted - CI), color = "red") + # lowertheme_classic()

3. 提取线性回归p值

函数提取 pvalue

fit=lm(df$ypred ~ df$yreal)
fitted=summary(fit)
## get p
lmp <- function (modelobject) {if (class(modelobject) != "lm") stop("Not an object of class 'lm' ")f <- summary(modelobject)$fstatisticp <- pf(f[1],f[2],f[3],lower.tail=F)attributes(p) <- NULLreturn(p)
}
pval=lmp(fit)

一元和多元线性提取一样:

## multiple regression (多元回归)
td=mtcars[c("mpg","wt","drat","disp")]
t=lm(td$wt ~ td$mpg + td$drat + td$disp)
mod_summary=summary(t)
mod_summary$fstatistic
mod_summary$coefficients##
pf(mod_summary$fstatistic[1],              # Applying pf() functionmod_summary$fstatistic[2],mod_summary$fstatistic[3],lower.tail = FALSE)
# value
# 2.718e-11# simple regression(一元回归)
t2=lm(td$wt ~ td$mpg)
mod2_summary=summary(t2)
mod2_summary
pf(mod2_summary$fstatistic[1],              # Applying pf() functionmod2_summary$fstatistic[2],mod2_summary$fstatistic[3],lower.tail = FALSE)

参考:
https://stackoverflow.com/questions/23519224/extract-r-square-value-with-r-in-linear-models (提取R2)
https://blog.csdn.net/LeaningR/article/details/118971000 (提取R2等)
https://stackoverflow.com/questions/45742987/how-is-level-used-to-generate-the-confidence-interval-in-geom-smooth (添加lm线)
https://zhuanlan.zhihu.com/p/131604431 (知乎)

https://statisticsglobe.com/extract-standard-error-t-and-p-value-from-regression-in-r (提取p值)

R语言在散点图中添加lm线性回归公式相关推荐

  1. R语言向图像中添加LaTeX风格数学公式

    文章目录 一.添加数学公式 二.在表达式中代入变量的值 一.添加数学公式 使用 R 语言自带的 text 函数即可,用法如下: text(x, y, expression(...)) 其中函数 exp ...

  2. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、可视化散点图并添加简单线性回归直线、添加模型拟合值数据点、添加拟合值点和实际数据点之间的线段表示残差大小、col参数自定义设置

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.可视化散点图并添加简单线性回归直线.添加模型拟合值数据点.添加拟合

  3. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、可视化散点图并添加简单线性回归直线、添加模型拟合值数据点、自定义pch参数设置数据点形式

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.可视化散点图并添加简单线性回归直线.添加模型拟合值数据点.自定义pch参数设置数据点形式 目录

  4. R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙

    R语言可视化散点图(scatter plot)图.为图中的部分数据点添加标签.ggrepel包来帮忙 目录

  5. R语言plotly可视化:plotly可视化在散点图中添加误差条(Scatterplot with Error Bars with plotly in R)

    R语言plotly可视化:plotly可视化在散点图中添加误差条(Scatterplot with Error Bars with plotly in R) 目录 R语言

  6. R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots)、在3D散点图中添加垂直线和数据点描影、3D图中添加回归平面

    R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots).在3D散点图中添加垂直线和数据点描影.3D图中添加回归平面(overlaid ...

  7. R语言可视化散点图、气泡图、动态气泡图、数据点重合的散点图、数据点计数图、抖动数据点图、基于lm方法或者loess方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注

    R语言可视化散点图.气泡图.动态气泡图.数据点重合的散点图.数据点计数图.抖动数据点图.基于

  8. R语言可视化散点图(scatter plot)、并在散点图中叠加回归曲线、叠加lowess拟合曲线(linear and lowess fit lines)、使用plot、line、abline函数

    R语言可视化散点图(scatter plot).并在散点图中叠加回归曲线.叠加lowess拟合曲线(linear and lowess fit lines).使用plot函数.line函数和ablin ...

  9. R语言text函数在R原生可视化结果中添加文本标签、内容:指定文本显示的位置、颜色、字体大小等(Position、Change Color 、 Size of Text)

    R语言text函数在R原生可视化结果中添加文本标签.内容:指定文本显示的位置.颜色.字体大小等(Position.Change Color . Size of Text) 目录

最新文章

  1. GDCM:创建DICOMDIR的测试程序
  2. 【已解决】github中git push origin master出错:error: failed to push some refs to(亲测)
  3. Go语言与数据库开发:01-09
  4. SAFEARRAY使用方法示例
  5. 登录自动填密码php,192 实现自动登录无限路由器后台管理网页,可以记住自己输入的密码 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
  6. 数据同步工具otter(二)
  7. java简单封装FusionChartsFree.
  8. python全套视频免费教程_《python免费视频教程33》 请问谁有靠谱的Python全套视频教程,求推荐分享...
  9. oracle中insert语句怎,Oracle中Insert语句的总结
  10. 深度强化学习之A3C网络—理论及代码(小车上山)
  11. GB2312编码的字符串如何转换为ISO-8859-1编码?
  12. linux嵌入式主要学什么软件,嵌入式软件工程师需要学什么?嵌入式Linux开发的工作内容...
  13. message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,或配置 project.config.json 的 packNpmMa
  14. osgEarth示例分析——osgearth_graticule
  15. 【工程光学】几何光学基本定律成像概念
  16. COMP0037 Coursework
  17. Shell脚本中获取命令运行结果、特殊变量使用、条件判断等常用操作
  18. 腾讯AI Lab「王者绝悟」亮相世界人工智能大会,展现「AI+游戏」全新可能
  19. 2022年证券从业资格证券市场基本法律法规考试每日一练及答案
  20. 各个版本的 Mac OS U盘终端制作命令

热门文章

  1. 艾泰路由器端口镜像配置
  2. EFCore 从入门到精通-8(再谈映射关系)
  3. iOS 设置系统UINavigationBar返回按键不显示上一界面的标题。
  4. reverseFind()
  5. SSM 整合详细步骤与配置(纯注解)
  6. 前 Google 工程师出书了!(全彩版)
  7. 小米mix2s与华为P20谁更值得购买?
  8. 周鸿祎闭关3个月之后发言:我没老,我要做互联网圈鲨鱼!
  9. 大话西游手游服务器维护不能聊天,大话西游手游聊天系统玩法指南
  10. 了解undertow容器