为什么这个矩阵是奇异的?尝试创建我自己的对比矩阵但不明白错误

问题描述 投票:0回答:1

我有六个条件。我们可以称它们为A、B、C、D、E、F。 我正在尝试在 R 中创建一个对比矩阵。我将在回归模型中使用这些对比。

#Compare A, B, C to D, E, F
contrast1 <- c(1/3, 1/3, 1/3,  -1/3, -1/3, -1/3)
#Next compare A and D to C and F.
contrast2 <- c(1/2, 0, -1/2, 1/2, 0, -1/2) 
#Next compare B and E to C and F
contrast3 <- c(0, 1/2, -1/2, 0, 1/2, -1/2) 
#Next compare A and D to B and E
contrast4 <- c(1/2, -1/2, 0, 1/2, -1/2, 0) 
#Create interaction
contrast.interaction <- contrast1 * contrast4

mat.temp <- rbind(constant=1/6, contrast1, contrast2, contrast3, contrast4, contrast.interaction)
mat.temp

这是矩阵的输出:

                          [,1]       [,2]       [,3]       [,4]       [,5]       [,6]
constant             0.1666667  0.1666667  0.1666667  0.1666667  0.1666667  0.1666667
contrast1            0.3333333  0.3333333  0.3333333 -0.3333333 -0.3333333 -0.3333333
contrast2            0.5000000  0.0000000 -0.5000000  0.5000000  0.0000000 -0.5000000
contrast3            0.0000000  0.5000000 -0.5000000  0.0000000  0.5000000 -0.5000000
contrast4            0.5000000 -0.5000000  0.0000000  0.5000000 -0.5000000  0.0000000
contrast.interaction 0.1666667 -0.1666667  0.0000000 -0.1666667  0.1666667  0.0000000

当我运行

solve()
时,如下所示:

mat <- solve(mat.temp)

我得到的错误是:

solve.default(mat.temp) 中的错误:Lapack 例程 dgesv:系统完全是奇异的:U[6,6] = 0

所以我知道它是单数,但我不明白如何/为什么?哪些对比导致了这个问题?

r statistics lme4
1个回答
0
投票

全部。这是列的线性组合,其总和为零向量:

v <- c(1, 1, -2, -1, -1, 2)
c(mat.temp %*% v)
## [1] 0 0 0 0 0 0

我是如何想到这一点的:

  • run
    caret::findLinearCombos(mat.temp)
    (确定所有 6 列同时共线 - 即,没有子集本身共线)
  • 使用
    eigen(mat.temp)
    。特别是如果
    ee <- eigen(mat.temp)
    那么
    v <- ee$vectors[,6]/sqrt(1/12)
    为我们提供了上面使用的线性组合(
    1/sqrt(12)
    并不是严格必要的,但使事情变得更漂亮)。

@G.Grothendieck 的评论:

如果列是 A、B、C、D、E、F,则 A+B-2C = D+E-2F,因此它们是线性相关的

是等价的(但要求你只盯着列来弄清楚,而不仅仅是计算......)

© www.soinside.com 2019 - 2024. All rights reserved.