R 在 ggplot 键中显示不同的回归线
R showing different regression lines in a ggplot key
我试图在同一坐标平面上绘制不同的简单线性回归估计值,以了解不同方法之间的一些差异。但我的问题是关于在 R 代码中添加这些行,而不是关于差异行的统计信息。
这里我使用的是 mtcars 数据集。我正在使用 mblm
和 quantreq
包来得出不同的回归方程,或者更具体地说,是不同简单线性回归估计的斜率和截距参数。
我使用 geom_smooth()
函数并指定 method
参数添加的 OLS 估计。在创建线性模型对象后,我可以使用 geom_abline() 添加斜率和截距;那是另一种选择。
Theil-Sen 和中值最小二乘偏差估计我首先使用各自的包为每个创建一个模型。然后我使用 geom_abline()
.
添加斜率和截距
现在我已经手动添加了这些行。但是我怎样才能在 ggplot
中创建一个键或图例来显示这些不同的行呢? ggplot()
在geom_smooth()
分群时自动添加密钥。但我不认为它为 geom_abline 添加了图例。无论如何,我的情节混合使用了两者。有任何想法吗?我从来没有用这种方式添加更多自己的密钥。
library(mblm)
ts_fit <- mblm(mpg ~ wt, data = mtcars)
library(quantreg)
lad_fit <- rq(mpg ~ wt, data = mtcars)
ggplot(mtcars, aes(x = wt, y = mpg)) +
labs(subtitle = "Simple Linear Regressions") +
geom_point() +
geom_smooth(method = 'lm', se = FALSE, color = '#376795') +
geom_abline(intercept = coef(ts_fit)[1], slope = coef(ts_fit)[2], color = '#f7aa58', size = 1) +
geom_abline(intercept = coef(lad_fit)[1], slope = coef(lad_fit)[2], color = '#72bcd5', size = 1)
我不会为每个模型添加一个单独的 geom,而是创建一个包含所有模型的截距和斜率的数据框。然后你可以将它传递给单个 geom_abline()
并将 color
映射到不同的模型。
注意,我没有安装 {mblm} 或 {quantreg},所以我 运行 lm()
在 mtcars
的不同子集上作为近似值。
library(tidyverse)
# create dataframe with model coefficients
models <- data.frame(
lm = coef(lm(mpg ~ wt, data = mtcars[1:20,])),
ts = coef(lm(mpg ~ wt, data = mtcars[7:26,])),
lad = coef(lm(mpg ~ wt, data = mtcars[11:32,]))
) %>%
t() %>%
as_tibble(rownames = "model") %>%
rename_with(~ c("model", "intercept", "slope"))
models
# # A tibble: 3 x 3
# model intercept slope
# <chr> <dbl> <dbl>
# 1 lm 38.5 -5.41
# 2 ts 38.9 -5.59
# 3 lad 37.6 -5.41
# specify ggplot, passing `mtcars` to `geom_point()` and `models` to `geom_abline()`
ggplot() +
labs(subtitle = "Simple Linear Regressions") +
geom_point(data = mtcars, aes(wt, mpg)) +
geom_abline(
data = models,
aes(intercept = intercept, slope = slope, color = model),
size = 1
)
我试图在同一坐标平面上绘制不同的简单线性回归估计值,以了解不同方法之间的一些差异。但我的问题是关于在 R 代码中添加这些行,而不是关于差异行的统计信息。
这里我使用的是 mtcars 数据集。我正在使用 mblm
和 quantreq
包来得出不同的回归方程,或者更具体地说,是不同简单线性回归估计的斜率和截距参数。
我使用 geom_smooth()
函数并指定 method
参数添加的 OLS 估计。在创建线性模型对象后,我可以使用 geom_abline() 添加斜率和截距;那是另一种选择。
Theil-Sen 和中值最小二乘偏差估计我首先使用各自的包为每个创建一个模型。然后我使用 geom_abline()
.
现在我已经手动添加了这些行。但是我怎样才能在 ggplot
中创建一个键或图例来显示这些不同的行呢? ggplot()
在geom_smooth()
分群时自动添加密钥。但我不认为它为 geom_abline 添加了图例。无论如何,我的情节混合使用了两者。有任何想法吗?我从来没有用这种方式添加更多自己的密钥。
library(mblm)
ts_fit <- mblm(mpg ~ wt, data = mtcars)
library(quantreg)
lad_fit <- rq(mpg ~ wt, data = mtcars)
ggplot(mtcars, aes(x = wt, y = mpg)) +
labs(subtitle = "Simple Linear Regressions") +
geom_point() +
geom_smooth(method = 'lm', se = FALSE, color = '#376795') +
geom_abline(intercept = coef(ts_fit)[1], slope = coef(ts_fit)[2], color = '#f7aa58', size = 1) +
geom_abline(intercept = coef(lad_fit)[1], slope = coef(lad_fit)[2], color = '#72bcd5', size = 1)
我不会为每个模型添加一个单独的 geom,而是创建一个包含所有模型的截距和斜率的数据框。然后你可以将它传递给单个 geom_abline()
并将 color
映射到不同的模型。
注意,我没有安装 {mblm} 或 {quantreg},所以我 运行 lm()
在 mtcars
的不同子集上作为近似值。
library(tidyverse)
# create dataframe with model coefficients
models <- data.frame(
lm = coef(lm(mpg ~ wt, data = mtcars[1:20,])),
ts = coef(lm(mpg ~ wt, data = mtcars[7:26,])),
lad = coef(lm(mpg ~ wt, data = mtcars[11:32,]))
) %>%
t() %>%
as_tibble(rownames = "model") %>%
rename_with(~ c("model", "intercept", "slope"))
models
# # A tibble: 3 x 3
# model intercept slope
# <chr> <dbl> <dbl>
# 1 lm 38.5 -5.41
# 2 ts 38.9 -5.59
# 3 lad 37.6 -5.41
# specify ggplot, passing `mtcars` to `geom_point()` and `models` to `geom_abline()`
ggplot() +
labs(subtitle = "Simple Linear Regressions") +
geom_point(data = mtcars, aes(wt, mpg)) +
geom_abline(
data = models,
aes(intercept = intercept, slope = slope, color = model),
size = 1
)