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

拆分混合模型拟合独立线性模型时lm报0 non-NA cases错误如何解决

问题根因

你遇到的Error in lm.fit ... 0 (non-NA) cases报错是因为拟合线性模型的数据集Train.Sample.Steeper中,因变量trainSteepOutput全部为NA值,lm()函数要求至少存在1组同时不缺失自变量、因变量的观测才能完成拟合。

结合你贴出的运行结果,还有两个逻辑问题需要修正:

  1. 你仅初始化了全NA的训练集输出列,没有把原始数据集的Output值赋值到对应训练集的输出列中
  2. 你计划筛选Input >=5的样本,但从你给出的前6行数据看,Input最大值仅为2.009,没有符合阈值的样本,训练集实际为空

可行解决方案

步骤1:直接按规则拆分生成有效训练集

不需要提前创建全NA的空数据表,直接根据你的拆分规则从原始数据中提取对应样本即可,示例代码如下:

# 先根据你的实际业务规则调整拆分阈值,若Input为标准化后的数据可适当调低阈值
split_threshold <- 1 # 你原计划用的阈值为5,可根据全量数据的Input分布调整

# 拆分steeper组训练集:Input >= 阈值的样本
Train.Sample.Steeper <- data[data$Input >= split_threshold, c("Input", "Output")]
colnames(Train.Sample.Steeper) <- c("trainSteepInput", "trainSteepOutput")

# 拆分flatter组训练集:Input < 阈值的样本
Train.Sample.Flatter <- data[data$Input < split_threshold, c("Input", "Output")]
colnames(Train.Sample.Flatter) <- c("trainFlatInput", "trainFlatOutput")

步骤2:拟合前校验训练集有效性

执行以下代码确认训练集符合拟合要求:

# 确认两组样本量均≥2(线性回归至少需要2个有效观测才能拟合)
nrow(Train.Sample.Steeper)
nrow(Train.Sample.Flatter)

# 确认训练集无全量缺失值
sum(is.na(Train.Sample.Steeper))
sum(is.na(Train.Sample.Flatter))

步骤3:拟合线性模型

校验通过后执行拟合代码即可正常运行:

# 拟合steeper组线性模型
Train.Sample.Steep.lm <- lm(trainSteepOutput ~ trainSteepInput, data = Train.Sample.Steeper)
# 拟合flatter组线性模型
Train.Sample.Flat.lm <- lm(trainFlatOutput ~ trainFlatInput, data = Train.Sample.Flatter)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:06