当你试图从你正在做的公式中替换符号时,你需要更加小心。你需要用R语言能理解的术语来表达它。你要以“食物”的名义传递,而不是像现在这样存储在“食物”向量中的值。这是一个更新,它似乎可以完成你想做的事情
interceptCompare <- function(model, factor) {
sym <- substitute(factor)
results <- list() # empty list to store results
for (i in unique(factor)) {
change <- eval(bquote(~.-.(sym)+relevel(.(sym), ref=.(i))))
new_model <- update(model, change)
results[[i]] <- summary(new_model)$coefficients[1:3, ]
}
results <- lapply(results, function(x) round(x, 4))
return(results)
}
在这里,我们用
substitute
.然后我们使用
bquote()
建立一个新的公式,该公式将删除原始值,并使用特定的引用重新调整因子变量。然后我们把这个保存到一个新的对象中,这样我们就不会一直更新同一个模型。对于
binomial.model
,这个返回
$`a`
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.8473 0.4879 1.7364 0.0825
relevel(food, ref = "a")b 0.0000 0.6901 0.0000 1.0000
relevel(food, ref = "a")c -0.8473 0.6619 -1.2801 0.2005
$b
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.8473 0.4879 1.7364 0.0825
relevel(food, ref = "b")a 0.0000 0.6901 0.0000 1.0000
relevel(food, ref = "b")c -0.8473 0.6619 -1.2801 0.2005
$c
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.0000 0.4472 0.0000 1.0000
relevel(food, ref = "c")a 0.8473 0.6619 1.2801 0.2005
relevel(food, ref = "c")b 0.8473 0.6619 1.2801 0.2005
你可以看到它是如何改变
ref=
每次迭代时