我有 10 个不同的回归模型,称为“regression1”、“regression2”等,以及它们相应的称为“standarderrors1”、“standarderrors2”等的标准错误。对于每个模型,我试图创建一个仅包含使用循环使用以下公式计算系数和置信区间:
for(i in 1:10){
betas <- regression[[i]]$coefficients
upper_bound <- betas + z_score*standerrors[[i]]
lower_bound <- betas - z_score*standerrors[[i]]
assign(paste0("DF",i), data.frame(betas))
assign(paste0("plot",i))$upper <- upper_bound
assign(paste0("plot",i))$lower <- lower_bound}
这第一部分运行良好,但我正在努力使用循环来创建新的数据框并添加变量,因为我不断收到错误“赋值目标扩展为非语言对象”。
关于如何使用循环创建 10 个新数据帧的任何帮助将不胜感激。
非常感谢!
答案 0 :(得分:2)
按照 Anoushiravan R 的建议,获得一些数据将帮助人们帮助您找到最佳解决方案,这可能需要例如数据重塑。此外,正如 Ronak Shah 所建议的,使用列表可能会更加整洁和高效。这是一个基于包 tidy
中的 broom
函数并使用包 map
中的 purrr
函数的解决方案(我正在加载所有 tidyverse 包)。< /p>
library(tidyverse)
library(broom)
models <- list(
m1 <- lm(Petal.Width ~ Sepal.Width, data=iris),
m2 <- lm(Petal.Length ~ Sepal.Length, data=iris)
)
dfs <- map(models, ~tidy(.x)) %>%
map(~mutate(.x, lci = estimate-1.96*std.error, uci = estimate+1.96*std.error))
现在您有一个列表 dfs
,其中包含每个模型的数据框。
答案 1 :(得分:1)
您可以尝试以下操作-
for(i in 1:10){
betas <- regression[[i]]$coefficients
upper_bound <- betas + z_score*standerrors[[i]]
lower_bound <- betas - z_score*standerrors[[i]]
assign(paste0("DF",i), data.frame(betas))
assign(paste0("plot",i), data.frame(upper = upper_bound, lower = lower_bound))
}
但是,请注意,在全局环境中创建大量数据框并不是一个好习惯。它们难以管理并污染全球环境。考虑改用列表。