如何从 nls 计算 95% 预测区间

FMM*_*FMM 4 r nls predict non-linear-regression

借用这个问题的示例数据,如果我有以下数据并且我将以下非线性模型拟合到它,我如何计算我的曲线的95%预测 区间?

library(broom)
library(tidyverse)

x <- seq(0, 4, 0.1)
y1 <- (x * 2 / (0.2 + x))
y <- y1 + rnorm(length(y1), 0, 0.2)

d <- data.frame(x, y)

mymodel <- nls(y ~ v * x / (k + x),
            start = list(v = 1.9, k = 0.19),
            data = d)

mymodel_aug <- augment(mymodel)

ggplot(mymodel_aug, aes(x, y)) +
  geom_point() +
  geom_line(aes(y = .fitted), color = "red") +
  theme_minimal()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

举个例子,我可以轻松地从线性模型计算预测区间,如下所示:

## linear example

d2 <- d %>%
  filter(x > 1)

mylinear <- lm(y ~ x, data = d2)

mypredictions <-
  predict(mylinear, interval = "prediction", level = 0.95) %>%
  as_tibble()

d3 <- bind_cols(d2, mypredictions)

ggplot(d3, aes(x, y)) +
  geom_point() +
  geom_line(aes(y = fit)) +
  geom_ribbon(aes(ymin = lwr, ymax = upr), alpha = .15) +
  theme_minimal()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ben*_*ker 6

根据链接的问题,它看起来像investr::predFit函数看起来会执行您想要的操作。

\n\n
investr::predFit(mymodel,interval="prediction")\n
Run Code Online (Sandbox Code Playgroud)\n\n

?predFit没有解释如何计算间隔,但?plotFit说:

\n\n
\n

非线性回归的置信/预测带(即\n\n\xe2\x80\x98nls\xe2\x80\x99 类的对象)基于 Bates & Watts (2007) 中描述的线性近似。该函数由 \xe2\x80\x98nlstools\xe2\x80\x99 包中的\n \xe2\x80\x98plotfit\xe2\x80\x99 函数激发。

\n
\n\n

也称为Delta 方法(例如参见emdbook::deltavar)。

\n