问题描述
我正在尝试测试我的多项 Logistic 回归模型的假设成立还是失败。
多项 Logistic 回归模型是一个可以创建和比较的模型,尽管它具有以下假设:
多项逻辑回归确实有假设,例如 因变量选择之间的独立性假设。这 假设表明某一类别的选择或成员资格是 与其他类别的选择或成员资格无关(即 因变量)。 (source)
因此,在搜索了一段时间后,我发现了方差膨胀因子,该因子用于衡量自变量的行为(方差)在多大程度上受到其与其他自变量的相互作用/相关性的影响或膨胀。
print
但我收到此警告:
#Multinomial Logisitic Regression
mlrModel = train(
label~.,data = overallDataset,method = "multinom",trControl = trainControl(method = "cv",number = 5),trace = FALSE
)
mlrModel$results
head(predict(mlrModel,type = "prob"))
library(car)
vif(mlrModel$finalModel)
结果差异很大:8.575035e+07 到 -7.188586e+13
我没有从模型中删除截距。
我发现了这个问题:vif(): "Warning message: No intercept: vifs may not be sensible." Trying to check multicollinearity with multinomial logistic regression 但它没有答案。
解决方法
首先,在引用的内容中,请注意它说“多项逻辑回归确实有假设,例如因变量选择之间的独立性假设。”当您寻找方差膨胀因子时,您正在查看 自变量 之间的多重共线性。我不太明白这里的联系。
多项式模型中有一个截距。但是你需要记住有超过 1 组系数,如果你的标签中有 n 个类,其中一个被视为截距,你有 n-1 组系数。
因此您会看到该错误,因为在调用 (car:::vif.default) 的 vif
函数中,代码中有一行:
if (names(coefficients(mod)[1]) == "(Intercept)") {
v <- v[-1,-1]
assign <- assign[-1]
}
else warning("No intercept: vifs may not be sensible.")
所以,我们可以用下面的例子来说明为什么会返回错误:
library(nnet)
fit = multinom(Species ~.,data=iris)
vif(fit)
Sepal.Length Sepal.Width Petal.Length Petal.Width
-1.878714e+16 -8.846005e+15 -1.827592e+15 -4.954974e+15
Warning message:
In vif.default(fit) : No intercept: vifs may not be sensible.
同样的错误,我们看看系数:
coefficients(fit)
(Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor 18.69037 -5.458424 -8.707401 14.24477 -3.097684
virginica -23.83628 -7.923634 -15.370769 23.65978 15.135301
names(coefficients(fit))
NULL
因为它是多项式,系数存储为矩阵(使用一个类作为参考,您估计其他类的对数几率),因此 names() 函数不起作用,并返回错误。
在不深入研究统计数据的情况下,可能没有一种简单的方法或方法来计算多项式模型的 vif,我在下面的建议是在差异类上使用 Logistic 的粗略近似:
labels = rownames(coefficients(fit))
ref = set.diff(fit$lab,labels)
t(sapply(labels,function(i){
dat = iris
dat$Species = as.numeric(dat$Species == i)
vif(glm(Species ~ .,data=dat,family="binomial"))
}))
Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor 6.860029 1.511153 27.926317 14.795556
virginica 1.624657 2.797563 1.985489 3.093114