如何从nls计算95%的预测间隔

时间:2018-10-24 16:12:11

标签: r predict nls non-linear-regression

借用该question的示例数据,如果我有以下数据,并且将以下非线性模型拟合到该数据中,该如何计算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()

enter image description here

例如,我可以很容易地从线性模型中计算出预测间隔:

## 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()

enter image description here

1 个答案:

答案 0 :(得分:2)

根据链接的问题,看起来investr::predFit函数可以完成您想要的操作。

investr::predFit(mymodel,interval="prediction")

?predFit没有解释间隔的计算方式,但是?plotFit说:

  

非线性回归的置信度/预测范围(即        “ nls”类的对象基于线性近似为        Bates&Watts(2007)中所述。这种乐趣是由        “ nlstools”软件包中的“ plotfit”功能。

也称为Delta method(例如,参见emdbook::deltavar)。