我想要做VIF測試,在數據集內運行連續迴歸,每次使用一個變量作爲響應,其餘爲預測變量。使用glm與data.table和預測變量和響應的參數化定義
爲此目的,我將把我的代碼放在一個for循環中,這個循環將給出將作爲響應使用的列的索引的連續值,並將其餘的值作爲預測值。
我要使用data.table封裝和I將使用基礎R發現mtcars數據集以產生可再現的例子:
data(mtcars)
setDT(mtcars)
# Let i-- the index of the response -- be 1 for demonstration purposes
i <- 1
variables <- names(mtcars)
response <- names(mtcars)[i]
predictors <- setdiff(variables, response)
model <- glm(mtcars[, get(response)] ~ mtcars[, predictors , with = FALSE], family = "gaussian")
然而,這導致一個錯誤消息:
錯誤model.frame.default(式= mtcars [,得到(響應)]〜 mtcars [,: 無效型(列表)爲變量 'mtcars [,預測,與= FALSE]'
你能解釋一下錯誤並幫我糾正代碼嗎?
您的建議將不勝感激。
============================================== ===============================
編輯:
再現代碼建議我得到了一個錯誤消息:
> library(car)
> library(data.table)
>
> data(mtcars)
> setDT(mtcars)
> model <- glm(formula = mpg ~ .,data=mtcars , family = "gaussian")
> vif(model)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘vif’ for signature ‘"glm"’
更新:
沒有問題的代碼運行時,我明確指定的包,即:
car::vif(model)
編輯2
我不得不修改弗雷德裏克的代碼如下得到所有變量的係數:
rhs <- paste(predictors, collapse ="+")
full_formula <- paste(response, "~", rhs)
full_formula <- as.formula(full_formula)