考虑随机效应后,两个/更多预测变量会变得更多/更少共线吗?
在我的情况下,我在建模之前测试了共线性,例如使用 VIF,并且一切都检查出来了。然而,不同模型的排名(使用 IC)让我不确定它是否真的可以区分预测变量。
有任何想法吗?
ps!具有比我更高代表的人可以添加更相关的标签,例如共线性吗?
考虑随机效应后,两个/更多预测变量会变得更多/更少共线吗?
在我的情况下,我在建模之前测试了共线性,例如使用 VIF,并且一切都检查出来了。然而,不同模型的排名(使用 IC)让我不确定它是否真的可以区分预测变量。
有任何想法吗?
ps!具有比我更高代表的人可以添加更相关的标签,例如共线性吗?
此博客文章中列出了一些解决方案。他们使用一些代码来创建一个函数,该函数将分别计算来自和R 包的 VIFlmer
和lme
模型对象。我已经复制了下面函数的代码。lmer
nlme
vif.lme <- function (fit) {
## adapted from rms::vif
v <- vcov(fit)
nam <- names(fixef(fit))
## exclude intercepts
ns <- sum(1 * (nam == "Intercept" | nam == "(Intercept)"))
if (ns > 0) {
v <- v[-(1:ns), -(1:ns), drop = FALSE]
nam <- nam[-(1:ns)] }
d <- diag(v)^0.5
v <- diag(solve(v/(d %o% d)))
names(v) <- nam
v }
一旦您运行该代码一次,您将能够vif.lme
在 R 环境中执行一个新函数。我在下面给出了一个使用随机数据集和无信息随机效应的示例。我使用了无信息的随机效应,因此lme
within的结果nlme
将为预测变量生成与lm
基 R 中相同的参数值。然后,我使用上面的代码来计算方差膨胀因子,以及用于计算 VIFvif
的包中的 functinocar
对于线性模型,表明它们给出相同的输出。
#make 4 vectors- c is used as an uninformative random effect for the lme model
a<-c(1:10)
b1<-c(2,4,6,8,10,100,14,16,18,20)
b2<-c(1,9,2,4,5,6,4,3,2,-1)
c<-c(1,1,1,1,1,1,1,1,1,1)
test<-data.frame(a,b1,b2,c)
#model a as a function of b1 and b2, and c as a random effect
require(nlme)
fit<-lme(a~b1+b2, random=~1|c,data=test)
#see how the model fits
summary(fit)
#check variance inflation factors
vif.lme(fit)
#create a new regular linear regression model and check VIF using the car package.
#answers should be the same, as our random effect above was totally uninformative
require(car)
fit2<- lm(a~b1+b2,data=test)
#check to see that parameter fits are the same.
summary(fit2)
#check to see that variance inflation factors are the same
vif(fit2)