【问题标题】:Error message in Firth's logistic regressionFirth 逻辑回归中的错误消息
【发布时间】:2020-07-25 17:12:28
【问题描述】:

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

solve.default(object$var[2:(object$df + 1), 2:(object$df + 1)]) 中的错误: 系统在计算上是奇异的:倒数条件数 = 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

该帖子还表明,问题可能是由“变量多于观察结果”引起的。但是,我有 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

【问题讨论】:

  • 我认为我们真的需要minimal reproducible example 来帮助解决这个问题......你是如何测试多重共线性的?你测试的是原始数据集还是模型矩阵?序数变量是否编码为有序因子?
  • 您好,非常感谢您的回复。我已尝试添加您要求的一些细节。我没有制作可重复的例子的经验。如果我应该提供更多信息,请告诉我,我很乐意这样做。
  • 你能把X &lt;- model.matrix(Binary ~ ., your_data); dim(X); Matrix::rankMatrix(X)的结果贴出来吗? (假设您的数据仅包含响应变量和预测变量;否则,请在 model.matrix() 中填写您的实际线性模型公式。如果这不能清除,您需要阅读 stackoverflow.com/questions/5963269/…
  • @BenBolker 我想我已经发布了你的要求。
  • 您也可以发布str(Data3)summary(Data3) 吗?我很难弄清楚如何在模型矩阵中获得 24 列...

标签: r error-handling logistic-regression


【解决方案1】:

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

您可以使用svd(X) 来帮助确定哪些组件是共线的...

【讨论】:

  • 非常感谢您的帮助。尝试找出有问题的变量并删除它们对我来说是明智的吗?
  • 可能(如果没有更多上下文/不知道实际的多重共线性在哪里,很难确定...)
猜你喜欢
  • 2020-05-26
  • 1970-01-01
  • 2016-02-21
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多