我正在拟合不同的模型,然后我想从包车中计算 VIF。VIF 在公式中需要多个回归量,因此会返回错误。这个想法是在运行函数之前检查是否有多个回归量。或者,我可以尝试按回归量的数量对模型进行排序,以便仅从第 i 个位置开始调用 VIF 函数。
我的代码是:
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
ot=rnorm(length(trt))
ot2=rnorm(length(trt))
DF=as.data.frame(cbind(ot,ot2,ctl,trt))
y=colnames(DF[1])
x = colnames(DF)
x = x[! x %in% y]
n = length(x)
id = unlist(
lapply(1:n,
function(i)combn(1:n,i,simplify=F)
)
,recursive=F)
models = sapply(id,function(i)
paste(y,paste(x[i],collapse="+"), sep="~")
)
allModelsResults=lapply(models, function(i)
lm(as.formula(i), data=DF))
library(car)
vif.r=sapply(allModelsResults,vif)