【发布时间】: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 = 非常高)而不是计数数据。变量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
该帖子还表明,问题可能是由“变量多于观察结果”引起的。但是,我有 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 <- 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