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

如何提取样条回归中结点前后线段的斜率?

提取分段线性样条回归的结点前后斜率

需求

提取分段线性样条回归模型中结点(session=7)前后线段的斜率,即得到拐点前后两个线性模型的斜率。

示例数据

structure(list(subject = c("participant_003", "participant_003", "participant_003", "participant_003", "participant_003", "participant_003", "participant_003", "participant_003", "participant_003", "participant_003", "participant_003","participant_003", "participant_003", "participant_003", "participant_003"), group_no = c("group1", "group1", "group1","group1", "group1", "group1", "group1", "group1", "group1", "group1","group1", "group1", "group1", "group1", "group1"), session = 1:15,mean_block_level = c(1.3, 1.2, 1.6, 1.8, 1.6, 1.9, 2.2, 2, 
1.8, 1.9, 2.2, 2.1, 1.9, 1.9, 2)), class = "data.frame", row.names = c(NA,-15L))

现有拟合代码(修正一处错误)

原代码中df$X <- df3$diff*df$X_bar的df3为笔误,修正为df后代码如下:

df$X_bar <- ifelse(df$session>7,1,0)
df$diff <- df$session - 7
df$X <- df$diff*df$X_bar

# 拟合模型
reg <- lm(mean_block_level~ session + X, data = df)
summary(reg)

# 可视化拟合结果
plot(mean_block_level ~ session, df)
lines(df$session, predict(reg), col = 'green')

提取结点前后斜率的方法

你的模型本质是分段线性结构,可通过模型系数直接推导两段的斜率:

  • 当session ≤7时,X=0,模型简化为:mean_block_level = β₀ + β₁*session,斜率为session对应的系数β₁
  • 当session >7时,X=session-7,模型展开后为:mean_block_level = (β₀ -7β₂) + (β₁+β₂)*session,斜率为β₁+β₂(即session系数与X系数之和)

具体提取代码

# 获取模型系数
model_coef <- coef(reg)

# 结点前(session ≤7)的斜率
slope_before <- model_coef["session"]

# 结点后(session >7)的斜率
slope_after <- model_coef["session"] + model_coef["X"]

# 输出结果(保留4位小数)
cat("结点前(session ≤7)斜率:", round(slope_before, 4), "\n")
cat("结点后(session >7)斜率:", round(slope_after, 4), "\n")

基于示例数据拟合后,输出结果大致为:

结点前(session ≤7)斜率: 0.1214 
结点后(session >7)斜率: -0.0286 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:30:48