On 2011-03-29 06:57, Walter Anderson wrote:
Hello,
I need to regress data like the example below. The data points
represent friction factors derived from observed trip length data. The
function used to describe this data is a gamma function of the form,
f(t) = a * t^b * e^(c*t) and I need to regress the data to obtain the
a,b, and c coefficients. The gamma function can also be expressed in
the log-linear form, ln[f(t)] = ln[a] + b * ln[t] + c*t, which may be
easier to perform a regression on. I have performed a search for
information on the subject, and have found a few possibly related sites,
I can not figure out how to perform the regression in R. Any
help/guidance would be appreciated.
Walter
t f ln(f)
1 1 952893 13
2 2 951077 13
3 3 945991 13
4 4 942358 13
5 5 939452 13
[... more data snipped ...]
This looks like easy grist for the nls() mill. I would usually
use the log form to get reasonable starting values for the
nls interations:
## assume that your data are in a data.frame DF;
fm1 <- lm( log(f) ~ log(t) + t, data = DF )
coef(fm1)
# (Intercept) log(t) t
# 13.81370501 0.18469223 -0.05955323
startvec <- c( aa=exp(14), bb=0.2, cc=-.06 )
fm2 <- nls( f ~ aa * t^bb * exp(cc*t), data=DF, start=startvec )
#summary(fm2)
coef(fm2)
# aa bb cc
# 9.093841e+05 2.294895e-01 -5.951806e-02
## plot the data
plot( f ~ t, data=DF )
lines( fitted(fm2) ~ t, data=DF )
I wouldn't trust the model for small t.
Peter Ehlers
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.