r - 如何从 R 中列出的模型中提取参数?
问题描述
我正在尝试提取为我的工作设计的模型的参数,但在这样做时遇到了麻烦。我将使用 R 提供的虹膜数据作为示例数据集。
我拉入数据:
library(dplyr)
df <- iris
我设计了一个采用 Sepal Width 和 Length 的模型,并确定给定 Sepal Length 的最佳模型拟合来确定 Sepal Width (这可能是数据集的一个坏例子,我没有太注意起始参数,但我几乎可以肯定这不应该影响回答这个问题的难度)。为每个物种生产一个模型:
sepalmodel <- df %>%
group_by(Species) %>%
do(model = nls(Sepal.Width ~ a*exp(Sepal.Length*b), start = list(a = 0.5, b = 0.9), data = .)) %>%
ungroup()
这会生成一个数据框,其中一列是 Species,另一列是模型。在模型列中,每个模型在每一行中都由一个大列表表示,我无法从中提取其基本数据。我想直接使用参数,作为使用这些模型表示和生成数据的更干净和可重复的方式。如何从这些模型中提取 a 和 b 参数?有没有这样做的功能,还是我需要深入研究每个模型的代码?此外,该列表中是否有任何数据将其与特定物种相关联,或者它是否仅与在同一行中发现的物种直接相关?
解决方案
一种选择是使用broom::tidy
with tidyr::unnest
。
library(tidyverse)
iris %>%
group_by(Species) %>%
do(model = nls(Sepal.Width ~ a*exp(Sepal.Length*b), start = list(a = 0.5, b = 0.9), data = .)) %>%
ungroup() %>%
mutate(tidy_nls = lapply(model, broom::tidy)) %>%
unnest(tidy_nls)
#------
# A tibble: 6 x 7
Species model term estimate std.error statistic p.value
<fct> <list> <chr> <dbl> <dbl> <dbl> <dbl>
1 setosa <nls> a 1.07 0.162 6.58 3.23e- 8
2 setosa <nls> b 0.232 0.0299 7.76 5.12e-10
3 versicolor <nls> a 1.41 0.228 6.18 1.31e- 7
4 versicolor <nls> b 0.113 0.0269 4.21 1.11e- 4
5 virginica <nls> a 1.80 0.261 6.87 1.17e- 8
6 virginica <nls> b 0.0764 0.0218 3.51 9.97e- 4
推荐阅读
- version-control - 搁置或以其他方式保留 mercurial 的变化
- python - Python SMTP 连接超时
- ios - Xamarin Forms:与标签相比,当粘贴 RTL 文本时,编辑器在 iOS 上的行为很奇怪
- azure - 在单个 AKS 中托管多个 .Net Core 网站
- sql - 工作,但查询速度很慢 - 每隔 15 分钟报告三台服务器的数据
- python - 我应该如何减少正则表达式中的组数?
- javascript - 如何在 VueJs 中再次加载(重新加载)组件或销毁它并再次加载?
- javascript - 我们如何在 React Native 中使用 navigationOptions 将状态作为 props 传递给功能组件?
- php - 使用关系模型对数组的输出进行排序
- flutter - 颤振比较文本和文本字段