首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用R映射建立多个线性模型时删除未使用的对比

在使用R映射建立多个线性模型时删除未使用的对比
EN

Stack Overflow用户
提问于 2022-11-15 16:52:59
回答 1查看 20关注 0票数 0

我正在通过一个大的数据集建立线性模型,这是不平衡的(不是所有的对比都存在于所有分组中)。是否有一种有效的方法来忽略分组有少于2个对比?在下面的示例中,testData1表示工作流正确工作的平衡数据集。testData2表示一个不平衡的数据集,该数据集会引发对比度错误。

代码语言:javascript
复制
aovFxn <- function(dat){
  lm(outcomeVar ~ predVar1, data = dat) %>%
    broom::tidy()
}

testData1 <- data.frame(
  groupVar = rep(c('a', 'b'), each = 12),
  predVar1 = c(rep(c('x', 'y', 'z'), each = 4, times = 2)),
  outcomeVar = sample(1:100, 24)
)

testData2 <- data.frame(
  groupVar = rep(c('a', 'b'), each = 12),
  predVar1 = c(rep(c('x', 'y', 'z'), each = 4),
               rep('x', 12)),
  outcomeVar = sample(1:100, 24)
)

testStats1 <- testData1 %>%
  nest(groupData = -groupVar) %>%
  mutate(df = purrr::map(groupData, aovFxn)) %>%
  unnest_legacy(df)

testStats2 <- testData2 %>%
  nest(groupData = -groupVar) %>%
  mutate(df = purrr::map(groupData, aovFxn)) %>%
  unnest_legacy(df)
EN

回答 1

Stack Overflow用户

发布于 2022-11-15 16:58:01

当出现错误时,我们可以使用tryCatchpurrr::possibly返回所需的值。

代码语言:javascript
复制
library(dplyr)
library(purrr)
paovFxn <- possibly(aovFxn, otherwise = NULL)
testData2 %>%
  nest(groupData = -groupVar) %>%
  mutate(df = purrr::map(groupData, paovFxn)) %>%
  unnest(df)%>%
  select(-groupData)

-output

代码语言:javascript
复制
 A tibble: 3 × 6
  groupVar term        estimate std.error statistic p.value
  <chr>    <chr>          <dbl>     <dbl>     <dbl>   <dbl>
1 a        (Intercept)    42.5       17.3    2.45    0.0367
2 a        predVar1y      19.7       24.5    0.805   0.441 
3 a        predVar1z       2.25      24.5    0.0917  0.929 

另一个选项是创建一个if条件

代码语言:javascript
复制
testData2 %>% 
  nest(groupData = -groupVar) %>% 
  mutate(df = map(groupData, ~ if(n_distinct(.x$predVar1) > 1) aovFxn(.x)) ) %>% 
  unnest(df, keep_empty = TRUE) %>%
  select(-groupData)

-output

代码语言:javascript
复制
# A tibble: 4 × 6
  groupVar term        estimate std.error statistic p.value
  <chr>    <chr>          <dbl>     <dbl>     <dbl>   <dbl>
1 a        (Intercept)    42.5       17.3    2.45    0.0367
2 a        predVar1y      19.7       24.5    0.805   0.441 
3 a        predVar1z       2.25      24.5    0.0917  0.929 
4 b        <NA>           NA         NA     NA      NA     

注意:如果我们不使用keep_empty = TRUE,默认情况下它将是FALSE,输出中的'groupVar‘'b’行将不存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74449392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档