EC50.calc<-function(coef,vcov,conf.level=.95) { # calculates confidence interval based upon Fieller's thm. # assumes link is linear in dose call <- match.call() b0<-coef[1] b1<-coef[2] var.b0<-vcov[1,1] var.b1<-vcov[2,2] cov.b0.b1<-vcov[1,2] alpha<-1-conf.level zalpha.2 <- -qnorm(alpha/2) gamma <- zalpha.2^2 * var.b1 / (b1^2) EC50 <- -b0/b1 const1 <- (gamma/(1-gamma))*(EC50 + cov.b0.b1/var.b1) const2a <- var.b0 + 2*cov.b0.b1*EC50 + var.b1*EC50^2 - gamma*(var.b0 - cov.b0.b1^2/var.b1) const2 <- zalpha.2/( (1-gamma)*abs(b1) )*sqrt(const2a) LCL <- EC50 + const1 - const2 UCL <- EC50 + const1 + const2 conf.pts <- c(LCL,EC50,UCL) names(conf.pts) <- c("Lower","EC50","Upper") return(conf.pts,conf.level,call=call) } EC50.calc(coefficients(fluor.fit),summary.glm(fluor.fit)$cov.unscaled) $conf.pts: Lower EC50 Upper 9.013366 9.538564 10.04191 $conf.level: [1] 0.95 $call: EC50.calc(coef = coefficients(fluor.fit), vcov = summary.glm(fluor.fit)$cov.unscaled)