@@ -457,26 +457,22 @@ growthSim <- function(
457457 matched_model <- match.arg(model , models )
458458 gsi <- match.fun(paste0(" .gsi_" , gsub(" " , " " , matched_model )))
459459
460- if (decay ) {
461- gsid <- function (D = 0 , ... ) {
462- return (D - gsi(... ))
463- }
464- } else {
465- gsid <- function (D = 0 , ... ) {
466- return (0 + gsi(... ))
467- }
468- }
469-
470460 out <- do.call(rbind , lapply(seq_along(params [[1 ]]), function (i ) {
471461 pars <- lapply(params , function (p ) p [i ])
472462 e_df <- as.data.frame(rbind(do.call(rbind , lapply(1 : n , function (e ) {
473- gs_res <- gsid(D = D , 1 : t , pars , noise )
463+ gs_res <- gsi(1 : t , pars , noise )
464+ y <- if (decay ) {
465+ D - gs_res $ y
466+ } else {
467+ gs_res $ y
468+ }
474469 iter_data <- data.frame (
475470 " id" = paste0(" id_" , e ), " group" = letters [i ], " time" = 1 : t ,
476- " y" = gs_res $ y , stringsAsFactors = FALSE
471+ " y" = y , stringsAsFactors = FALSE
477472 )
478473 if (returnParams ) {
479- iter_data <- cbind(iter_data , gs_res $ pars [rep(1 , nrow(iter_data )), ])
474+ iter_data <- cbind(iter_data , gs_res $ pars )
475+ iter_data <- iter_data [, - which(colnames(iter_data ) == " x" )]
480476 }
481477 if (int ) {
482478 I_iter <- rnorm(1 , mean = pars [[" I" ]], sd = noise [[" I" ]])
@@ -499,50 +495,51 @@ growthSim <- function(
499495
500496# ' @keywords internal
501497# ' @noRd
502- gsi_logistic <- function (x , pars , noise ) {
498+ . gsi_logistic <- function (x , pars , noise ) {
503499 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
504500 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
505501 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
506502 y <- a_r / (1 + exp((b_r - x ) / c_r ))
507- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
503+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
508504}
509505
510506# ' @keywords internal
511507# ' @noRd
512- gsi_logistic4 <- function (x , pars , noise ) {
508+ . gsi_logistic4 <- function (x , pars , noise ) {
513509 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
514510 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
515511 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
516512 d_r <- pars [[" D" ]] + rnorm(1 , mean = 0 , sd = noise [[" D" ]])
517513 y <- d_r + (a_r - d_r ) / (1 + exp((b_r - x ) / c_r ))
518- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " D" = d_r )))
514+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " D" = d_r , " x " = x )))
519515}
520516
521517# ' @keywords internal
522518# ' @noRd
523- gsi_logistic5 <- function (x , pars , noise ) {
519+ . gsi_logistic5 <- function (x , pars , noise ) {
524520 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
525521 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
526522 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
527523 d_r <- pars [[" D" ]] + rnorm(1 , mean = 0 , sd = noise [[" D" ]])
528524 e_r <- pars [[" E" ]] + rnorm(1 , mean = 0 , sd = noise [[" E" ]])
529525 y <- d_r + ((a_r - d_r ) / (1 + exp((b_r - x ) / c_r )) ^ e_r )
530- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " D" = d_r , " E" = e_r )))
526+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " D" = d_r , " E" = e_r ,
527+ " x" = x )))
531528}
532529
533530# ' @keywords internal
534531# ' @noRd
535- gsi_gompertz <- function (x , pars , noise ) {
532+ . gsi_gompertz <- function (x , pars , noise ) {
536533 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
537534 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
538535 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
539536 y <- a_r * exp(- b_r * exp(- c_r * x ))
540- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
537+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
541538}
542539
543540# ' @keywords internal
544541# ' @noRd
545- gsi_doublelogistic <- function (x , pars , noise ) {
542+ . gsi_doublelogistic <- function (x , pars , noise ) {
546543 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
547544 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
548545 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
@@ -551,12 +548,12 @@ gsi_doublelogistic <- function(x, pars, noise) {
551548 c2_r <- pars [[" C2" ]] + rnorm(1 , mean = 0 , sd = noise [[" C2" ]])
552549 y <- a_r / (1 + exp((b_r - x ) / c_r )) + ((a2_r - a_r ) / (1 + exp((b2_r - x ) / c2_r )))
553550 return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r ,
554- " A2" = a2_r , " B2" = b2_r , " C2" = c2_r )))
551+ " A2" = a2_r , " B2" = b2_r , " C2" = c2_r , " x " = x )))
555552}
556553
557554# ' @keywords internal
558555# ' @noRd
559- gsi_doublegompertz <- function (x , pars , noise ) {
556+ . gsi_doublegompertz <- function (x , pars , noise ) {
560557 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
561558 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
562559 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
@@ -565,115 +562,116 @@ gsi_doublegompertz <- function(x, pars, noise) {
565562 c2_r <- pars [[" C2" ]] + rnorm(1 , mean = 0 , sd = noise [[" C2" ]])
566563 y <- (a_r * exp(- b_r * exp(- c_r * x ))) + ((a2_r - a_r ) * exp(- b2_r * exp(- c2_r * (x - b_r ))))
567564 return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r ,
568- " A2" = a2_r , " B2" = b2_r , " C2" = c2_r )))
565+ " A2" = a2_r , " B2" = b2_r , " C2" = c2_r , " x " = x )))
569566}
570567
571568# ' @keywords internal
572569# ' @noRd
573- gsi_monomolecular <- function (x , pars , noise ) {
570+ . gsi_monomolecular <- function (x , pars , noise ) {
574571 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
575572 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
576573 y <- a_r - a_r * exp(- b_r * x )
577- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r )))
574+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " x " = x )))
578575}
579576
580577# ' @keywords internal
581578# ' @noRd
582- gsi_exponential <- function (x , pars , noise ) {
579+ . gsi_exponential <- function (x , pars , noise ) {
583580 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
584581 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
585582 y <- a_r * exp(b_r * x )
586- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r )))
583+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " x " = x )))
587584}
588585
589586# ' @keywords internal
590587# ' @noRd
591- gsi_linear <- function (x , pars , noise ) {
588+ . gsi_linear <- function (x , pars , noise ) {
592589 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
593590 y <- a_r * x
594- return (list (" y" = y , " pars" = data.frame (" A" = a_r )))
591+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " x " = x )))
595592}
596593
597594# ' @keywords internal
598595# ' @noRd
599- gsi_powerlaw <- function (x , pars , noise ) {
596+ . gsi_powerlaw <- function (x , pars , noise ) {
600597 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
601598 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
602599 y <- a_r * x ^ (b_r )
603- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r )))
600+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " x " = x )))
604601}
605602
606603# ' @keywords internal
607604# ' @noRd
608- gsi_logarithmic <- function (x , pars , noise ) {
605+ . gsi_logarithmic <- function (x , pars , noise ) {
609606 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
610607 y <- a_r * log(x )
611- return (list (" y" = y , " pars" = data.frame (" A" = a_r )))
608+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " x " = x )))
612609}
613610
614611# ' @keywords internal
615612# ' @noRd
616- gsi_frechet <- function (x , pars , noise ) {
613+ . gsi_frechet <- function (x , pars , noise ) {
617614 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
618615 b_r <- max(c(0 , pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])))
619616 c_r <- max(c(0 , pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])))
620617 # holding location to 0, b is shape parameter, c is scale (growth rate)
621618 y <- a_r * exp(- ((x - 0 ) / c_r )^ (- b_r ))
622- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
619+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
623620}
624621
625622# ' @keywords internal
626623# ' @noRd
627- gsi_gumbel <- function (x , pars , noise ) {
624+ . gsi_gumbel <- function (x , pars , noise ) {
628625 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
629626 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
630627 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
631628 # b is location, c is scale (rate)
632629 y <- a_r * exp(- exp(- (x - b_r ) / c_r ))
633- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
630+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
634631}
635632
636633# ' @keywords internal
637634# ' @noRd
638- gsi_weibull <- function (x , pars , noise ) {
635+ . gsi_weibull <- function (x , pars , noise ) {
639636 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
640637 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
641638 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
642639 # c is scale, b is shape
643640 y <- a_r * (1 - exp(- (x / c_r )^ b_r ))
644- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
641+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
645642}
646643
647644# ' @keywords internal
648645# ' @noRd
649- gsi_bragg <- function (x , pars , noise ) {
646+ . gsi_bragg <- function (x , pars , noise ) {
650647 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
651648 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
652649 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
653650 # a is max response, b is precision, c is x position of max response
654651 y <- a_r * exp(- b_r * (x - c_r )^ 2 )
655- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
652+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
656653}
657654
658655# ' @keywords internal
659656# ' @noRd
660- gsi_lorentz <- function (x , pars , noise ) {
657+ . gsi_lorentz <- function (x , pars , noise ) {
661658 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
662659 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
663660 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
664661 # a is max response, b is precision, c is x position of max response
665662 y <- a_r / (1 + b_r * (x - c_r )^ 2 )
666- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r )))
663+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " x " = x )))
667664}
668665
669666# ' @keywords internal
670667# ' @noRd
671- gsi_beta <- function (x , pars , noise ) {
668+ . gsi_beta <- function (x , pars , noise ) {
672669 a_r <- pars [[" A" ]] + rnorm(1 , mean = 0 , sd = noise [[" A" ]])
673670 b_r <- pars [[" B" ]] + rnorm(1 , mean = 0 , sd = noise [[" B" ]])
674671 c_r <- pars [[" C" ]] + rnorm(1 , mean = 0 , sd = noise [[" C" ]])
675672 d_r <- pars [[" D" ]] + rnorm(1 , mean = 0 , sd = noise [[" D" ]])
676673 e_r <- pars [[" E" ]] + rnorm(1 , mean = 0 , sd = noise [[" E" ]])
677674 y <- a_r * (((x - d_r ) / (c_r - d_r )) * ((e_r - x ) / (e_r - c_r ))^ ((e_r - c_r ) / (c_r - d_r )))^ b_r
678- return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " D" = d_r , " E" = e_r )))
675+ return (list (" y" = y , " pars" = data.frame (" A" = a_r , " B" = b_r , " C" = c_r , " D" = d_r , " E" = e_r ,
676+ " x" = x )))
679677}
0 commit comments