无法更新循环中的模型而不覆盖术语R

无法更新循环中的模型而不覆盖术语R,r,for-loop,model,R,For Loop,Model,我正在用R编写一个函数,该函数将基于mgcv库拟合广义相加模型。本质上,我想用x加上任意数量的用户指定的协变量来建模y。由于协变量的数量会有所不同,我想我可以创建一个y~x的基本模型,然后用每个额外的协变量更新模型,直到我用完术语 问题在于每次迭代都会覆盖先前的协变量,即模型不是在添加项,而是在替换项。下面的代码应该解释得更好一些 library(mgcv) x <- 1:100 y <- x^3 + rnorm(100) ## Create two covariates covar

我正在用R编写一个函数,该函数将基于mgcv库拟合广义相加模型。本质上,我想用x加上任意数量的用户指定的协变量来建模y。由于协变量的数量会有所不同,我想我可以创建一个y~x的基本模型,然后用每个额外的协变量更新模型,直到我用完术语

问题在于每次迭代都会覆盖先前的协变量,即模型不是在添加项,而是在替换项。下面的代码应该解释得更好一些

library(mgcv)
x <- 1:100
y <- x^3 + rnorm(100)
## Create two covariates
covar1 <- sample(0:1, 100, replace=T)
covar2 <- sample(0:1, 100, replace=T)
## Create data frame (this is what the user of function would supply)
covariates <- data.frame(covar1, covar2)
## Create basic model
model <- gam(y ~ s(x))

## Add terms to model until all covariates are added
m <- 1
while(m <= ncol(covariates))
{
  model <- update(model, . ~ . + covariates[,m])
  ## Oh no, model has been overwritten in second iteration
  print(summary(model))
  m<-m+1
}

如何在不覆盖的情况下,将每个术语(最好是通过协变量名称)添加到模型中?从我的阅读中,我相信anova.gam返回的p值类似于III型anova,因此添加术语的顺序无关紧要。

model.updated,但当从第一个协变量到第二个协变量时,这不会覆盖模型吗?我对一个包含所有协变量的模型感兴趣,上面的例子是我想到的将所有期望的协变量添加到模型中的一种方法。我似乎不理解你的问题。首先,应该将数据放在data.frame中,并使用model函数的data参数。另外,也许MuMIn包中的疏通功能对您会有帮助。也许我可以尝试用另一种方式说明这个问题。用户可以指定必须添加到模型中的协变量数量。例如,可能需要添加性别和年龄协变量。我想根据函数用户指定的性别和年龄,为数千个y的x建立y模型。该函数需要足够灵活,以添加这些强制性协变量,实际范围从0到多,但不超过10。然后,我将从中提取重要的关系,并在未来的分析中重点关注这些关系。从统计角度来看,这听起来很可疑。