我试图在一个图上比较和对比x轴相似的四种关系之间的差异。
我似乎可以绘制回归线,但不知道如何绘制方程式和/或将所有四个图合并到一个图上。
这是我代码的基本基础:很抱歉,如果它非常基本或笨拙,我才刚刚开始。
library(ggplot2)
library(cowplot)
p1 <- ggplot(NganokeData, aes(x=Depth,y=LCU1)) + geom_point() +
labs(x ='Depths (cm)', y ='Density (Hu)', title = 'Density Regression of Lake Nganoke Core 1') +
ylim(1,2)
p2 <- ggplot(NganokeData, aes(x=Depth,y=LCU2)) + geom_point() +
labs(x ='Depths (cm)', y ='Density (Hu)', title = 'Density Regression of Lake Nganoke Core 2') +
ylim(1,2)
p3 <- ggplot(NganokeData, aes(x=Depth,y=LCU3)) + geom_point() +
labs(x ='Depths (cm)', y ='Density (Hu)', title = 'Density Regression of Lake Nganoke Core 3') +
ylim(1,2)
p4 <- ggplot(NganokeData, aes(x=Depth,y=LCU4)) + geom_point() +
labs(x ='Depths (cm)', y ='Density (Hu)', title = 'Density Regression of Lake Nganoke Core 4') +
ylim(1,2)
p3 + stat_smooth(method = "lm", formula = y ~ poly(x, 3), size = 1) #Adds polynomial regression
答案 0 :(得分:0)
看起来您在列名称中有一个感兴趣的变量(LCU1,LCU2,LCU3,LCU4)。您可以使用tidyr包中的collect来重塑数据框:
library(tidyr)
long_data <- gather(NganokeData, key = "core", value = "density",
LCU1, LCU2, LCU3, LCU4)
然后使用ggplot2软件包中的facet_grid将绘图分为所需的四个方面。
p <- ggplot(long_data, aes(x=Depth,y=density)) +
geom_point() +
labs(x ='Depths (cm)', y ='Density (Hu)',
title = 'Density Regression of Lake Nganoke Cores') +
ylim(1,2) +
facet_grid(rows = vars(core)) #can also use cols instead
p + stat_smooth(method = "lm", formula = y ~ poly(x, 3), size = 1)
您的代码很棒。但是,作为初学者,我强烈建议您花几分钟时间阅读和学习使用tidyr软件包,因为ggplot2是基于整洁数据的概念构建的,如果您可以操作可视化工具,将会发现使可视化变得容易得多。数据框,然后将其绘制成所需的格式。
https://tidyr.tidyverse.org/index.html
编辑:
要添加详细描述回归方程的注释,我从Jodie Burchell的博客文章中找到了代码:
但是,首先,您将无法使用公式中的poly函数收集可显示的回归方程式。正交多项式的优点是它们避免了共线性,但是缺点是您不再具有一个易于解释的回归方程,其中x和x平方且x立方作为回归变量。
所以我们必须将lm拟合公式更改为
y ~ poly(x, 3, raw = TRUE)
它将适合原始多项式,并为您提供您要寻找的回归方程。
由于我没有数据,因此您将不得不更改x和y位置值来确定在图形上的何处放置注释,但这是您需要的自定义函数:
equation = function(x) {
lm_coef <- list(a = round(coef(x)[1], digits = 2),
b = round(coef(x)[2], digits = 2),
c = round(coef(x)[3], digits = 2),
d = round(coef(x)[4], digits = 2),
r2 = round(summary(x)$r.squared, digits = 2));
lm_eq <- substitute(italic(y) == a + b %.% italic(x) + c %.% italic(x)^2 + d %.% italic(x)^3*","~~italic(R)^2~"="~r2,lm_coef)
as.character(as.expression(lm_eq));
}
然后只需将注释添加到绘图中,根据需要调整x和y参数,即可设置好:
p +
stat_smooth(method = "lm", formula = y ~ poly(x, 3, raw = TRUE), size = 1) +
annotate("text", x = 1, y = 10, label = equation(fit), parse = TRUE)