通过使用中的R回归协变量循环(Looping through covariates in regre

2019-07-03 16:50发布

我试图运行96个回归,并将结果保存为96级不同的对象。 更为复杂的是,我想在模型协变量的一个下标也改变96倍。 我已经差不多解决了这个问题,但我已经很不幸碰了壁。 到目前为止的代码是,

for(i in 1:96){

  assign(paste("z.out", i,sep=""), lm(rMonExp_EGM~ TE_i + Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+
  Month10+Month11+Month12+Yrs_minus_2004 + 
  as.factor(LGA),data=Pokies))

}

这适用于创建对象面(例如我有z.out1 - z.out96),但我似乎无法得到的协标来改变。

我有96个名为变量TE_1,TE_2 ... TE_96中的数据集。 这样,上TE_下标,第“i”需要改变以对应于每个创建对象。 也就是说,z.out1应持该模型的结果:

z.out1 <- lm(rMonExp_EGM~ TE_1 + Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+
  Month10+Month11+Month12+Yrs_minus_2004 + as.factor(LGA),data=Pokies)

而z.out96应该是:

z.out96 <- lm(rMonExp_EGM~ TE_96+ Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+
  Month10+Month11+Month12+Yrs_minus_2004 + as.factor(LGA),data=Pokies)

希望这是有道理的。 我任何提示/建议表示感谢。

Answer 1:

我会把在列表中的结果,避免for loopassign语句

您可以使用组合reformulateupdate ,以创建公式

orig_formula <- MonExp_EGM~ Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+
 Month10+Month11+Month12+Yrs_minus_2004 + as.factor(LGA)


te_variables <- paste0('TE_', 1:96) 
# Or if you don't have a current version of R
# te_variables <- paste('TE', 1:96, sep = '_')  

 new_formula <- lapply(te_variables, function(x,orig = orig_formula) { 
    new <- reformulate(c(x,'.'))
    update(orig, new)})
 ## it works!    
new_formula[[1]]
## MonExp_EGM ~ TE_1 + Month2 + Month3 + Month4 + Month5 + Month6 + 
##   Month7 + Month8 + Month9 + Month10 + Month11 + Month12 + 
##   Yrs_minus_2004 + as.factor(LGA)
new_formula[[2]]
## MonExp_EGM ~ TE_2 + Month2 + Month3 + Month4 + Month5 + Month6 + 
## Month7 + Month8 + Month9 + Month10 + Month11 + Month12 + 
## Yrs_minus_2004 + as.factor(LGA)


models <- lapply(new_formula, lm, data = pokies)

现在应该在列表中96个元素models

你可以为它们命名,以反映您最初计划nnames

names(models) <- paste0('z.out', 1:96)
# or if you don't have a current version of R
# names(models) <-paste('z.out', 1:96 ,sep = '' )  

然后访问由单一模式

 models$z.out5

等等

或者创建所有车型的汇总

 summaries <- lapply(models, summary)

等等....

 # just the coefficients
 coefficients <- lapply(models, coef)

 # the table with coefficient estimates and standard.errors

 coef_tables <- apply(summaries, '[[', 'coefficients')


文章来源: Looping through covariates in regression using R