Blame | Last modification | View Log | Download | RSS feed
times <- c(0, 1, 3, 7, 14, 28, 56, 90, 120)k_in <- c(0.1, 0.15, 0.16, 0.18, 0.2)lrc_in <- mean(log(k_in))lrc_sd_in <- sd(log(k_in))n_sample <- length(times) * 2const <- c(s1 = 1, s2 = 1)prop <- c(s1 = 0.07, s2 = 0.03)const_in <- rep(const, times = c(3, 2) * n_sample)prop_in <- rep(prop, times = c(3, 2) * n_sample)pred <- as.numeric(sapply(k_in, function(k) rep(100 * exp(- k * times), each = 2)))set.seed(123456L)d_syn <- data.frame(time = rep(times, 5, each = 2),ds = rep(paste0("d", 1:5), each = n_sample),study = rep(c("s1", "s2"), times = c(3 * n_sample, 2 * n_sample)),value = rnorm(length(pred), pred, sqrt(const_in^2 + pred^2 * prop_in^2)))library(nlme)f_nlsList <- nlsList(value ~ SSasymp(time, 0, 100, lrc) | ds,data = d_syn,start = list(lrc = -3))(fm_tc_study <-## suppressWarnings( ## as the fit seems to be overparameterisednlme(f_nlsList,weights = varConstProp(form = ~ fitted(.) | study),control = list(sigma = 1))## ))(ints <- intervals(fm_tc_study))## Check if intervals include input used for data generationstopifnot(exprs = {ints$fixed["lrc", "lower"] < lrc_inints$fixed["lrc", "upper"] > lrc_inall.equal(c(ints$fixed["lrc", "est."],ints$reStruct$ds["sd(lrc)", "est."]),c(lrc_in, lrc_sd_in), tol = 1e-2) # diff. 0.00797 seenints$varStruct[1:2, "lower"] < constints$varStruct[3:4, "lower"] < propints$varStruct[1:2, "upper"] > constints$varStruct[3:4, "upper"] > propall.equal(as.numeric(ints$varStruct[c("prop.s1", "prop.s2"), "est."]),as.numeric(prop), tol = 0.15) # diff. 0.062 seen})## We do not get warnings if we fix the constant part of the error modelfm_tc_study_CF <-nlme(f_nlsList,weights = varConstProp(form = ~ fitted(.) | study,fixed = list(const = c(s1 = 1, s2 = 1))))summary(fm_tc_study_CF)(ints_cf <- intervals(fm_tc_study_CF))stopifnot(all.equal(as.numeric(ints_cf$varStruct[, "est."]),as.numeric(prop), tol = 0.15) # diff. 0.1168 seen)