mle2回归线的置信区间

时间:2015-05-14 16:15:07

标签: r

我正在使用R中的mle2进行非线性回归,我希望在最佳拟合曲线周围生成95%的逐点置信带。我试图做的一个简化示例如下所示,我尝试在mle2拟合对象上使用预测。有关如何做到这一点的任何建议吗?

library(bbmle)

# Fabricated data
e.u <- function( x, k ) { exp(-k * x) }
n <- 40
t.bio <- 1:n
bio <- 10*e.u(t.bio,log(2)/10) + rnorm(n,0,sqrt(e.u(t.bio,log(2)/10)))

#Use mle2 to estimate the parameters
intake.guess <- 10
rc.guess <- 0.07

n.log.like <- function(intake,k) {
  sum.y <- 0
  for (i in 1:length(bio)) {
    x <- intake * e.u(t.bio[i],k)
    y <- bio[i]
    sum.y <- sum.y + log( dnorm(y,x,0.1*sqrt(y)) ) }
  return(-sum.y)
}   

b <- mle2(n.log.like,
        start=list(
            intake=intake.guess,
            k=rc.guess),
        data=list(
            t.bio=t.bio,
            bio=bio),
        method="Nelder-Mead",
        skip.hessian=FALSE)

intake <- coef(summary(b))[1,1]         
rc <- coef(summary(b))[2,1]         
summary(b)

#Scatter plot
bio.p <- numeric(n)
x <- 1:n
for (i in 1:n) { bio.p[i] <- intake * e.u(x[i],rc) }
plot(x,bio.p,type="l",log="xy",main="",
     xlab="Days After Intake",ylab="Excretion")
points(t.bio,bio)

#I want to generate a confidence interval on the regression line
bio.hat <- predict(b)

1 个答案:

答案 0 :(得分:0)

您可能想要尝试此资源:

https://stat.ethz.ch/R-manual/R-patched/library/stats/html/predict.lm.html

se.fit传递了predict()个参数。如果TRUE,它将计算SE。我没试过。

另一种方法是使用library(ggplot2),使用其中一个参数,您可以自动在您的绘图上覆盖置信水平。一个例子,

c <- ggplot(mtcars, aes(qsec, wt))
c + stat_smooth(se = TRUE) + geom_point()

这将在情节周围放置一个带来表示置信区间。默认情况下,se设置为TRUE。

参考: http://svitsrv25.epfl.ch/R-doc/library/ggplot2/html/stat_smooth.html

第三,您可以通过设置par(new = TRUE)来计算置信区间并覆盖图。这可能很麻烦但仍然可行。