使用drc包drm函数进行非线性回归预测的警告问题求助
解决drc包predict函数的数组运算弃用警告问题
我帮你排查了这个问题,其实这个警告不是你的代码或数据格式导致的,而是drc包内部代码和R新版本语法兼容性的问题:
问题原因
从R 4.1.0版本开始,R官方弃用了“在数组-向量运算中循环长度为1的数组”这种写法,而drc包的predict.drc函数在计算置信区间时,刚好用到了这种即将被移除的语法,所以才会批量抛出这个警告。你尝试把times转成向量的操作其实没用,因为问题出在包的内部逻辑里,和你的输入格式无关。
解决办法
这里有几个可行的方案:
临时抑制警告(最简便)
如果你确认预测结果是正确的(这个警告不影响计算结果),可以用suppressWarnings()包裹你的predict调用,直接屏蔽这些提示:preds <- suppressWarnings(predict(model.drm, times = times, interval = "confidence", level = 0.95))等待包版本更新
这是drc包的内部代码问题,包的维护者后续应该会针对R的语法更新修复这个问题。你可以定期检查CRAN上的drc包版本,更新到最新版后警告应该会消失。手动计算置信区间(可选)
如果你不想依赖包的内部实现,可以手动提取模型的参数协方差矩阵,自己计算预测值的置信区间,示例代码如下:# 提取模型参数和协方差矩阵 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
相关产品推荐
相关产品推荐

