如何解决通过按列在 R 中的值过滤列来应用 glm()
我有一个数据框,我们称之为因变量、各种自变量(指标)和一个过滤变量。我的目标是通过在我的过滤变量中过滤不同的类别来运行回归。例如,如果我想为 code == "all"
运行回归,我将只获取我的数据框、过滤代码并运行回归:
sample_tib %>%
filter(code == "all") %>%
glm(love ~ .,data = .,family = "gaussian")
但是我面临着几个问题:
- 在上面的示例中,我的
glm()
将采用所有列,而不是 除了code
。回归的理想输入是love ~ ind1 + ind2 + ... + ind_n
; - 通过
code
中的所有代码进行过滤并运行不同的模型代价高昂,而且并不是真正的 我想要的东西。
也许存在一个过滤数据框的函数,然后运行回归并将其结果嵌套在新的数据框或列表中?我试图弄清楚这一点并遇到了 this 问题和漂亮的 Dave Gruenewald 的解决方案。但他的方法只采用一种模式 - x ~ y
,一个因变量和一个自变量。这显然不是我需要的。
那么,对于这个问题,有没有什么优雅的解决方案或特定的包和功能?
数据:
sample_tib <- data.frame(
code = c(
"all","all","Data Science","Data Engineer","Data Engineer"
),love = runif(36),ind1 = runif(36),ind2 = runif(36),ind3 = runif(36),ind4 = runif(36),ind5 = runif(36),ind6 = runif(36),ind7 = runif(36)
)
解决方法
我们可以使用 dplyr
中的 nest_by
- 我们只是使用
nest_by
进行分组 - 只需在
list
内的mutate
中创建模型
注意:没有使用除 dplyr
之外的其他软件包
library(dplyr)
sample_tib %>%
nest_by(code) %>%
mutate(model = list(glm(love ~ .,data = data,family = 'gaussian'))) %>%
ungroup
-输出
# A tibble: 3 x 3
code data model
<chr> <list<tibble[,8]>> <list>
1 all [12 × 8] <glm>
2 Data Engineer [12 × 8] <glm>
3 Data Science [12 × 8] <glm>
,
我们可以拆分数据并将 glm
分别应用于每个 code
。
library(dplyr)
library(purrr)
sample_tib %>%
group_split(code) %>%
map(function(x) glm(love~.,data = select(x,-code),family = "gaussian"))
select(x,-code)
从数据中删除 code
列,以便您可以使用 love~.
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。