我正在使用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)
答案 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)来计算置信区间并覆盖图。这可能很麻烦但仍然可行。