在考虑随机/混合效应后的共线性

5

在考虑随机效应之后,两个或更多的预测变量是否会变得更加共线?

在我的情况下,在建模之前我已经测试了共线性,例如使用VIF,并且一切正常。然而,不同模型的排名(使用IC)使我不确定它是否真正可以区分预测变量。

有什么想法吗?

附:能否有高声望的人添加更相关的标签,如共线性?

1个回答

11

这篇博客文章列出了一些解决方案。它们使用一些代码创建一个函数,可以分别计算lmerlme模型对象的VIFs,这些对象来自R包中的lmernlme。我已经复制了下面的函数代码。

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 }

执行一次该代码后,您将能够在R环境中执行一个名为vif.lme的新函数。我将使用一个随机数据集和一个无信息的随机效应来举例说明。我使用了一个无信息的随机效应,这样nlme中的lme的结果将生成与基础R中的lm预测变量相同的参数值。然后,我使用上述代码计算方差膨胀因子(VIFs),以及从car包中用于线性模型计算VIFs的vif函数,以表明它们提供相同的输出。

#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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接