[英]Confidence Interval for mle2 Regression Line
我正在用R中的mle2进行非线性回归,我想在最佳拟合曲线周围生成95%的逐点置信带。 下面显示了我要执行的操作的简化示例,其中尝试在mle2 fit对象上使用预测。 有关如何执行此操作的任何建议?
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)
您可能需要尝试以下资源:
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)覆盖图。 这可能很麻烦,但仍然可行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.