Firth 逻辑回归中的错误消息

Error message in Firth's logistic regression

由于准完全分离,我使用 logistf 包中的 logistf 函数在 R 中生成了逻辑回归模型。我收到错误消息:

Error in solve.default(object$var[2:(object$df + 1), 2:(object$df + 1)]) : system is computationally singular: reciprocal condition number = 3.39158e-17

数据结构如下图,虽然这里删掉了很多数据。数字代表水平(即 1 = 非常低,5 = 非常高)不计算数据。变量 OrdAOrdH 是有序因子。变量 Binary 是一个因子。

OrdA OrdB OrdC OrdE OrdF OrdG OrdH Binary
1    3    4    1    1    2    1      1
2    3    4    5    1    3    1      1
1    3    2    5    2    4    1      0
1    1    1    1    3    1    2      0
3    2    2    2    1    1    1      0

我读到 here 这可能是由多重共线性引起的,但已经测试过,这不是问题所在。

VIFModel <- lm(Binary ~ OrdA + OrdB + OrdC + OrdD + OrdE +
                        OrdF + OrdG + OrdH, data = VIFdata)

vif(VIFModel)

                        GVIF Df   GVIF^(1/(2*Df))
OrdA                    6.09  3        1.35
OrdB                    3.50  2        1.37
OrdC                    7.09  3        1.38
OrdD                    6.07  2        1.57
OrdE                    5.48  4        1.23
OrdF                    3.05  2        1.32
OrdG                    5.41  4        1.23
OrdH                    3.03  2        1.31

post 还表明问题可能是由于“变量多于观察值”引起的。但是,我有 8 个自变量和 82 个观测值。

对于上下文,每个独立变量都是有序的,有 5 个水平,二元因变量有 30% 的观察结果是“成功的”。我不确定这是否与问题有关。我该如何解决这个问题?

X <- model.matrix(Binary ~ OrdA+OrdB+OrdC+OrdD+OrdE+OrdF+OrdG+OrdH, 
        Data3, family = "binomial"); dim(X); Matrix::rankMatrix(X)


[1] 82 24
[1] 23
attr(,"method")
[1] "tolNorm2"
attr(,"useGrad")
[1] FALSE
attr(,"tol")
[1] 1.820766e-14

简答:您的序数输入变量被转换为 24 个预测变量(模型矩阵的列数),但您的模型矩阵的秩仅为 23,因此您的预测变量确实存在多重共线性。我不知道 vif 在做什么...

您可以使用 svd(X) 来帮助找出哪些组件共线...