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

在R语言中为多个线性模型生成预测区间:lapply调用报错及优化方法咨询

解决多模型预测区间生成的问题

我来帮你搞定这个问题~首先咱们先拆解下你遇到的错误原因:

你用group_by() %>% do()生成的model_dna是一个数据框,其中只有model_dna_group这一列是存储各个Run对应模型的列表。而你把整个数据框传给lapply的X参数时,它会按列迭代(而不是按模型迭代),这就导致predict函数接收到的不是模型对象,自然会报错说找不到对应的函数模式的对象。

修正后的基础实现

只需要把lapply的处理对象改成数据框里的模型列表列就行:

# 修正后的lapply调用
new_dna_w_predictions <- lapply(
  X = model_dna$model_dna_group, 
  FUN = predict, 
  newdata = new_dna, 
  interval = "prediction", 
  level = 0.9
)

这样lapply就会遍历每个Run对应的lm模型,为你的new_dna数据集生成预测区间了。

更简洁的tidyverse实现方式

如果你习惯用tidyverse的工具,推荐用purrr::map替代lapply,结合nest()来更连贯地完成从建模到预测的流程,结果也更容易后续分析:

library(tidyverse)

# 1. 准备新数据集
new_dna <- tibble(conc = DNase$conc * 2)

# 2. 分组建模+生成预测,全程tidy风格
model_results <- DNase %>%
  group_by(Run) %>%
  nest() %>%  # 将每个Run的数据嵌套为列表列,替代do()的写法
  mutate(
    # 为每个分组数据生成模型
    model = map(data, ~lm(log(density) ~ log(conc), data = .x)),
    # 用每个模型生成预测区间
    predictions = map(model, predict, newdata = new_dna, interval = "prediction", level = 0.9)
  )

# 可选:将预测结果展开为数据框格式,方便查看
model_results <- model_results %>%
  mutate(predictions = map(predictions, as.data.frame)) %>%
  unnest(predictions)

这种方式的好处是所有步骤都在一个管道里完成,模型和预测结果都和原分组信息(Run)绑定在一起,后续做可视化或者进一步分析会更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:22:45