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

如何合并队列样本的glmnet模型结果并生成累积模型与可视化?

合并多个glmnet模型结果并绘制可视化图

步骤1:完善模型拟合代码

先修正原代码的语法问题,确保LASSO模型正确拟合:

library(tidyr)
library(dplyr)
library(glmnet)
library(ggplot2)

# 统一数据名,使用你提供的SLE28sy_w20_dat3
data_long <- 
  SLE28sy_w20_dat3 |>
  pivot_longer(cols = starts_with('EE'), 
               names_to = 'EE_variant',
               values_to = 'Y')

data_nested <- 
  data_long |>
  group_by(EE_variant) |>
  nest(data = -EE_variant)

# 拟合LASSO模型(alpha=1),修正语法闭合问题
las_glmnet <- 
  data_nested |>
  rowwise() |>
  summarise(the_model = list(glmnet(x = data |> select(-Y) |> data.matrix(),
                                    y = data |> select(Y) |> data.matrix(),
                                    alpha = 1)))

步骤2:提取所有模型的系数与lambda信息

从每个glmnet模型中提取系数路径和对应lambda值,整理为结构化数据框:

# 提取每个模型的系数路径与lambda
model_coefs <- las_glmnet |>
  mutate(
    coef_paths = list(
      coef(the_model) |> 
        as.matrix() |> 
        t() |> 
        as.data.frame() |> 
        mutate(lambda = the_model$lambda)
    )
  ) |>
  select(EE_variant, coef_paths) |>
  unnest(coef_paths)

# 转为长格式,适配ggplot绘图
model_coefs_long <- model_coefs |>
  pivot_longer(cols = -c(EE_variant, lambda),
               names_to = "predictor",
               values_to = "coefficient")

步骤3:用ggplot2绘制可视化图

提供两种实用的可视化方案:

方案1:叠加所有模型路径+均值参考线

展示每个EE变体的系数路径,同时添加均值路径作为整体趋势参考:

# 计算每个lambda和预测器下的系数均值
coef_means <- model_coefs_long |>
  group_by(lambda, predictor) |>
  summarise(mean_coef = mean(coefficient), .groups = "drop")

ggplot() +
  # 单个模型路径(浅色,避免杂乱)
  geom_line(data = model_coefs_long,
            aes(x = log(lambda), y = coefficient, color = EE_variant),
            alpha = 0.3) +
  # 均值路径(深色粗线,突出整体趋势)
  geom_line(data = coef_means,
            aes(x = log(lambda), y = mean_coef, color = predictor),
            linewidth = 1) +
  labs(x = "Log(Lambda)", y = "系数值",
       title = "不同EE变体的LASSO系数路径",
       color = "EE变体 / 预测变量") +
  theme_minimal()

方案2:按预测器分面展示

聚焦每个预测变量在不同模型中的系数变化:

ggplot(model_coefs_long, aes(x = log(lambda), y = coefficient, color = EE_variant)) +
  geom_line(alpha = 0.6) +
  facet_wrap(~predictor, scales = "free_y") +
  labs(x = "Log(Lambda)", y = "系数值",
       title = "按预测变量分组的LASSO系数路径",
       color = "EE变体") +
  theme_minimal()

关键提示

  • 使用log(lambda)作为x轴是因为glmnet的lambda范围通常为对数尺度,能让系数变化趋势更清晰
  • 若需要聚焦特定lambda值(如交叉验证选出的lambda.min或lambda.1se),可在提取系数时指定s参数,例如coef(the_model, s = the_model$lambda.min)
  • 大样本量下,降低单个模型路径的alpha值可避免图面过于拥挤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:45:06