共线性
当自变量之间存在共线性时,线性回归得到的最小二乘估计的值并不唯一。共线性简单点说就是,设计矩阵中的某几列存在数学关系,如下面这个矩阵,后两列相加就等于第一列:
在R中,可以使用qr()
函数判断矩阵是否存在共线性:
A <- matrix(c(1,0,1,0,1,1,1,-1,0),3,3)
qr(A)$rank
#[1] 2
在这里的意思是,互相独立的那些列的数目。如果小于矩阵的列数,那就说明这个矩阵存在共线性。
案例
四组小鼠,每组2个样本,分别进行、、和四种处理,其中,前两组是雌性小鼠,后两组是雄性。这样得到的设计矩阵就存在共线性的问题:
Sex <- c(0,0,0,0,1,1,1,1)
A <- c(1,1,0,0,0,0,0,0)
B <- c(0,0,1,1,0,0,0,0)
C <- c(0,0,0,0,1,1,0,0)
D <- c(0,0,0,0,0,0,1,1)
X <- model.matrix(~Sex+A+B+C+D-1)
cat("ncol=",ncol(X),"rank=", qr(X)$rank,"\n")
## ncol= 5 rank= 4
那么如何消除这种影响呢?最好的做法是在实验设计之初是平衡性别和处理这两个变量:
Sex <- c(0,1,0,1,0,1,0,1)
A <- c(1,1,0,0,0,0,0,0)
B <- c(0,0,1,1,0,0,0,0)
C <- c(0,0,0,0,1,1,0,0)
D <- c(0,0,0,0,0,0,1,1)
X <- model.matrix(~Sex+A+B+C+D-1)
cat("ncol=",ncol(X),"rank=", qr(X)$rank,"\n")
## ncol= 5 rank= 5
网友评论