在图中使用几种回归方法 [包含数据]
Purrring several regression methods in a plot [data included]
TL;DR
[
x 我正在为 tibble 中的每个物种绘制一个散点图,其中叠加了两种类型的回归。显示由树的直径预测的高度。
x nls
找到多个可能的 data
并且无法计算 geom_smooth
- 一个 tidyeval 错误?
x 我不确定如何使用 'map2' 的用户定义函数。
]
我的数据帧示例 train.data
作为 dput
输出附加在消息末尾。
我已将数据分成测试集 (20%) 和训练集 (80%)。我之前已经计算了线性和非线性模型的摘要,并绘制了预测值与估计值的关系图。但我想要一个带有估计模型(线性和非线性)曲线的图表,如果我理解正确,ggplot2
应该得出与 nls
和 lm
?在 tibble 中而不是在 data.frame 中包含偏移量(所有观察结果相同)的 tidyverse 方法将非常受欢迎。
首先,创建绘图函数来绘制地图。 NLS是红色,LM是蓝色。
double_mapper <- function(x, colname) {
ggplot(data = x, aes(x=dia, y=Height)) +
geom_point(shape=1) +
ggtitle(label = colname)+
theme_bw() +
theme(legend.title=element_blank(), axis.title = element_blank())+
geom_smooth(method="nls",
formula= Height ~ -1 +I(dia^2)/I((a+b*dia)^2),
method.args = list(offset=offset,
start = list(a=10, b=0.2), #Earlier study solution
se=F),
color="red")+
geom_smooth(method="lm",
formula= Height ~ -1 + dia,
method.args= list(offset=offset),
color="blue"
)
}
用嵌套物种创建一个 tibble 并为每个物种创建一个图表。
mixed_df_test <- train.data %>%
group_by(SPP) %>%
nest() %>%
mutate(graphs=map2(.x = data,.y = SPP, partial(double_mapper,
x= .x,
colname=.y)))
plots_model_mixed <- ggpubr::ggarrange(plotlist = mixed_df_test$graphs, common.legend=TRUE,legend = "top",ncol = 2,nrow = 4)
错误信息:
来自 map2
Error in (function (x, colname) : unused arguments (.x[[1]], .y[[1]])
来自 nls
Warning messages:
1: Computation failed in `stat_smooth()`:
parameters without starting value in 'data': Height, dia
dput of train.data:
structure(list(SPP = c("Abies sibirica", "Abies sibirica", "Abies sibirica",
"Abies sibirica", "Abies sibirica", "Pinus sylvestris", "Pinus sylvestris",
"Pinus sylvestris", "Pinus sylvestris", "Pinus sylvestris"),
Height = c(6, 7.6, 9.9, 6.2, 8.1, 8.3, 7.7, 8.2, 7.8, 9.6
), dia = c(74.4580418759451, 96.2808392152873, 115.995689575087,
84.4985206971104, 104.498803820905, 141.492049246592, 151.459565561241,
177.997190989072, 190.499343830891, 152), offset = c(1.3,
1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3)), row.names = c(NA,
-10L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), groups = structure(list(
SPP = c("Abies sibirica", "Pinus sylvestris"), .rows = list(
1:5, 6:10)), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE))
原始代码中存在一些问题。
1) 在 partial
之前你需要一个 ~
。实际上,在此示例中您不需要部分。
2) geom_smooth
中的公式中必须使用 x
和 y
而不是原始变量的名称。
3) 你需要告诉 ggplot 在哪里可以找到 offset
4) se
是 geom_smooth
的参数而不是 method.args
之一
double_mapper <- function(x, colname) {
ggplot(data = x, aes(x=dia, y=Height)) +
geom_point(shape=1) +
ggtitle(label = colname)+
theme_bw() +
theme(legend.title=element_blank(), axis.title = element_blank())+
geom_smooth(method="nls",
formula = y ~ -1 +I(x^2)/I((a+b*x)^2),
method.args = list(offset=x$offset,
start = list(a=10, b=0.2)), #Earlier study solution
se = FALSE,
color="red") +
geom_smooth(method="lm",
formula= y ~ -1 + x,
method.args= list(offset=x$offset),
color="blue"
)
}
mixed_df_test <- train.data %>%
group_by(SPP) %>%
nest() %>%
mutate(graphs=map2(.x = data,.y = SPP, ~double_mapper(
x= .x,
colname=.y)))
plots_model_mixed <- ggpubr::ggarrange(plotlist = mixed_df_test$graphs, common.legend=TRUE,legend = "top",ncol = 2,nrow = 4)
plots_model_mixed
我相当确定您可以使用分面而不是多图 - 这会使代码简单得多。我不确定如何指定偏移量(最好在图外拟合模型并在 data.frame.
中提供拟合值
如果 facets 不起作用,请查看 patchwork
包以了解组合图的简单方法。
TL;DR [
x 我正在为 tibble 中的每个物种绘制一个散点图,其中叠加了两种类型的回归。显示由树的直径预测的高度。
x nls
找到多个可能的 data
并且无法计算 geom_smooth
- 一个 tidyeval 错误?
x 我不确定如何使用 'map2' 的用户定义函数。
]
我的数据帧示例 train.data
作为 dput
输出附加在消息末尾。
我已将数据分成测试集 (20%) 和训练集 (80%)。我之前已经计算了线性和非线性模型的摘要,并绘制了预测值与估计值的关系图。但我想要一个带有估计模型(线性和非线性)曲线的图表,如果我理解正确,ggplot2
应该得出与 nls
和 lm
?在 tibble 中而不是在 data.frame 中包含偏移量(所有观察结果相同)的 tidyverse 方法将非常受欢迎。
首先,创建绘图函数来绘制地图。 NLS是红色,LM是蓝色。
double_mapper <- function(x, colname) {
ggplot(data = x, aes(x=dia, y=Height)) +
geom_point(shape=1) +
ggtitle(label = colname)+
theme_bw() +
theme(legend.title=element_blank(), axis.title = element_blank())+
geom_smooth(method="nls",
formula= Height ~ -1 +I(dia^2)/I((a+b*dia)^2),
method.args = list(offset=offset,
start = list(a=10, b=0.2), #Earlier study solution
se=F),
color="red")+
geom_smooth(method="lm",
formula= Height ~ -1 + dia,
method.args= list(offset=offset),
color="blue"
)
}
用嵌套物种创建一个 tibble 并为每个物种创建一个图表。
mixed_df_test <- train.data %>%
group_by(SPP) %>%
nest() %>%
mutate(graphs=map2(.x = data,.y = SPP, partial(double_mapper,
x= .x,
colname=.y)))
plots_model_mixed <- ggpubr::ggarrange(plotlist = mixed_df_test$graphs, common.legend=TRUE,legend = "top",ncol = 2,nrow = 4)
错误信息:
来自 map2
Error in (function (x, colname) : unused arguments (.x[[1]], .y[[1]])
来自 nls
Warning messages:
1: Computation failed in `stat_smooth()`:
parameters without starting value in 'data': Height, dia
dput of train.data:
structure(list(SPP = c("Abies sibirica", "Abies sibirica", "Abies sibirica",
"Abies sibirica", "Abies sibirica", "Pinus sylvestris", "Pinus sylvestris",
"Pinus sylvestris", "Pinus sylvestris", "Pinus sylvestris"),
Height = c(6, 7.6, 9.9, 6.2, 8.1, 8.3, 7.7, 8.2, 7.8, 9.6
), dia = c(74.4580418759451, 96.2808392152873, 115.995689575087,
84.4985206971104, 104.498803820905, 141.492049246592, 151.459565561241,
177.997190989072, 190.499343830891, 152), offset = c(1.3,
1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3)), row.names = c(NA,
-10L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), groups = structure(list(
SPP = c("Abies sibirica", "Pinus sylvestris"), .rows = list(
1:5, 6:10)), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE))
原始代码中存在一些问题。
1) 在 partial
之前你需要一个 ~
。实际上,在此示例中您不需要部分。
2) geom_smooth
中的公式中必须使用 x
和 y
而不是原始变量的名称。
3) 你需要告诉 ggplot 在哪里可以找到 offset
4) se
是 geom_smooth
的参数而不是 method.args
double_mapper <- function(x, colname) {
ggplot(data = x, aes(x=dia, y=Height)) +
geom_point(shape=1) +
ggtitle(label = colname)+
theme_bw() +
theme(legend.title=element_blank(), axis.title = element_blank())+
geom_smooth(method="nls",
formula = y ~ -1 +I(x^2)/I((a+b*x)^2),
method.args = list(offset=x$offset,
start = list(a=10, b=0.2)), #Earlier study solution
se = FALSE,
color="red") +
geom_smooth(method="lm",
formula= y ~ -1 + x,
method.args= list(offset=x$offset),
color="blue"
)
}
mixed_df_test <- train.data %>%
group_by(SPP) %>%
nest() %>%
mutate(graphs=map2(.x = data,.y = SPP, ~double_mapper(
x= .x,
colname=.y)))
plots_model_mixed <- ggpubr::ggarrange(plotlist = mixed_df_test$graphs, common.legend=TRUE,legend = "top",ncol = 2,nrow = 4)
plots_model_mixed
我相当确定您可以使用分面而不是多图 - 这会使代码简单得多。我不确定如何指定偏移量(最好在图外拟合模型并在 data.frame.
中提供拟合值如果 facets 不起作用,请查看 patchwork
包以了解组合图的简单方法。