[英]Error when calculating variable importance with categorical variables using the caret package (varImp)
[英]How to show the coefficient values and variable importance for logistic regression in R using caret package train() and varImp()
我们正在进行探索性逻辑回归,并试图确定变量在预测结果中的重要性。 我们正在使用 caret 包中的 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 还很陌生,我不知道该怎么做。
非常感谢任何建议!
这是获得所需输出的多种方法之一:
您将模型的摘要分配给一个对象,然后使用coef()
函数提取系数,然后将其与变量名称和相应的重要性绑定到一个数据框中。 然后,您可以使用order()
根据重要性值对行进行排序。
sum_mod <- summary(model_one)
dat <- data.frame(VariableName = rownames(imp$importance),
Importance = imp$importance,
Coefficient = coef(sum_mod)[rownames(imp$importance),][,1],
row.names = NULL)
dat <- dat[order(dat$Overall, decreasing = TRUE),]
结果:
VariableName Overall 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.