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 = 非常高)不计算数据。变量 OrdA
到 OrdH
是有序因子。变量 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)
来帮助找出哪些组件共线...
由于准完全分离,我使用 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 = 非常高)不计算数据。变量 OrdA
到 OrdH
是有序因子。变量 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)
来帮助找出哪些组件共线...