2016-10-21 24 views
-1

Rstudioの小さなデータセットでVIFを計算すると、次のエラーが発生します。誰でも助けてくれますか?必要に応じて、データセットに関する詳細情報を提供することができます。VIF(Variance Inflation Factor)の計算エラー

"as.vector(y)のエラー - 平均(y)バイナリ 演算子への非数値引数"。

データセット:80 obs。 15個の変数(すべての変数が数値です)続く

ステップ:ここで

# 1. Determine correlation 
    library(corrplot) 
    cor.data <- cor(train) 
    corrplot(cor.data, method = 'color') 
    cor.data  


# 2. Build Model 

    model2 <- lm(Volume~., train) 
    summary(model2) 

# 3. Calculate VIF 

    library(VIF) 
    vif(model2) 

は20台のOBSとサンプルデータセットです。

train <- structure(list(Price = c(949, 2249.99, 399, 409.99, 1079.99, 
114.22, 379.99, 65.29, 119.99, 16.99, 6.55, 15, 52.5, 21.08, 
18.98, 3.6, 3.6, 174.99, 9.99, 670), X.5.Star.Reviews. = c(3, 
2, 3, 49, 58, 83, 11, 33, 16, 10, 21, 75, 10, 313, 349, 8, 11, 
170, 15, 20), X.4.Star.Reviews. = c(3, 1, 0, 19, 31, 30, 3, 19, 
9, 1, 2, 25, 8, 62, 118, 6, 5, 100, 12, 2), X.3.Star.Reviews. = c(2, 
0, 0, 8, 11, 10, 0, 12, 2, 1, 2, 6, 5, 13, 27, 3, 2, 23, 4, 4 
), X.2.Star.Reviews. = c(0, 0, 0, 3, 7, 9, 0, 5, 0, 0, 4, 3, 
0, 8, 7, 2, 2, 20, 0, 2), X.1.Star.Reviews. = c(0, 0, 0, 9, 36, 
40, 1, 9, 2, 0, 15, 3, 1, 16, 5, 1, 1, 20, 4, 4), X.Positive.Service.Review. = c(2, 
1, 1, 7, 7, 12, 3, 5, 2, 2, 2, 9, 2, 44, 57, 0, 0, 310, 3, 4), 
    X.Negative.Service.Review. = c(0, 0, 0, 8, 20, 5, 0, 3, 1, 
    0, 1, 2, 0, 3, 3, 0, 0, 6, 1, 3), X.Would.consumer.recommend.product. = c(0.9, 
    0.9, 0.9, 0.8, 0.7, 0.3, 0.9, 0.7, 0.8, 0.9, 0.5, 0.2, 0.8, 
    0.9, 0.9, 0.8, 0.8, 0.8, 0.8, 0.7), X.Shipping.Weight..lbs.. = c(25.8, 
    50, 17.4, 5.7, 7, 1.6, 7.3, 12, 1.8, 0.75, 1, 2.2, 1.1, 0.35, 
    0.6, 0.01, 0.01, 1.4, 0.4, 0.25), X.Product.Depth. = c(23.94, 
    35, 10.5, 15, 12.9, 5.8, 6.7, 7.9, 10.6, 10.7, 7.3, 21.3, 
    15.6, 5.7, 1.7, 11.5, 11.5, 13.8, 11.1, 5.8), X.Product.Width. = c(6.62, 
    31.75, 8.3, 9.9, 0.3, 4, 10.3, 6.7, 9.4, 13.1, 7, 1.8, 3, 
    3.5, 13.5, 8.5, 8.5, 8.2, 7.6, 1.4), X.Product.Height. = c(16.89, 
    19, 10.2, 1.3, 8.9, 1, 11.5, 2.2, 4.7, 0.6, 1.6, 7.8, 15, 
    8.3, 10.2, 0.4, 0.4, 0.4, 0.5, 7.8), X.Profit.margin. = c(0.15, 
    0.25, 0.08, 0.08, 0.09, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 
    0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.15), Volume = c(12, 
    8, 12, 196, 232, 332, 44, 132, 64, 40, 84, 300, 40, 1252, 
    1396, 32, 44, 680, 60, 80)), .Names = c("Price", "X.5.Star.Reviews.", 
"X.4.Star.Reviews.", "X.3.Star.Reviews.", "X.2.Star.Reviews.", 
"X.1.Star.Reviews.", "X.Positive.Service.Review.", "X.Negative.Service.Review.", 
"X.Would.consumer.recommend.product.", "X.Shipping.Weight..lbs..", 
"X.Product.Depth.", "X.Product.Width.", "X.Product.Height.", 
"X.Profit.margin.", "Volume"), row.names = c(NA, 20L), class = "data.frame") 
+1

再現可能な例を提供する必要があります。使用している変数の種類を推測します。再現可能な例の良いガイドはこれです[1](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – cimentadaj

+0

私はすべての変数が数値であることを読みました。しかし、まだ、私たちはあなたのデータ/おもちゃのデータセットを垣間見ることなく問題を理解することはできません。 – cimentadaj

+0

私はスタックオーバーフローを使用するのが初めてで、いくつかのデータセットを含むように質問を更新しようとしました。これはまったく役に立ちますか? – Mavs18

答えて

3

VIFパッケージのvif機能は、分散インフレ率(VIF)を推定しません。 「線形モデルの変数を選択する」と「線形モデルを構築するための変数の部分集合を返す」。詳細はhereを参照してください。

carパッケージのvif機能が必要です。

install.packages("car") 
library(car) 
vif(model2) # This should do it 

編集:私は統計の側で特にコメントしませんが、あなたがあなたのデータにいくつかの問題を示唆し、完璧なフィット感、非常に珍しい何かを持っているように思えます。

+0

あなたのソリューションはうまくいきました。はい、この演習のアイデアは、マルチ共線性の概念を理解し、変数を削除してからモデルのパフォーマンスを改善することでした。 – Mavs18

0

vifの入力が間違っています。これは、応答yと予測変数xを望んでいる:

vif(train$Volume,subset(train,select=-Volume),subsize=19) 

私は<は観測数(デフォルトは200である)=値にsubsize引数を設定する必要がありました。

+0

あなたの返信Benありがとう!私はコードを試しましたが、私が得ているのはおそらくデータセットのあらゆる観測のVIFです。私は出力にすべての予測変数を表示していません。私は1 Star Reviewと1つの他のプレディクタを見ただけです。 – Mavs18

+0

私が得ようとしているのは、すべてのプレディクタのvifです。高いvifを持つものを削除し、再度モデルを実行してパフォーマンスをチェックすることができます。私はRには新しく、統計に関する知識も再訪しています。 vifが最善の方法であるかどうかは分かりませんが、vifを実行して結果を改善できるかどうかを確認したいと考えています。 – Mavs18