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

R语言提取多组多元线性回归系数及lmList报错排查

分组回归系数提取与lmList报错解决

一、用tidyverse+broom保留分组变量carb提取系数

你的原代码通过split()分组后丢失了carb的分组标识,改用group_by()+nest()的方式可以直接保留分组列,完整提取每个carb组的回归系数:

library(tidyverse)
library(broom)

df <- mtcars
# 按carb分组嵌套,拟合模型后提取带分组标识的系数
result <- df %>%
  group_by(carb) %>%
  nest() %>%
  mutate(model = map(data, ~lm(mpg ~ cyl + hp + wt, data = .x)),
         tidied = map(model, tidy)) %>%
  unnest(tidied) %>%
  select(carb, term, estimate, p.value) # 按需保留结果列

运行后result会包含每个carb值对应的截距、各变量系数及统计量。

二、lmList报错"missing values in object"的解决

你提供的lmList代码使用了SentLength等mtcars不存在的变量,即使替换为正确公式(mpg ~ cyl + hp + wt | carb),仍会因为部分carb分组样本量不足报错:mtcars中carb=6和carb=8各只有1个样本,而你要拟合的模型包含3个自变量+截距,至少需要4个样本才能计算系数,这两个组无法拟合会产生NA,而lmList默认na.action=na.fail会触发缺失值报错。

有两种解决方式:

方法1:过滤样本量足够的分组

先筛选出样本数≥4的carb分组,再拟合模型:

library(nlme)

# 保留样本量≥4的carb组
df_filtered <- df %>%
  group_by(carb) %>%
  filter(n() >= 4) %>%
  ungroup()

fit <- lmList(mpg ~ cyl + hp + wt | carb, data = df_filtered)
# 提取系数
coef(fit)

方法2:设置na.action跳过无法拟合的组

直接修改na.action参数,让lmList自动跳过无法拟合的分组:

library(nlme)

fit <- lmList(mpg ~ cyl + hp + wt | carb, data = df, na.action = na.omit)
# 提取系数
coef(fit)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:46:11