如何使用插入字符包train()和varImp()显示R中逻辑回归的系数值和变量重要性

chhkpiq4  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(179)

我们正在执行一个探索性逻辑回归,并试图确定变量在预测结果中的重要性。我们正在使用插入符号包中的train()和varImp()函数。最终,我们希望创建一个包含3列的表/数据框输出:变量名、重要性和系数。输出如下:
所需的输出格式。

下面是一些示例代码:

library(caret)

# Create a sample dataframe

my_DV <- c(0, 1, 0, 1, 1)
IV1 <- c(10, 40, 15, 35, 38)
IV2 <- c(1, 0, 1, 0, 1)
IV3 <- c(5, 4, 3, 2, 1)
IV4 <- c(5, 7, 3, 8, 9)
IV5 <- c(1, 2, 1, 2, 1)

df <- data.frame(my_DV, IV1, IV2, IV3, IV4, IV5)
df$my_DV <- as.factor(df$my_DV)
df$IV1 <- as.numeric(df$IV1)
df$IV2 <- as.factor(df$IV2)
df$IV3 <- as.numeric(df$IV3)
df$IV4 <- as.numeric(df$IV4)
df$IV5 <- as.factor(df$IV5)

# train model/perform logistic regression
model_one <- train(form = my_DV ~ ., data = df, trControl = trainControl(method = "cv", number = 5), 
    method = "glm", family = "binomial", na.action=na.omit)
summary(model_one)

# get the variable importance
imp <- varImp(model_one)
imp

我想把imp中的重要性值和model_one中的系数合并起来,但是我对R还是个新手,不知道该怎么做。
如有任何建议,不胜感激!

n6lpvg4x

n6lpvg4x1#

以下是获得所需输出的多种方法之一:
将模型的摘要赋给一个对象,然后用coef()函数提取系数,与变量名和对应的重要性绑定到一个数据框中,再用order()函数根据重要性的值对行进行排序。

sum_mod <- summary(model_one)
dat <- data.frame(VariableName = rownames(imp$importance), 
    Importance = unname(imp$importance), 
    Coefficient = coef(sum_mod)[rownames(imp$importance),][,1], 
    row.names = NULL) 
dat <- dat[order(dat$Importance, decreasing = TRUE),]

结果是:

VariableName Importance Coefficient
1          IV1 100.00000   1.0999732
4          IV4  74.48458   3.6665775
2         IV21  34.43803  -7.8831404
3          IV3   0.00000  -0.9166444

相关问题