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

如何为time及mod1-mod5的各水平组合计算并保存LM斜率?

实现方案(R语言)

可以通过分组拟合线性模型并提取系数的方式完成需求,以下是两种常用实现方式:

方法一:使用tidyverse工具链(推荐)

借助dplyr的分组功能和broom包的模型结果提取能力,代码简洁易读:

1. 加载依赖包

library(dplyr)
library(broom)

2. 分组计算斜率

假设你的数据框名为df,执行以下代码:

slope_results <- df %>%
  # 按time和所有调节变量进行分组
  group_by(time, mod1, mod2, mod3, mod4, mod5) %>%
  # 过滤掉观测数不足2的分组(无法拟合有效线性模型)
  filter(n() >= 2) %>%
  # 对每组拟合模型并提取斜率、可选添加R²等指标
  summarise(
    slope = coef(lm(my_depend ~ my_predict, data = cur_data()))["my_predict"],
    r_squared = glance(lm(my_depend ~ my_predict, data = cur_data()))$r.squared,
    .groups = "drop"  # 完成计算后取消分组状态
  )

3. 保存结果

将计算好的斜率结果保存为CSV文件:

write.csv(slope_results, "grouped_slopes.csv", row.names = FALSE)

方法二:基础R实现

如果偏好使用基础R函数,可通过拆分数据+遍历拟合的方式实现:

# 按所有分组变量拆分数据
groups <- with(df, interaction(time, mod1, mod2, mod3, mod4, mod5, drop = TRUE))
split_data <- split(df, groups)

# 遍历每个分组拟合模型并提取结果
slope_list <- lapply(split_data, function(sub_df) {
  # 跳过观测数不足的分组
  if (nrow(sub_df) < 2) return(NULL)
  model <- lm(my_depend ~ my_predict, data = sub_df)
  # 整理当前分组的结果
  data.frame(
    time = unique(sub_df$time),
    mod1 = unique(sub_df$mod1),
    mod2 = unique(sub_df$mod2),
    mod3 = unique(sub_df$mod3),
    mod4 = unique(sub_df$mod4),
    mod5 = unique(sub_df$mod5),
    slope = coef(model)["my_predict"],
    r_squared = summary(model)$r.squared
  )
})

# 合并所有结果并保存
slope_results <- do.call(rbind, slope_list)
write.csv(slope_results, "grouped_slopes_baseR.csv", row.names = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:40:17