Cristian Montes
2010-Aug-02 23:20 UTC
[R] Confidence Bands in nonlinear regression using optim and maximum likelihood
Hello,
I am trying to plot confidence bands on the mean and prediction bands for the
following
nonlinear regression, using maximum likelihood via optim. A toy example with
data and
code of what I am trying to accomplish is:
VOL<-c(0.01591475, 1.19147935 ,6.34102460, 53.68809287, 91.90143074,
116.21397007,
146.41843056, 215.64535337, 256.53149673, 315.73609232)
Age <-c(1.622222, 2.833333 , 3.927778, 7.150000, 8.166667,
8.752778 , 9.444444, 10.797222 ,11.725000, 12.775000)
with that I fit the following likelihood function
loglik <- function(param, x, y)
{
b0 <- param[1]
b1 <- param[2]
sigma <- param[3]
res <- dnorm(y, b0*exp(b1/x), sigma, log= T)
.value <- sum(res)
}
regression <- optim(par = c(800,-2,.2),
fn = loglik,
method = "L-BFGS-B",
lower = c(-Inf, -Inf, 1e-10),
control = list(fnscale = -1),
x = Age,
y = VOL,
hessian = T)
confint.par <- sqrt(diag(solve(regression$hessian *-1)))
now that I have confidence intervals for each parameter, how can a draw
confidence
bands for the mean regression line?
Any help will be appreciated.
Cristián Montes
Site Productivity Division Head
Bioforest S.A.
Chile.
[[alternative HTML version deleted]]
Peter Dalgaard
2010-Aug-03 06:48 UTC
[R] Confidence Bands in nonlinear regression using optim and maximum likelihood
Cristian Montes wrote:> Hello, > > I am trying to plot confidence bands on the mean and prediction bands for the following > nonlinear regression, using maximum likelihood via optim. A toy example with data and > code of what I am trying to accomplish is: > > VOL<-c(0.01591475, 1.19147935 ,6.34102460, 53.68809287, 91.90143074, 116.21397007, > 146.41843056, 215.64535337, 256.53149673, 315.73609232) > Age <-c(1.622222, 2.833333 , 3.927778, 7.150000, 8.166667, > 8.752778 , 9.444444, 10.797222 ,11.725000, 12.775000) > > with that I fit the following likelihood function > > loglik <- function(param, x, y) > { > b0 <- param[1] > b1 <- param[2] > sigma <- param[3] > > res <- dnorm(y, b0*exp(b1/x), sigma, log= T) > .value <- sum(res) > } > > > regression <- optim(par = c(800,-2,.2), > fn = loglik, > method = "L-BFGS-B", > lower = c(-Inf, -Inf, 1e-10), > control = list(fnscale = -1), > x = Age, > y = VOL, > hessian = T) > > confint.par <- sqrt(diag(solve(regression$hessian *-1)))Um, that's SE, not confidence intervals.> > now that I have confidence intervals for each parameter, how can a draw confidence > bands for the mean regression line?You can use the delta method. You need to establish the gradient of the expected mean with respect to the parameters, then pre- and post-multiply it (as in g'Vg) onto the variance-covariance matrix of the parameters. All of this is based on linear approximation theory. Doing it via direct likelihood profiling is considerably harder.> > > Any help will be appreciated. > > Cristi?n Montes > Site Productivity Division Head > Bioforest S.A. > Chile. > > [[alternative HTML version deleted]] > > > > ------------------------------------------------------------------------ > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Peter Dalgaard Center for Statistics, Copenhagen Business School Phone: (+45)38153501 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com