首页 > 解决方案 > 如何从 R 中的回归模型列表中提取对象?

问题描述

我想编写一个my_function将数据框作为输入的函数。在这个函数中,我运行一个 logit 回归来预测影响决定是否禁止观察的重要因素。显着性定义为 p 值小于 0.05 ( p-value < 0.05)。我不知道如何提取这些因素。

my_function(data){
   fit <- glm(is_prohibited ~ ., data, family = "binomial")
}

我不知道如何检查因子的重要性并提取我需要的因子,因为我只能提取模型的系数。

数据:

structure(list(is_prohibited = c("No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "Yes", 
"Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", 
"Yes", "Yes", "Yes", "Yes", "Yes"), weight = c(69L, 79L, 82L, 
81L, 84L, 81L, 64L, 76L, 77L, 88L, 86L, 84L, 89L, 84L, 86L, 82L, 
84L, 88L, 88L, 89L, 86L, 76L, 87L, 67L, 70L, 76L, 71L, 91L, 72L, 
88L), length = c(53L, 52L, 54L, 50L, 48L, 51L, 53L, 52L, 53L, 
52L, 46L, 52L, 52L, 50L, 47L, 54L, 54L, 50L, 49L, 50L, 50L, 57L, 
47L, 50L, 50L, 51L, 52L, 52L, 48L, 54L), width = c(17L, 21L, 
20L, 23L, 19L, 20L, 16L, 20L, 23L, 23L, 19L, 17L, 22L, 23L, 23L, 
24L, 20L, 21L, 20L, 17L, 20L, 18L, 21L, 24L, 21L, 23L, 18L, 21L, 
17L, 20L), type = c("Suitcase", "Bag", "Suitcase", "Bag", "Suitcase", 
"Bag", "Suitcase", "Bag", "Suitcase", "Bag", "Suitcase", "Bag", 
"Suitcase", "Bag", "Suitcase", "Bag", "Suitcase", "Bag", "Suitcase", 
"Bag", "Suitcase", "Bag", "Suitcase", "Bag", "Suitcase", "Bag", 
"Suitcase", "Bag", "Suitcase", "Bag")), row.names = c(NA, 30L
), class = "data.frame")

标签: rfunction

解决方案


我相信您正在寻找 broom::tidy :

fit <- glm(as.factor(is_prohibited) ~ ., data, family = "binomial")

library(broom)
tidy(fit)

  term         estimate std.error statistic p.value
  <chr>           <dbl>     <dbl>     <dbl>   <dbl>
1 (Intercept)  -0.798     11.3      -0.0704   0.944
2 weight        0.00713    0.0534    0.133    0.894
3 length        0.0201     0.166     0.121    0.903
4 width        -0.0330     0.174    -0.189    0.850
5 typeSuitcase -0.265      0.822    -0.322    0.747

tidy(fit) 返回一个标准数据框,您可以在其中访问系数、p 值等以进行进一步计算。


推荐阅读