我是 R 新手,正在使用caret
. 我正在研究 UCI 银行营销响应数据,但iris
这里使用的数据是为了重现性。
问题是我正在从模型上error
运行。vif
car package
classification
library(tidyverse)
library(caret)
library(car)
iris
# to make it binary classification
iris_train <- iris %>% filter(Species %in% c("setosa","versicolor"))
iris_train$Species <- factor(iris_train$Species)
创建模型
model_iris3 <- train(Species ~ .,
data = iris_train,
method = "gbm",
verbose = FALSE
# tuneLength = 5,
# metric = "Spec",
# trControl = fitCtrl
)
vif中的错误
# vif
car::vif(model_iris3)
UseMethod(“vcov”)中的错误:没有适用于“vcov”的适用方法应用于“c('train','train.formula')”类的对象
finalModel
我从这篇 SO 帖子中了解了使用for vif: R 中 glm caret model 的方差通胀 VIF
但是还是报错
car::vif(model_iris3$finalModel)
UseMethod(“vcov”)中的错误:没有适用于“vcov”的方法应用于“gbm”类的对象
我遇到的同样的错误adaboost
,earth
等等。
感谢解决此问题的任何帮助或建议。
(更新)
Answers
最后这有效(如果仍然出现错误,请参阅完整的解决方案):
vif
不适用于classification
模型,因此将dependent
变量转换为numeric
并linear regression
在其上运行,然后vif
model_iris4 <- train(as.numeric(Species) ~ .,
data = iris_train,
method = "lm",
verbose = FALSE
# tuneLength = 5,
# metric = "Spec",
# trControl = fitCtrl
)
car::vif(model_iris4$finalModel)
######## output ##########
Sepal.Length Sepal.Width Petal.Length Petal.Width
4.803414 2.594389 36.246326 25.421395