

fnenvir(rmutil)                              R Documentation

_C_h_e_c_k _c_o_v_a_r_i_a_t_e_s _a_n_d _p_a_r_a_m_e_t_e_r_s _o_f _a _f_u_n_c_t_i_o_n

_D_e_s_c_r_i_p_t_i_o_n_:

     `fnenvir' finds the covariates and parameters in a
     function and can modify it so that the covariates used
     in it are found in the data object specified by
     `envir'.

     If the data object has class, repeated, `times' will
     use the response times as a covariate.

_U_s_a_g_e_:

     fnenvir(z, envir=sys.frame(sys.parent()), name=NULL, expand=TRUE)

_A_r_g_u_m_e_n_t_s_:

       z: A function.

   envir: The environment or data object of class, repeated,
          tccov, or tvcov, in which the function is to be
          interpreted.

    name: Character string giving the name of the data
          object specified by `envir'. Ignored unless the
          latter is such an object and only necessary when
          `finterp' is called within other functions.

  expand: If TRUE, expand functions with only time-constant
          covariates to return one value per observation
          instead of one value per individual. Ignored
          unless `envir' is an object of class, repeated.

_V_a_l_u_e_:

     The (modified) function, of class formulafn, is
     returned with its attributes giving the (new) model
     function, the covariate names, and the parameter names.

_A_u_t_h_o_r_(_s_)_:

     J.K. Lindsey

_S_e_e _A_l_s_o_:

     `finterp'

_E_x_a_m_p_l_e_s_:

     fn <- function(p) a+b*x
     fnenvir(fn)
     fn <- function(p) a+p*x
     fnenvir(fn)
     x <- 1:4
     fnenvir(fn)
     fn <- function(p) p[1]+exp(p[2]*x)
     fnenvir(fn)
     #
     y <- matrix(rnorm(20),ncol=5)
     y[3,3] <- y[2,2] <- NA
     resp <- restovec(y)
     xx <- tcctomat(x)
     z1 <- matrix(rnorm(20),ncol=5)
     z2 <- matrix(rnorm(20),ncol=5)
     z3 <- matrix(rnorm(20),ncol=5)
     zz <- tvctomat(z1)
     zz <- tvctomat(z2,old=zz)
     reps <- rmna(resp, ccov=xx, tvcov=zz)
     rm(y, x, z1, z2)
     #
     # repeated objects
     func1 <- function(p) p[1]+p[2]*x+p[3]*z2
     print(fn1 <- fnenvir(func1, envir=reps))
     fn1(2:4)
     #
     # time-constant covariates
     func2 <- function(p) p[1]+p[2]*x
     print(fn2 <- fnenvir(func2, envir=reps))
     fn2(2:3)
     print(fn2a <- fnenvir(func2, envir=xx))
     fn2a(2:3)
     #
     # time-varying covariates
     func3 <- function(p) p[1]+p[2]*z1+p[3]*z2
     print(fn3 <- fnenvir(func3, envir=reps))
     fn3(2:4)
     print(fn3a <- fnenvir(func3, envir=zz))
     fn3a(2:4)
     # including times
     func3b <- function(p) p[1]+p[2]*z1+p[3]*z2+p[4]*times
     print(fn3b <- fnenvir(func3b, envir=reps))
     fn3b(2:5)
     #
     # with typing error and a variable not in the data object
     func4 <- function(p) p[1]+p2[2]*z1+p[3]*z2+p[4]*z3
     print(fn4 <- fnenvir(func4, envir=reps))
     #
     # first-order one-compartment model
     # data objects for formulae
     dose <- c(2,5)
     dd <- tcctomat(dose)
     times <- matrix(rep(1:20,2), nrow=2, byrow=T)
     tt <- tvctomat(times)
     # vector covariates for functions
     dose <- c(rep(2,20),rep(5,20))
     times <- rep(1:20,2)
     # functions
     mu <- function(p) {
             absorption <- exp(p[1])
             elimination <- exp(p[2])
             absorption*exp(-p[3])*dose/(absorption-elimination)*
                     (exp(-elimination*times)-exp(-absorption*times))}
     shape <- function(p) exp(p[1]-p[2])*times*dose*exp(-exp(p[1])*times)
     # response
     conc <- matrix(rgamma(40,shape(log(c(0.1,0.4))),mu(log(c(1,0.3,0.2)))),
             ncol=20,byrow=T)
     conc[,2:20] <- conc[,2:20]+0.5*(conc[,1:19]-matrix(mu(log(c(1,0.3,0.2))),
             ncol=20,byrow=T)[,1:19])
     conc <- restovec(ifelse(conc>0,conc,0.01))
     reps <- rmna(conc, ccov=dd, tvcov=tt)
     #
     print(fn5 <- fnenvir(mu,envir=reps))
     fn5(c(0,-1.2,-1.6))

