You need to enable JavaScript to run this app. 如何从tidyr构建的数据框嵌套列表中提取segmented回归的斜率Est值
优惠活动
大模型
产品
解决方案
定价
更多

如何从tidyr构建的数据框嵌套列表中提取segmented回归的斜率Est值

解决方法

核心逻辑是slope()返回的每个分组结果中,每个分段变量的斜率矩阵第一列就是你需要的Est.估计值,直接提取该列即可。

修改后完整代码

library(segmented)
library(tidyr)
library(dplyr)

Group <- c("A", "B")
x <- 0:5
y <- c(0, 1, 2, 2.1, 2.3, 2,
       0, 2, 4, 4.5, 4.3, 4.4)

df <- expand.grid(x = x, Group = Group)
df$y <- y

Segmented.values <- df %>%
  nest_by(Group) %>%
  mutate(
    my.lm = list(lm(data = data, formula = y ~ x)),
    my.seg = list(segmented(my.lm, seg.Z = ~ x)),
    intercepts = list(intercept(my.seg)),
    # 直接提取斜率的Est.列,[[1]]对应seg.Z里的第一个变量x
    slopes = list(slope(my.seg)[[1]][, "Est."]),
    R2 = summary(my.seg)$r.squared
  ) %>%
  # 展开截距和斜率,多个值会自动拆为独立列
  unnest_wider(c(intercepts, slopes), names_sep = "_") %>%
  # 保留需要的列,删除中间模型对象
  select(Group, starts_with("intercepts_"), starts_with("slopes_"), R2)

输出结果

运行后得到的结果如下:

# A tibble: 2 × 6
# Groups:   Group [2]
  Group intercepts_1 intercepts_2 slopes_1 slopes_2    R2
  <fct>        <dbl>        <dbl>    <dbl>    <dbl> <dbl>
1 A         8.33e-17         2.95     1       -0.05 0.985
2 B         1.37e-16         5.90     2       -0.05 0.999

如果你不想修改上游代码,也可以在你现有输出结果的基础上直接筛选需要的列:

Segmented.values <- Segmented.values %>% select(Group, `slopes 1`, `slopes 2`)

内容的提问来源于stack exchange,提问作者Daniel Valencia C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:51:03