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

ggeffects包绘制非线性模型置信区间未显示问题求解

ggeffects绘制nlsLM非线性模型无置信区间的解决方案

问题复现

使用ggeffects为minpack.lm::nlsLM()拟合的非线性模型绘制预测图时,输出结果未显示默认应带的置信区间,复现代码如下:

# 加载依赖包
library(ggplot2) 
library(minpack.lm)  
library(ggeffects)
library(dplyr)

# 读入甲虫侵染数据集
coleo<- read.csv("coleo-infest-tree.csv")
coleo$DL<-as.numeric(coleo$DL)
coleo$V<-as.numeric(coleo$V)

# 拟合非线性幂模型
m.c.coleo<-nlsLM(V ~ b1 + b2 * I(DL^b3), start = list(b1 = 0.2164, b2 = 1.6264, b3 = 1), data = coleo)
summary(m.c.coleo)

# 绘制预测图
ggpredict(m.c.coleo, terms = "DL [all]") %>% plot(add.data = TRUE)

核心原因

nlsLM()默认拟合输出的模型对象不会自动携带可用于推断的参数方差-协方差矩阵,ggpredict()计算预测置信区间必须依赖协方差矩阵推导预测标准误,无法获取该矩阵时会默认跳过置信区间绘制,且不会抛出显性报错。

修复方法

两种方案任选其一即可:

  • 方案1:调用ggpredict()时手动传入协方差矩阵
    直接在函数内指定vcov参数,传入模型的协方差矩阵即可正常计算置信区间,代码如下:
    ggpredict(
      m.c.coleo, 
      terms = "DL [all]", 
      vcov = vcov(m.c.coleo), # 手动传入协方差矩阵
      ci_level = 0.95 # 可按需调整置信水平
    ) %>% plot(add.data = TRUE)
    
  • 方案2:拟合模型时提前保留海森矩阵
    如果后续需要多次对该模型做推断计算,可以在nlsLM()拟合阶段设置hessian = TRUE,让模型输出时自带用于计算协方差的海森矩阵,后续调用ggpredict()时无需额外设置参数即可自动识别并绘制置信区间:
    # 拟合时开启海森矩阵计算
    m.c.coleo<-nlsLM(
      V ~ b1 + b2 * I(DL^b3), 
      start = list(b1 = 0.2164, b2 = 1.6264, b3 = 1), 
      data = coleo,
      hessian = TRUE
    )
    # 直接调用即可正常显示置信区间
    ggpredict(m.c.coleo, terms = "DL [all]") %>% plot(add.data = TRUE)
    

补充说明:上述方法得到的是基于参数正态近似的Wald置信区间,若样本量较小、模型非线性程度较高,建议使用bootstrap方法计算置信区间结果更可靠,可通过ggpredict()的自助法相关参数实现,仅计算速度会慢于默认近似方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:42:25