1. ホーム
  2. r

[解決済み] VIFをrで使うには?

2022-03-10 07:33:12

質問

私はRの初心者で、MLを使用して学習しています。 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") のエラー : クラス "c('train', 'train.formula') " のオブジェクトに 'vcov' の適用可能なメソッドが存在しません。

を使うことを知りました。 finalModel このSOの記事でvif用に Rでのglm caretモデルの分散インフレVIF

しかし、まだエラーが発生します。

car::vif(model_iris3$finalModel)

UseMethod("vcov") でエラーが発生しました : クラス "gbm" のオブジェクトに適用される 'vcov' に該当するメソッドがありません。

と同じエラーです。 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 

解決方法は?

car::vif は、モデルの種類ごとに適合させる必要がある関数です。リンク先の質問で機能するのは car::vif に対応するように実装されています。 glm のモデルです。 car::vif は、選択したモデルタイプをサポートしていません。 gbm .