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

使用add_predictions()得到的对数模型预测值偏差过大,求原因

问题原因与解决办法
  • 核心原因:预测值是对数转换后的结果,未做反变换
    你拟合的模型是log(standard_conc_ngul) ~ ct,模型学习的是ct对standard_conc_ngul对数的线性关系。add_predictions()默认输出的是模型预测的对数转换后的值,而非原始浓度值。直接拿这个对数结果和原始的standard_conc_ngul对比,数值量级完全不同,自然偏差极大。

  • 快速验证方式
    查看添加的预测列,数值应该是较小的负数或正数(对应原始浓度的对数),和原始浓度的量级差异明显。比如原始浓度为100ng/ul时,对数后约为4.6,用4.6和100对比肯定会出现巨大偏差。

  • 解决办法:对预测值做指数反变换
    先通过add_predictions()得到对数预测值,再用mutate()计算指数转换后的原始浓度预测值。示例代码:

library(tidyverse)
library(modelr)

# 假设你的模型名为mod,数据集名为df
df_with_pred <- df %>%
  add_predictions(mod, var = "log_conc_pred") %>%
  mutate(conc_pred = exp(log_conc_pred))

此时conc_pred才是对应原始standard_conc_ngul的预测值,和实际值对比会吻合模型的拟合效果。

  • 可选优化:偏差校正
    如果模型假设是对数正态分布,直接指数转换可能存在轻微偏差(因为E[exp(Y)] ≠ exp(E[Y]),其中Y为对数变量)。若需要更精准的预测,可添加残差方差的校正项:
# 提取模型残差方差
resid_var <- sigma(mod)^2
df_with_pred <- df_with_pred %>%
  mutate(conc_pred_corrected = exp(log_conc_pred + resid_var / 2))

不过你的模型R²高达0.97,这个校正的影响极小,多数场景下直接指数转换即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:01:21