关于设计矩阵的完美共线性的例子是什么?
我想举一个例子,其中无法估计,因为是不可逆的。
关于设计矩阵的完美共线性的例子是什么?
我想举一个例子,其中无法估计,因为是不可逆的。
Answers:
这是一个示例,其中3个变量,和与方程相关
其中
特定数据是
y x1 x2
1 4.520866 1 2
2 6.849811 2 4
3 6.539804 3 6
因此很明显是的倍数,因此我们具有完美的共线性。
我们可以将模型写为
哪里:
所以我们有
现在我们计算的行列式:
在R中,我们可以显示如下:
> x1 <- c(1,2,3)
创建x2
的倍数x1
> x2 <- x1*2
创建Y,的线性组合x1
,x2
和一些随机性
> y <- x1 + x2 + rnorm(3,0,1)
观察到
> summary(m0 <- lm(y~x1+x2))
无法估计x2
系数的值:
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.9512 1.6457 2.401 0.251
x1 1.0095 0.7618 1.325 0.412
x2 NA NA NA NA
Residual standard error: 0.02583 on 1 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 0.9999
F-statistic: 2.981e+04 on 1 and 1 DF, p-value: 0.003687
模型矩阵为:
> (X <- model.matrix(m0))
(Intercept) x1 x2
1 1 1 2
2 1 2 4
3 1 3 6
所以是
> (XXdash <- X %*% t(X))
1 2 3
1 6 11 16
2 11 21 31
3 16 31 46
如图所示,这是不可逆的
> solve(XXdash)
Error in solve.default(XXdash) :
Lapack routine dgesv: system is exactly singular: U[3,3] = 0
要么:
det(XXdash)[1] 0
这是产生完美多重共线性的两个相当常见的场景,即设计矩阵的列与线性相关的情况。回想一下线性代数,这意味着存在设计矩阵的各列(其系数都不全为零)的线性组合,该组合等于零。我提供了一些实际的例子来帮助解释为什么这种陷阱如此频繁地发生-我几乎遇到了所有这些例子!
一个变量是另一个变量的倍数,而与是否存在截距项无关:也许是因为您使用不同的单位记录了相同的变量两次(例如,“以厘米为单位的长度”正好是“以米为单位的长度”的100倍),或者因为当分母固定时,您记录了一次变量作为原始数,一次记录了比例或百分比(例如,“培养皿的面积”和“培养皿的百分比”是彼此精确的倍数)每个培养皿都相同)。我们具有共线性,因为如果,其中和是变量(设计矩阵的列),而是标量常数, w x a 1 (是等于零的变量的线性组合。
有一个截距项,一个变量与另一个变量之间有一个常数:如果将变量居中()并在回归中包括原始和居中的,就会发生这种情况。如果您的变量是在不同的单位系统中测量的,这些系统之间存在一个常数,例如为“开尔文温度”,而为“°C温度”,则也会发生这种情况。如果我们将截距项视为始终为的变量(在设计矩阵中表示为一列),则对于某个常数, X 瓦特瓦特X 瓦特我 = X 我 + 273.15 1 →表示是设计矩阵的,和列的线性组合,该列等于零。
有一个截距项,一个变量由另一个变量的仿射变换给出:即,您有变量和,与变量相关,其中和为常数。例如,如果将变量标准化为,并且在回归中同时包含原始和标准化变量,就会发生这种情况。如果将记录为“°F温度”,将为“°C温度”,也会发生这种情况,因为这些单位系统不共享公共零,但与。或在业务环境中,假设每个订单都有固定成本(例如,交货费用),并且每销售单位有一个成本。那么,如果是订单的成本,而是订购的单位数,则。感兴趣的线性组合为。注意,如果,则(3)包括(2)作为特例;如果,则(3)包括(1)作为特殊情况。
有一个截距项,并且多个变量的总和是固定的(例如,在著名的“虚拟变量陷阱”中):例如,如果您具有“满意的客户百分比”,“不满意的客户百分比”和“都不满意的客户百分比”也不会不满意”,那么这三个变量的总和(舍入误差除外)总和为100。需要从回归中删除这些变量之一(或者作为截距项),以防止共线性。当您对分类变量的每个可能级别使用指标变量(更常见但不太有用的称为“虚拟变量”)时,就会发生“虚拟变量陷阱”。例如,假设花瓶以红色,绿色或蓝色的配色方案生产。如果您记录了分类变量“red
green
并且blue
将是二进制变量,存储1
为“是”和0
“否”),那么对于每个花瓶,只有一个变量是一个变量,因此red + green + blue = 1
。由于截距项有一个矢量,所以线性组合1(red) + 1(green) + 1(blue) - 1(1) = 0
。此处通常的补救措施是放弃拦截,或放弃red
成为基准或参考水平的指标之一(例如,略去)。在这种情况下,的回归系数green
将表示与使其他说明变量保持不变的从红色花瓶切换到绿色花瓶相关的平均响应的变化。
至少有两个变量子集,每个子集都有固定的总和,而不管是否存在截距项:假设(4)中的花瓶以三种尺寸生产,并且尺寸的分类变量存储为三个附加指标变量。我们会的large + medium + small = 1
。这样1(large) + 1(medium) + 1(small) - 1(red) - 1(green) - 1(blue) = 0
,即使没有拦截项,我们也可以得到线性组合。这两个子集不需要共享相同的总和,例如,如果我们有解释变量,使得每个且则。
一个变量定义为其他多个变量的线性组合:例如,如果记录每个矩形的长度,宽度和周长,则因此我们得到线性组合。带有截取项的示例:假设邮购业务有两个产品线,我们记录该订单包含第一个产品的(单位成本和第二个产品(单位成本,其中固定运费。如果我们还包括订单成本w p p i = 2 l i + 2 w i 1 (→ p)− 2 (→ l)− 2 (→ w作为解释变量,则,因此。这是(3)的明显概括。这也给我们提供了一种不同的思考方式(4):一旦我们知道了所有变量总和固定的子集之一,那么剩下的就是它们的补数,因此可以表示为它们及其和的线性组合。 。如果我们知道50%的客户感到满意,而20%的顾客感到不满意,那么100%-50%-20%= 30%的顾客必须既不满意也不满意;如果我们知道花瓶不是红色()而是绿色(),那么我们知道它不是蓝色()。red=0
green=1
blue = 1(1) - 1(red) - 1(green) = 1 - 0 - 1 = 0
一个变量为常数,为零,与是否存在截距项无关:在观察性研究中,如果您的样品没有表现出足够的(任何!)变异,则该变量将为常数。样本中可能没有捕获总体的变化,例如,如果存在一个非常常见的模态值:也许您的样本量太小,因此不太可能包含与该模式不同的任何值,或者您的测量值是精度不足以检测模式的微小变化。或者,可能存在理论上缺乏变异的原因,特别是如果您正在研究子种群。在洛杉矶的新构建属性的研究中,它也并不令人意外,每一个数据点有AgeOfProperty = 0
和State = California
!在实验研究中,您可能测量了在实验控制下的自变量。如果您的一个解释变量既是常数又是零,那么我们立即得到线性组合(任何其他变量的系数为零)是。
有一个截距项,并且至少一个变量是常数:如果是常数,则每个,则线性组合。
至少有两个变量是常数,而不管是否存在截距项:如果每个和,则线性组合。
设计矩阵的列数超过行数:即使变量之间没有概念上的关系,从数学上讲,当时,设计矩阵的列也将线性相关。在尺寸小于的空间中不可能有线性独立的向量:例如,尽管您可以在一张纸上绘制两个独立的向量(一个二维平面)在页面上绘制的任何其他矢量都必须在其范围内,因此是它们的线性组合。请注意,拦截项在设计矩阵中占一列,因此算作您的列之一。(这种情况通常称为“大,小 ”问题:另请参见此相关的简历问题。)
带有R代码的数据示例
每个示例给出一个设计矩阵,矩阵(注意,它始终是正方形和对称的)和。请注意,如果是奇异的(行列式为零,因此不可逆),则我们无法估计。该条件是非奇异相当于该条件满秩所以它的列是线性无关:看到这个数学SE问题,或者这个和它的逆。X ' X DET (X ' X )X ' X βX ' X X
(1)一列是另一列的倍数
# x2 = 2 * x1
# Note no intercept term (column of 1s) is needed
X <- matrix(c(2, 4, 1, 2, 3, 6, 2, 4), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 4
#[2,] 1 2
#[3,] 3 6
#[4,] 2 4
t(X) %*% X
# [,1] [,2]
#[1,] 18 36
#[2,] 36 72
round(det(t(X) %*% X), digits = 9)
#0
(2)截取项和一个变量与另一个变量的常数不同
# x1 represents intercept term
# x3 = x2 + 2
X <- matrix(c(1, 2, 4, 1, 1, 3, 1, 3, 5, 1, 0, 2), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 4
#[2,] 1 1 3
#[3,] 1 3 5
#[4,] 1 0 2
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 4 6 14
#[2,] 6 14 26
#[3,] 14 26 54
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, cols now linearly independent
# x2 = x1 + 2 with no intercept column
X <- matrix(c(2, 4, 1, 3, 3, 5, 0, 2), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 4
#[2,] 1 3
#[3,] 3 5
#[4,] 0 2
t(X) %*% X
# [,1] [,2]
#[1,] 14 26
#[2,] 26 54
# Can you see how this matrix is related to the previous one, and why?
round(det(t(X) %*% X), digits = 9)
#80
# Non-zero determinant so X'X is invertible
(3)截距项和一个变量是另一变量的仿射变换
# x1 represents intercept term
# x3 = 2*x2 - 3
X <- matrix(c(1, 2, 1, 1, 1, -1, 1, 3, 3, 1, 0, -3), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 1
#[2,] 1 1 -1
#[3,] 1 3 3
#[4,] 1 0 -3
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 4 6 0
#[2,] 6 14 10
#[3,] 0 10 20
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, cols now linearly independent
# x2 = 2*x1 - 3 with no intercept column
X <- matrix(c(2, 1, 1, -1, 3, 3, 0, -3), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 1
#[2,] 1 -1
#[3,] 3 3
#[4,] 0 -3
t(X) %*% X
# [,1] [,2]
#[1,] 14 10
#[2,] 10 20
# Can you see how this matrix is related to the previous one, and why?
round(det(t(X) %*% X), digits = 9)
#180
# Non-zero determinant so X'X is invertible
(4)截取项和几个变量的总和是固定的
# x1 represents intercept term
# x2 + x3 = 10
X <- matrix(c(1, 2, 8, 1, 1, 9, 1, 3, 7, 1, 0, 10), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 8
#[2,] 1 1 9
#[3,] 1 3 7
#[4,] 1 0 10
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 4 6 34
#[2,] 6 14 46
#[3,] 34 46 294
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, then columns now linearly independent
# x1 + x2 = 10 with no intercept column
X <- matrix(c(2, 8, 1, 9, 3, 7, 0, 10), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 8
#[2,] 1 9
#[3,] 3 7
#[4,] 0 10
t(X) %*% X
# [,1] [,2]
#[1,] 14 46
#[2,] 46 294
# Can you see how this matrix is related to the previous one, and why?
round(det(t(X) %*% X), digits = 9)
#2000
# Non-zero determinant so X'X is invertible
(4a)具有虚拟变量陷阱的拦截项
# x1 represents intercept term
# x2 + x3 + x4 = 1
X <- matrix(c(1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0), ncol = 4, byrow=TRUE)
X
# [,1] [,2] [,3] [,4]
#[1,] 1 0 0 1
#[2,] 1 1 0 0
#[3,] 1 0 1 0
#[4,] 1 1 0 0
#[5,] 1 0 1 0
t(X) %*% X
# [,1] [,2] [,3] [,4]
#[1,] 5 2 2 1
#[2,] 2 2 0 0
#[3,] 2 0 2 0
#[4,] 1 0 0 1
# This matrix has a very natural interpretation - can you work it out?
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, then columns now linearly independent
# x1 + x2 + x3 = 1 with no intercept column
X <- matrix(c(0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 0 0 1
#[2,] 1 0 0
#[3,] 0 1 0
#[4,] 1 0 0
#[5,] 0 1 0
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 2 0 0
#[2,] 0 2 0
#[3,] 0 0 1
# Can you see how this matrix is related to the previous one?
round(det(t(X) %*% X), digits = 9)
#4
# Non-zero determinant so X'X is invertible
(5)两个具有固定总和的变量子集
# No intercept term needed
# x1 + x2 = 1
# x3 + x4 = 1
X <- matrix(c(0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0), ncol = 4, byrow=TRUE)
X
# [,1] [,2] [,3] [,4]
#[1,] 0 1 0 1
#[2,] 1 0 0 1
#[3,] 0 1 1 0
#[4,] 1 0 0 1
#[5,] 1 0 1 0
#[6,] 0 1 1 0
t(X) %*% X
# [,1] [,2] [,3] [,4]
#[1,] 3 0 1 2
#[2,] 0 3 2 1
#[3,] 1 2 3 0
#[4,] 2 1 0 3
# This matrix has a very natural interpretation - can you work it out?
round(det(t(X) %*% X), digits = 9)
#0
(6)一个变量是其他变量的线性组合
# No intercept term
# x3 = x1 + 2*x2
X <- matrix(c(1,1,3,0,2,4,2,1,4,3,1,5,1,2,5), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 1 3
#[2,] 0 2 4
#[3,] 2 1 4
#[4,] 3 1 5
#[5,] 1 2 5
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 15 8 31
#[2,] 8 11 30
#[3,] 31 30 91
round(det(t(X) %*% X), digits = 9)
#0
(7)一个变量是常数而零
# No intercept term
# x3 = 0
X <- matrix(c(1,1,0,0,2,0,2,1,0,3,1,0,1,2,0), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 1 0
#[2,] 0 2 0
#[3,] 2 1 0
#[4,] 3 1 0
#[5,] 1 2 0
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 15 8 0
#[2,] 8 11 0
#[3,] 0 0 0
round(det(t(X) %*% X), digits = 9)
#0
(8)截取项和一个常数
# x1 is intercept term, x3 = 5
X <- matrix(c(1,1,5,1,2,5,1,1,5,1,1,5,1,2,5), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 1 5
#[2,] 1 2 5
#[3,] 1 1 5
#[4,] 1 1 5
#[5,] 1 2 5
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 5 7 25
#[2,] 7 11 35
#[3,] 25 35 125
round(det(t(X) %*% X), digits = 9)
#0
(9)两个常数
# No intercept term, x2 = 2, x3 = 5
X <- matrix(c(1,2,5,2,2,5,1,2,5,1,2,5,2,2,5), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 5
#[2,] 2 2 5
#[3,] 1 2 5
#[4,] 1 2 5
#[5,] 2 2 5
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 11 14 35
#[2,] 14 20 50
#[3,] 35 50 125
round(det(t(X) %*% X), digits = 9)
#0
(10)
# Design matrix has 4 columns but only 3 rows
X <- matrix(c(1,1,1,1,1,2,4,8,1,3,9,27), ncol = 4, byrow=TRUE)
X
# [,1] [,2] [,3] [,4]
#[1,] 1 1 1 1
#[2,] 1 2 4 8
#[3,] 1 3 9 27
t(X) %*% X
# [,1] [,2] [,3] [,4]
#[1,] 3 6 14 36
#[2,] 6 14 36 98
#[3,] 14 36 98 276
#[4,] 36 98 276 794
round(det(t(X) %*% X), digits = 9)
#0
有多种方法可以使一列数据成为其他数据的线性函数。其中一些是显而易见的(例如,米与厘米),而另一些则可能更微妙(例如,年龄和年幼儿童的受教育年限)。
符号说明:假设表示的第一列,表示第二列,等等...,而 表示一个矢量的向量,这是设计矩阵X中包含的内容如果您在回归中包括一个常数。 X x 2 1