You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

检验单因素对多分类分组对象效应的线性模型实现方法咨询

分组检验organization对渔获率效应的简洁实现方案

你原来用do的写法已经可以实现需求,不过目前tidyverse生态下有更易读、更易维护的实现方案,完全保留你需要的按species+gear分组检验的逻辑:


方案1:输出organization各水平的效应系数与显著性

library(tidyverse)
library(broom)

df %>%
  # 按物种、渔具分组,将分组内数据嵌套为列表列
  nest_by(species, gear) %>%
  # 分组拟合线性模型,整理效应结果
  mutate(
    model = list(lm(rate ~ organization, data = data)),
    effect_res = list(tidy(model))
  ) %>%
  # 展开效应结果,过滤所需内容
  unnest(effect_res) %>%
  mutate(p.value = round(p.value, 3)) %>%
  # 仅保留organization的效应,排除无意义的截距项,过滤显著结果
  filter(term != "(Intercept)", p.value < 0.05) %>%
  # 按需保留输出列
  select(species, gear, term, estimate, std.error, p.value)

优势说明:

  • 替换了dplyr中已经不推荐使用的do函数,nest_by是目前官方推荐的分组嵌套建模方案,可读性更强
  • 可以灵活保留完整的模型对象,后续需要提取拟合优度、残差等其他指标时不需要重构流程

方案2:仅检验organization整体显著性(更精简输出)

如果你不需要看organization不同水平之间的效应差异,只需要判断每个species+gear分组下organization整体是否对渔获率有显著影响,可以用这个更精简的写法:

library(tidyverse)

df %>%
  nest_by(species, gear) %>%
  mutate(
    model = lm(rate ~ organization, data = data),
    # 提取organization的整体检验p值
    org_global_p = anova(model)$`Pr(>F)`[1]
  ) %>%
  # 过滤出organization效应显著的分组
  filter(org_global_p < 0.05) %>%
  select(species, gear, org_global_p)

额外说明

  • 这套框架的兼容性极强,如果后续确认渔获率数据不符合线性模型假设(比如零值多、右偏),仅需要将lm替换为对应的模型函数(如glm、zeroinfl等)即可,整体流程不需要调整
  • 所有输出天然保留species和gear的分组标识,不需要额外关联匹配

内容的提问来源于stack exchange,提问作者Alyssa C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:45:00