Если вы посмотрите на vif с именем (car ::: vif.default), в коде есть строка:
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 () не работает и возвращает ошибку.