我想循环浏览许多模型并输出系数
基本上,我想做下面的代码。但是,然后引用生成的列表中的每个对象,其中包含每个模型的对象列表以及model语句生成的数据对象。
所以下面是我想要的系数示例
library(broom)
library(tidyr)
library(dplyr)
library(nnet)
db<-mtcars
modelmpg<-multinom(cyl ~ vs + carb+ mpg, data = db)
modelmpg <- tidy(modelmpg, exponentiate = T)
modelmpg1 <- modelmpg[-5]
modelmpg2 <- reshape2::melt(modelmpg1, id=(c("y.level", "term")))
modelmpg3 <- spread(modelmpg2, y.level, value )
modelmpg3$term[modelmpg3$variable %in% c("std.error", "p.value")] <- ""
[现在说,我想对所有变量进行处理,并为vs,carb和第三个变量i(这是在已确定的变量列表中确定的变量之一)的每种组合运行模型
#create varlist
varlist.iv <- c("mpg", "disp", "drat", "wt")
#create a list of the results for each multinomial log regression
models <- lapply(varlist.iv , function(x) {multinom(substitute(cyl ~ vs + carb + i ,list(i = as.name(x))), data = db)})
这里是一切都崩溃的地方。我尝试在模型列表中将模型中的系数称为[[i]]。并且它不识别它。我也尝试过[[i]] [[3]],我认为这意味着列表中第i个对象的第三个对象是模型?参见下文(代码不起作用,但显示了我要执行的操作)
#Run a loop for each of the data manipulation steps
for (i in models){
mod <- tidy(mod1[[i]], exponentiate = T)
mod[,paste0(i,"1")] <- mod
aa = paste0(i,"1")
mod[,paste0(aa,"2")] <- aa[-5]
基本上是尝试复制代码的第一块,但对于varlist.iv中的所有i变量都处于循环中
有人可以帮我吗?循环方面的一些帮助将非常有用,但可以帮助我理解如何识别哪个对象在哪个列表中,这对我确实有帮助。我已经阅读了帮助文档,但是我一定会误会它。
使用reformulate
动态创建公式并将所有内容放入函数中
apply_fun <- function(col, data) {
modelmpg<- nnet::multinom(reformulate(c('vs', 'carb', col), 'cyl'), data = data)
modelmpg <- broom::tidy(modelmpg, exponentiate = T)
modelmpg1 <- modelmpg[-5]
modelmpg2 <- reshape2::melt(modelmpg1, id=(c("y.level", "term")))
modelmpg3 <- tidyr::spread(modelmpg2, y.level, value )
modelmpg3$term[modelmpg3$variable %in% c("std.error", "p.value")] <- ""
modelmpg3
}
使用lapply
将其应用于每个varlist.iv
lapply(varlist.iv, apply_fun, data = db)
#[[1]]
# term variable 6 8
#1 (Intercept) estimate 1.113636e+36 4.403167e+62
#2 std.error 9.005444e+01 1.055447e+02
#3 p.value 3.566995e-01 1.717352e-01
#4 carb estimate 2.347367e-01 3.671800e-02
#5 std.error 2.798606e+00 3.669880e+00
#6 p.value 6.045548e-01 3.678889e-01
#7 mpg estimate 3.267209e-02 2.018146e-03
#8 std.error 3.798023e+00 4.566156e+00
#9 p.value 3.676982e-01 1.741347e-01
#10 vs estimate 2.157612e-04 1.245287e-12
#11 std.error 1.188903e+01 1.471332e+02
#12 p.value 4.776976e-01 8.522056e-01
#[[2]]
# term variable 6 8
#1 (Intercept) estimate 8.958256e-20 1.550393e-30
#2 std.error 8.886837e+01 1.147019e+02
#3 p.value 6.216388e-01 5.495648e-01
#4 carb estimate 8.551950e+01 9.671903e+00
#...