当前位置:首页 > 谈天说地

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

34资源网2022-09-09271

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 intercept

anova(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 ‘ ' 1

residual 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") + # upper
  geom_line(aes(y = predicted - ci), color = "red") + # lower
  theme_classic()

参考:
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 (知乎)

到此这篇关于r语言在散点图中添加lm线性回归公式的问题的文章就介绍到这了,更多相关r语言线性回归内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/21910.html

分享给朋友:

相关文章

好想你花开富贵大礼包多少钱一提?1236g优惠价只需要43.90元

好想你花开富贵大礼包多少钱一提?1236g优惠价只需要43.90元

好想你花开富贵大礼包多少钱一提?好想你,花开富贵礼盒1236g零食大礼包,原价58.90元,领取15元的优惠券减掉之后只需要43.90元,这个价格在近30日内属于最低价,喜欢这款商品的朋友不要错过哦。…

背光键盘怎么开灯(有背光和无背光的区别)

背光键盘怎么开灯(有背光和无背光的区别)

机械键盘轴体一直是以樱桃(Cherry)最受大众欢迎,但近几年国产轴体的快速发展,让很多玩家开始享受到更“廉价”的产品。作为国内外设领军者,雷柏自产的雷柏轴已经获得众多游戏爱好者的好评。雷柏同时还有采用经典樱桃轴的产品,笔者最近收到雷柏V8…

这4类项目,投资人打死都不想投

这4类项目,投资人打死都不想投

很多创业者常感慨:明明自己的项目很好,但聊了很多投资人,却没人愿意投,这是为什么呢? 我们知道融资成功的关键,在于要让投资人看到项目的价值。这个价值,不仅仅是你的项目好就行,除了项目本身,投资人还有很多关注点,如果这些地方不“达标”,投资人…

员工收入差距应该大还是小?

员工收入差距应该大还是小?

编者按:本文转自刘润公众号,口述刘润,编辑方雁橙,创业邦经授权转载。 很多创业者或管理者说,我小心翼翼平衡员工工资,尽量照顾业绩差的员工。结果员工离职率反而高了,人才密度降低了,团队的业绩也变差了。 还有一些HR,在招人时会尽量节省成本,薪…

元宇宙这把火开始烧向打工人

元宇宙这把火开始烧向打工人

编者按:本文转自螳螂观察,作者青月,创业邦经授权转载。 “躺平”时代,“摸鱼”已经成为了全网打工人的共识。 当代打工人的摸鱼指南包括:看小说、侃大山、吃零食、发展副业、在厕所里打游戏,“励志”一点的打工人,则借着摸鱼的时间拿下一本本职业资格…

联想之鉴,大厂“芯”领神会

联想之鉴,大厂“芯”领神会

编者按:本文转自光子星球,作者文烨豪,编辑吴先之,创业邦经授权转载。 近日,阿里云宣布,达摩院成功研发出存算一体芯片。腾讯造芯的波澜还未平复,阿里便再次出招,造芯似乎成为了互联网巨头们的新常态。 就拿2021年来说,百度宣布昆仑2芯片量产,…