PH525x series - Collinearity

2019-12-01  本文已影响0人  3between7

共线性

当自变量之间存在共线性时,线性回归得到的最小二乘估计的值并不唯一。共线性简单点说就是,设计矩阵中的某几列存在数学关系,如下面这个矩阵,后两列相加就等于第一列:

\left\{\begin{matrix}1&0&1 \\0&1&-1 \\ 1&1&0\end{matrix}\right\}

在R中,可以使用qr()函数判断矩阵是否存在共线性:

A <- matrix(c(1,0,1,0,1,1,1,-1,0),3,3)
qr(A)$rank
#[1] 2

rank在这里的意思是,互相独立的那些列的数目。如果rank小于矩阵的列数,那就说明这个矩阵存在共线性。

案例

四组小鼠,每组2个样本,分别进行ABCD四种处理,其中,前两组是雌性小鼠,后两组是雄性。这样得到的设计矩阵就存在共线性的问题:

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

参考原文

上一篇 下一篇

猜你喜欢

热点阅读