r - 如何使用 GGplot2 在 R 中的同一个图上绘制两个独立的线性回归?

标签 r ggplot2 linear-regression

我试图在同一个图上呈现两个数据集的线性回归。

  • 鸟类数据与年份
  • Signy 数据与年份 由于它们是互斥的(计算来自两个岛屿的数据),我不想绘制多重回归,但我不确定 R 中的代码是否能在同一个图上生成两个回归。

PlasticMass.data

  ï..Year |Bird.Plastic.Mass Signy.Plastic.Mass
1     1991 |             NA   |           2.384
2     1992 |             NA   |           8.340
3     1993 |             NA   |           2.680
4     1994 |             NA   |           1.450
5     1995 |             NA   |           1.940
6     1996 |             6.43 |           0.570
7     1997 |             19.86|           1.170
8     1998 |             4.89 |           2.010
9     1999 |             2.97 |           1.410
10    2000 |             3.10 |           1.690
11    2001 |             3.30 |           0.350
12    2002 |             4.45 |           9.280
13    2003 |             4.05 |           16.750
14    2004 |             2.18 |           4.330
15    2005 |             4.88 |           0.260
16    2006 |             4.39 |           13.500
17    2007 |             4.27 |           6.270
18    2008 |             4.40 |           9.030
19    2009 |             1.63 |           3.860
20    2010 |             1.70 |           22.100
21    2011 |             1.64 |           1.150
22    2012 |             2.16 |           13.080
23    2013 |             3.05 |           0.140
24    2014 |             1.34 |           0.010
25    2015 |             3.66 |           0.000
26    2016 |             0.87 |           0.000
27    2017 |             1.10 |           7.010
28    2018 |             2.29 |           1.740
29    2019 |             1.44 |           80.790

绘制个体回归的 R 代码: 质量塑料线性回归

PlasticMass.data <-read.csv("Plastic by Mass.csv", header = T)
print(Plastic.Mass.data)

modelPB <-lm(Bird.Plastic.Mass ~ï..Year, data= PlasticMass.data)

modelPS <-lm(Signy.Plastic.Mass ~ï..Year, data = PlasticMass.data)

ggplot(PlasticMass.data, aes(ï..Year, Bird.Plastic.Mass))+
geom_point()+
geom_smooth(method = "lm")+
labs(x="Year", y="Bird Island Total Debris Count")


ggplot(PlasticMass.data, aes(ï..Year, Signy.Plastic.Mass))+
geom_point()+
geom_smooth(method = "lm", colour ="lightgreen")+
labs(x="Year", y="Signy Island Total Debris Count")

这里是一个链接,显示我在 Excel 上制作的回归图(其中绘制了两个数据集并显示了单独的线性回归)。

Regressions in excel

最佳答案

方法

透视到更长的时间,使用组映射将透视组映射到 lm

代码

  library(dplyr)
    library(tidyr)
    library(ggplot2)
    df %>% 
      mutate(Bird.Plastic.Mass = as.numeric(trimws(Bird.Plastic.Mass)),
    Year = factor(Year))%>% 
      na.omit() %>% 
      pivot_longer(cols = Bird.Plastic.Mass:Signy.Plastic.Mass, names_to = "var", values_to="val") %>% 
      ggplot(aes(Year, val, col=var, group=var))+
      geom_point() +

  geom_smooth(method="lm")

结果(与 Excel 绘图不完全相同,可能是由于数据较少)

enter image description here

数据

df <- structure(list(Year = c("1     1991 ", "2     1992 ", "3     1993 ", 
"4     1994 ", "5     1995 ", "6     1996 ", "7     1997 ", "8     1998 ", 
"9     1999 ", "10    2000 ", "11    2001 ", "12    2002 ", "13    2003 ", 
"14    2004 ", "15    2005 ", "16    2006 ", "17    2007 ", "18    2008 ", 
"19    2009 ", "20    2010 ", "21    2011 ", "22    2012 ", "23    2013 ", 
"24    2014 ", "25    2015 ", "26    2016 ", "27    2017 ", "28    2018 ", 
"29    2019 "), Bird.Plastic.Mass = c("             NA   ", "             NA   ", 
"             NA   ", "             NA   ", "             NA   ", 
"             6.43 ", "             19.86", "             4.89 ", 
"             2.97 ", "             3.10 ", "             3.30 ", 
"             4.45 ", "             4.05 ", "             2.18 ", 
"             4.88 ", "             4.39 ", "             4.27 ", 
"             4.40 ", "             1.63 ", "             1.70 ", 
"             1.64 ", "             2.16 ", "             3.05 ", 
"             1.34 ", "             3.66 ", "             0.87 ", 
"             1.10 ", "             2.29 ", "             1.44 "
), Signy.Plastic.Mass = c(2.384, 8.34, 2.68, 1.45, 1.94, 0.57, 
1.17, 2.01, 1.41, 1.69, 0.35, 9.28, 16.75, 4.33, 0.26, 13.5, 
6.27, 9.03, 3.86, 22.1, 1.15, 13.08, 0.14, 0.01, 0, 0, 7.01, 
1.74, 80.79)), class = "data.frame", row.names = c(NA, -29L))

关于r - 如何使用 GGplot2 在 R 中的同一个图上绘制两个独立的线性回归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71006220/

相关文章:

python - 绘制 Pandas OLS 线性回归结果

r - DiagrammeR:调整节点内的字体大小

正则表达式用于仅提取R中字符串中的字母和数字

r - 如何将 span bin 信息转换为单独的 bins?

r - 在不使用 coord_flip() 的情况下在 R 中绘制翻转的正态分布

r - 在ggplot2中,当我们使用nudge_y时,偏移距离是如何计算的?

r - 如何在ggplot2的右侧放置转换的比例?

r - 使用 `ggplot2` 使用另一条具有相同位置但在 `geom_curve` 中剪切开头和结尾的曲线来重叠曲线

python - StatsModels:返回没有截距的线性回归的预测区间

r - 在 R 的回归线上获得一点的置信区间?