Hello,
I want to see if i can separate out a growth spurt from a linear growth. In the
following code I add some gompertz growth to a sqrt growth curve
library(data.table);
library(ggplot2)
library(brms)
addGrowth <- function(x,w,a,b,l){
  f <-sapply(x-w[1], function(s) if(s<0) 90 else s)
  log(a) - gompertz(f, log(a),b,l)
}
set.seed(3032)
z <- data.table(x=1:150)
dur <- c(50, 90);
asymp <- 1.15;b <-30;l <- 0.30
noise <- rnorm(nrow(z),0,sd=0.1)
z$y <-   z[,sqrt((x))+noise ]
z$ydup <- z[, exp(log(sqrt(x)) + addGrowth(x, dur, asymp, b, l)  ) +noise ]
ggplot(z,aes(x,ydup))+geom_line()+labs(x="x",y="y")+
  geom_line(data=z[x %between% dur,],aes(x,y=y),col='red',linetype=2)+
  geom_vline(data=data.table(dur=dur),aes(xintercept=dur),linetype = 2,color='grey')+
  ggtitle(glue("Asymptote(a)=Log({asymp}), Offset(b)={b} Rate(l)={l}",asymp=round(asymp,3)))
I tried to model this using brms. Notice i set gr1_id to  90 in regions
outside [50,90]. Thats because the growth additive effect is near zero for those values.
I’ve also set lb=0 for the parameters b and l since they need to be
positive .
z <- z[, gr1_id := sapply(x-dur[1], function(s) if(s<0) 90 else s)]
m1 <- brm(
  bf(
    log(ydup) ~  slope*x + (log(a) - (log(a) * exp(-b * exp(-l * gr1_id)))),
    slope ~  1,
    a    ~ 1,
    b    ~ 1,
    l    ~ 1,
    nl = TRUE),
  data=z, family=gaussian(),
  prior = c(
    prior("normal(0,10)",nlpar='slope'),
    prior("normal(0, 10)",lb=0, nlpar = "a"),
    prior("normal(30,5)",lb=0, nlpar = "b"),
    prior("normal(0.3, 1)",lb=0, nlpar = "l")
  ),
  control = list(adapt_delta = 0.999))
 Family: gaussian
  Links: mu = identity; sigma = identity
Formula: log(ydup) ~ slope * x + (log(a) - (log(a) * exp(-b * exp(-l * gr1_id))))
         slope ~ 1
         a ~ 1
         b ~ 1
         l ~ 1
   Data: z (Number of observations: 150)
Samples: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup samples = 4000
Population-Level Effects:
                Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
slope_Intercept     0.01      0.00     0.01     0.01       2243 1.00
a_Intercept         4.37      0.19     4.01     4.74       1937 1.00
b_Intercept        27.53      5.39    16.49    38.11       1117 1.00
l_Intercept         0.03      0.00     0.02     0.03       1007 1.00
Family Specific Parameters:
      Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
sigma     0.21      0.01     0.18     0.23       2066 1.00
Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample
is a crude measure of effective sample size, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).
Though b is estimated decently, the others ) are far removed.
My first reaction is that i miss specified the model, have i? How would i correct
it?
Thanks much
- Operating System:
 Linux
- brms Version:
 2.7