I have been puzzling over how to fit some fixed effects models
to a set of data.  My response function is

response <- function(a, b, c, alpha1, alpha2, indicator, t, t2)
{
        z = a + 
                b * (t) * exp(-alpha1 * t) +
                indicator *c * (t2) * exp(-alpha2 * t2)
}

where t2 = t - 4 and "indicator" is a 0-1 vector denoting
when t > 4.  Each test subject receives equal doses at t = 0 and 
t = 4.  The dose can vary from subject to subject.

Also note the following:
1.  Var(e[it]) = sigma1^2 for t<=4; Var(e[it]) = sigma2^2 for t>4.
        This is motivated by my data exploration.  
2.  b,c > 0 for biological interpretability
3.  t varies over {0,2,4,6,8,10}.  
4.  For a variety of reasons, "a", "alpha1", and "alpha2" must
        be held constant over all of the test subjects.

The function nlsList( ) is not appropriate because it assumes
that all of the parameters are allowed to vary with each level of
a specified grouping variable (in this case, "subject.id").  
I have been able to fit nls( ) models using the following 
syntax:

model.nls1 <- 
nls(y ~ response(10, b[subject.id], c[subject.id], alpha1, alpha2, 
                            indicator, t, t2),
                         data = foo.frame, 
                         start = list(b = rep(25,12), c = rep(100,12), 
                                            alpha1 = 0.5, alpha2 = 0.5), 
                         trace = T)

The start values were motivated by some data exploration, and
the results appear to be stable.  The value "a=10" was fixed also
as a result of the initial data exploration, and appears necessary
in order for the model to be stable.

Unfortunately, the estimated b- and c-values for several subjects are
negative.  Also, nls( ) does not allow a "weights = " statement
like gnls( ) does.  When I try

model.nls1 <- 
gnls(y ~ response(10, b[subject.id], c[subject.id], alpha1, alpha2, 
                            indicator, t, t2),
                         data = foo.frame, 
                         start = list(b = rep(25,12), c = rep(100,12), 
                                            alpha1 = 0.5, alpha2 = 0.5), 
                         trace = T)

I get the message "Error in eval(expr, envir, enclos) : Object "b" not
found"
This surprises me, since my understanding is that gnls( ) is essentially
nls( ) but with "weights = " and "correlation = " options.  I suppose
that separate fixed effects for each subject could be estimated from
gnls( ) if I created a separate indicator variable for each subject and
added them to the data frame (I have not yet done this); however, this 
does not address the need for the b,c parameters to be constrained
greater than zero.


I would gratefully welcome suggestions.


Much thanks in advance,
   david paul

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to