r - [R]-从嵌套列表(列表列)中提取模型系数

标签 r dataframe nested-lists

我正在关注 Many Models R for Data Science 书中的示例,用于生成单个多元线性回归模型。如下面可重现的示例所示,我的数据框由三列组成:id, val1, val2, val3, .我可以使用 map 拟合线性模型Hadley 的书中详述的功能。但是,我一直在努力从每个模型中提取系数并将这些值逐列添加回 my.list 内的数据框中。 .当前存储模型系数的方式使得调用我的代码的其他部分变得困难/麻烦。

到目前为止我想出的最好的方法是制作一个长度为 my.list 的列表。并通过迭代 my.list 中的每个数据帧来提取系数:Name1, Name2, Name3 .这意味着现在我的全局环境中有另一个列表和 coef.list不再包含因子 Name1, Name2, Name3来自 my.list ;这些现在已被替换为 [[1]], [[2]], [[3]] .

任何人都可以在使用多个模型时提出一种提取模型系数的“更干净”的方法吗?我的首选输出只是为每个系数创建一列:intercept, val1, val2 .这些列将出现在现有数据框中 Name1, Name2, Name3my.list这样我就可以使用 mutate直接在数据框上:

# reproducible example
set.seed(1363)
d1 <- data.frame(id=c("Name1", "Name2", "Name3"),
             val1=c(rnorm(n=15, mean=5)), 
             val2=c(rnorm(n=15, mean=3)), 
             val3=c(rnorm(n=15, mean=8)))

# linear model function
lm.fun <- function(df){
  lm(val3 ~ val1+val2, data = df)
}

# map lm function
d1 <- d1 %>%
  group_by(id) %>%
  nest() %>%
  mutate(model = map(data, lm.fun)) %>%
  unnest(data, .drop = FALSE)

#split data frame by 'id' and convert into list
my.list <- split(d1, d1$id)

# make list of coefficients
coef.list <- list(length(my.list))
for (i in seq_along(my.list)) {
  coef.list[[i]] <- my.list[[i]][["model"]][[1]][["coefficients"]]
}

>head(coef.list, n=1)
[[1]]
(Intercept)        val1        val2 
9.03278337 -0.07096932  0.02119088 

期望输出
my.list$Name1
id    val1  val2  val3  intc  coef1  coef2
Name1  1      2    3    9.03  -.070  .021   
Name1  3      1    5    9.03  -.070  .021
Name1  2      6    8    9.03  -.070  .021  

最佳答案

使用 sapply ,给定数据 d1 (包含 model 列):

coeff <- sapply(d1$model, function(x) return(coefficients(x)))

library(dplyr)
bind_cols(d1, data.frame(t(coeff))) %>% 
     rename_at(6:8, ~ c("intc",  "coef1",  "coef2")) %>% 
          distinct(id, .keep_all = TRUE)

关于r - [R]-从嵌套列表(列表列)中提取模型系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181888/

相关文章:

firebase - Flutter:如何在Flutter中创建嵌套对象以存储在Cloud Firestore中

Java getRuntime.exec() - 错误流中的 "Fatal error: no such file or directory"(无异常(exception))

r - 如何改进跳过两个单词之一的正则表达式?

r - 双重合并r中的两个数据帧

python - 使用 Python 的 panda.Dataframe 对多传感器时间序列数据进行子采样

java - 将list1添加到list2并更新list1而不影响list2

r - 如何有效地将所有光栅文件导入 R?

r - 如何从R中的随机森林中提取if-then规则?

r - 如何根据 R 中的向量从 data.frame 中提取值?

Python::NLTK 连接句子列表