demo/emaxfit.R

emax.fit<- function (y, dose, iparm = c("ed50", "e0", "emax"), ed50cutoff = 2.5 * max(doselev)) 
{
    dm <- tapply(y, dose, mean)
    dsd <- sqrt(tapply(y, dose, var))
    intercept <- rep(1, length(dose))
    doselev <- sort(unique(dose))
    est3 <- rep(NA, 3)
    estA <- rep(NA, 2)

        e0 <- min(dm)
        emax <- max(dm) - e0
		ed50 <- max(doselev)/2
        Sparm <- c(ed50 = ed50, e0 = e0, emax = emax)

        fit <- try(nls(y ~ e0 + (emax * dose)/(dose + ed50), 
            start = Sparm, control = nls.control(maxiter = 100), 
            trace = F), silent = T)

    AcceptConv <- F
    if (class(fit) == "nls") {
        est3 <- coef(fit)
        if (coef(fit)[1] > 0) {
            if (coef(fit)[1] <= ed50cutoff) {
                vc <- as.vector(vcov(fit))
                seout <- SeEmax3(fit, doselev)
                fitpred <- seout$fitpred
                sdpred <- seout$sdpred
				sddif <- seout$sddif
                AcceptConv <- T
            }
        }
    }
    if (!AcceptConv) {
        fitL <- lm(y ~ dose)
        sigL <- summary(fitL)$sigma
        predobj <- predict(fitL, data.frame(dose = doselev), se.fit = T)
        fitpred <- predobj$fit
        sdpred <- predobj$se.fit
		sddif <- doselev * sqrt(vcov(fitL)[2, 2])
    }
    return(list(fitpred = fitpred, 
        sdpred = sdpred, sddif = sddif))
}

SeEmax3<-function (fit, doselev) 
{
    E0<-coef(fit)[2]
    ED50<-coef(fit)[1]
    EMAX<-coef(fit)[3]
    fitpred <- E0+(EMAX*doselev)/(ED50+doselev)
    fitdif <- fitpred - E0
    vfcov <- vcov(fit)
    sddif <- sqrt((fitdif^2) * (vfcov[3, 3]/coef(fit)[3]^2 + 
        vfcov[1, 1]/(coef(fit)[1] + doselev)^2 - (2 * vfcov[1, 
        3])/(coef(fit)[3] * (coef(fit)[1] + doselev))))
    covint <- -((doselev * coef(fit)[3])/(coef(fit)[1] + doselev)^2) * 
        vfcov[2, 1] + (doselev/(coef(fit)[1] + doselev)) * vfcov[2, 
        3]
    sdpred <- sqrt(vfcov[2, 2] + sddif^2 + 2 * covint)
    return(list(fitpred = fitpred, sdpred = sdpred, fitdif = fitdif, 
        sddif = sddif))
}

Try the MSToolkit package in your browser

Any scripts or data that you put into this service are public.

MSToolkit documentation built on May 2, 2019, 6:30 p.m.