R 将glm与data.table和预测值和响应的参数定义一起使用

R 将glm与data.table和预测值和响应的参数定义一起使用,r,data.table,glm,R,Data.table,Glm,我想在一个数据集中进行连续回归的VIF测试,每次使用一个变量作为响应,其余变量作为预测因子 为此,我将把我的代码放在一个for循环中,该循环将为列的索引提供连续的值,该索引将用作响应,其余的作为预测值 我将使用data.table包,并使用在base R中找到的mtcars数据集创建一个可复制的示例: data(mtcars) setDT(mtcars) # Let i-- the index of the response -- be 1 for demonstration purposes

我想在一个数据集中进行连续回归的VIF测试,每次使用一个变量作为响应,其余变量作为预测因子

为此,我将把我的代码放在一个for循环中,该循环将为列的索引提供连续的值,该索引将用作响应,其余的作为预测值

我将使用data.table包,并使用在base 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")
编辑2 为了得到所有变量的系数,我不得不修改弗雷德里克的代码如下:

rhs <- paste(predictors,  collapse ="+")
full_formula <- paste(response, "~", rhs)
full_formula <- as.formula(full_formula)

rhs如果您想计算预测值的VIF,我建议查看套装
car
中的
VIF
功能。它将为您进行计算,并推广到具有多个自由度的预测值,例如因子

为了得到你想要的一切

library(car)
library(data.table)

data(mtcars)
setDT(mtcars)
model <- glm(formula = mpg ~ .,data=mtcars ,  family = "gaussian")
vif(model)
相比之下:

 model <- glm.fit(y=mtcars[, get(response)] ,
                  x=mtcars[, predictors , with = FALSE],
                  family=gaussian())

model另一种解决方案基于使用
glm.fit

model <- glm.fit(x=mtcars[, ..predictors], y=mtcars[[response]], family = gaussian())
模型
library(data.table)

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)


rhs <- paste(predictors, sep = " + ")
full_formula <- paste(response, "~", rhs)
model <- glm(formula = full_formula ,data=mtcars, family = "gaussian") 
 model <- glm.fit(y=mtcars[, get(response)] ,
                  x=mtcars[, predictors , with = FALSE],
                  family=gaussian())
model <- glm.fit(x=mtcars[, ..predictors], y=mtcars[[response]], family = gaussian())