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

使用drc包drm函数进行非线性回归预测的警告问题求助

解决drc包predict函数的数组运算弃用警告问题

我帮你排查了这个问题,其实这个警告不是你的代码或数据格式导致的,而是drc包内部代码和R新版本语法兼容性的问题:

问题原因

从R 4.1.0版本开始,R官方弃用了“在数组-向量运算中循环长度为1的数组”这种写法,而drc包的predict.drc函数在计算置信区间时,刚好用到了这种即将被移除的语法,所以才会批量抛出这个警告。你尝试把times转成向量的操作其实没用,因为问题出在包的内部逻辑里,和你的输入格式无关。

解决办法

这里有几个可行的方案:

  1. 临时抑制警告(最简便)
    如果你确认预测结果是正确的(这个警告不影响计算结果),可以用suppressWarnings()包裹你的predict调用,直接屏蔽这些提示:

    preds <- suppressWarnings(predict(model.drm, times = times, interval = "confidence", level = 0.95))
    
  2. 等待包版本更新
    这是drc包的内部代码问题,包的维护者后续应该会针对R的语法更新修复这个问题。你可以定期检查CRAN上的drc包版本,更新到最新版后警告应该会消失。

  3. 手动计算置信区间(可选)
    如果你不想依赖包的内部实现,可以手动提取模型的参数协方差矩阵,自己计算预测值的置信区间,示例代码如下:

    # 提取模型参数和协方差矩阵
    params <- coef(model.drm)
    vcov_mat <- vcov(model.drm)
    
    # 定义MM.2模型的预测函数
    mm2_pred <- function(t, b, d) d * t / (b + t)
    
    # 计算预测值
    pred_vals <- mm2_pred(times, params[1], params[2])
    
    # 用delta方法计算预测值的方差
    grad <- c(-params[2]*times/(params[1]+times)^2, times/(params[1]+times))
    var_pred <- apply(grad, 2, function(g) g %*% vcov_mat %*% g)
    
    # 计算95%置信区间
    tquan <- qt(0.975, df = model.drm$df.residual)
    ci_lower <- pred_vals - tquan * sqrt(var_pred)
    ci_upper <- pred_vals + tquan * sqrt(var_pred)
    
    # 组合结果
    preds_manual <- cbind(pred_vals, ci_lower, ci_upper)
    colnames(preds_manual) <- c("Prediction", "Lower", "Upper")
    

额外说明

你的模型拟合是完全正常的,这个警告只是语法层面的提示,不会影响预测结果的准确性,所以不用太担心结果的可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:21