4

我一直在 R 中使用 mnlogit 来生成多变量逻辑回归模型。我原来的一组变量产生了一个奇异的矩阵错误,即

Error in solve.default(hessian, gradient, tol = 1e-24) : 
system is computationally singular: reciprocal condition number = 7.09808e-25

事实证明,几个“稀疏”列(对于大多数抽样个体而言,变量为 0)会导致这种奇异性错误。我需要一种系统的方法来删除那些导致奇异性错误的变量,同时保留那些允许估计回归模型的变量,即类似于使用函数 step 来选择通过逐步加法最小化 AIC 的变量,但这次删除变量生成奇异矩阵。

有没有办法做到这一点,因为手动检查每个变量(有数百个预测变量)会非常乏味?

4

1 回答 1

2

如果X是您可以使用的模型中的设计矩阵

X <- model.matrix(formula, data = data)

然后您可以找到一组(非唯一)变量,这些变量将为您提供使用 QR 分解的非奇异模型。例如,

x <- 1:3
X <- model.matrix(~ x + I(x^2) + I(x^3))
QR <- qr(crossprod(X))                 # Get the QR decomposition
vars <- QR$pivot[seq_len(QR$rank)]     # Variable numbers
names <- rownames(QR$qr)[vars]         # Variable names
names
#> [1] "(Intercept)" "x"           "I(x^2)"

这可能会出现数字错误,并且可能与您使用的任何代码不一致,原因有两个。

首先,它不做任何加权,而逻辑回归通常使用迭代重新加权回归。

其次,它可能不会使用与其他代码相同的容差。tol您可以通过将参数更改qr()为默认值来更改其灵敏度1e-07。较大的值将导致更多的变量从names.

于 2019-12-03T19:45:20.863 回答