【发布时间】:2021-04-29 20:30:42
【问题描述】:
我正在处理一个建模问题,我必须使用特定变量估计每组的多个模型。在每组拥有所有模型之后,我需要计算所有模型的估计值(拟合值)和标准误差(se)。我发现我们可以为此使用broom 和dplyr。因此,我使用iris 数据勾勒了下一个代码:
library(dplyr)
library(broom)
#Data
data("iris")
#Code
iris2 <- iris %>% group_by(Species)
数据iris2 有一个基于Species 的组。有了这个,我使用下一个代码计算不同的模型:
#Models
models <- iris2 %>%
do(
model1 = lm(Sepal.Length~Sepal.Width, data = .),
model2 = lm(Sepal.Width~Petal.Width, data = .),
model3 = lm(Petal.Width~Sepal.Length+Sepal.Width, data = .),
model4 = lm(Petal.Width~Petal.Length+Sepal.Length, data = .))
产生:
models
# A tibble: 3 x 5
# Rowwise:
Species model1 model2 model3 model4
<fct> <list> <list> <list> <list>
1 setosa <lm> <lm> <lm> <lm>
2 versicolor <lm> <lm> <lm> <lm>
3 virginica <lm> <lm> <lm> <lm>
一切都很好。现在,我需要使用四个模型计算整个数据集iris2 的预测。我使用合并方法将模型添加到 iris2 数据框:
#Merge with original data
Merged <- iris2 %>%
left_join(models)
此时,数据包含所有模型,但我不确定如何继续计算拟合值和标准误差。最后,对于iris2 中的所有观察,我希望每个模型有两个额外的列,例如predict.mod1 和se.mod1 直到predict.mod4 和se.mod4。
这是我的主要问题,因为我不知道如何使用 predict() 来获取每个 model1、model2、model3 和 model4 来计算拟合值和 se 值。我知道我可以使用 predict() 和 predict(model,data,se=T)$$se.fit 来获取具有一个模型的隔离数据框中的值,但在这种情况下,我在合并操作后有多个模型。
我检查了网站上的一些帖子,他们使用mutate(result = map2(fit, data, predict)) 来创建估算值。我尝试了类似的方法,但没有奏效。
非常感谢您的帮助。
【问题讨论】:
-
@akrun 非常感谢先生,我是使用这些功能的新手。您能否提供一个适用于安装和 SE 的答案?国王问候!