[R] Fit non-linear regressor
(Ted Harding)
Ted.Harding at nessie.mcc.ac.uk
Sat Jan 10 10:21:06 CET 2004
On 09-Jan-04 Bernardo Rangel Tura wrote:
> Hi R masters,
>
> Sorry for first mensage, this is orignal text...
>
> y<-c(2.8150,3.5239,4.0980,4.5845,5.0709,5.4824,5.8427,6.3214,6.7349,7.36
> 51)
> x<-c(37,42,47,52,57,62,67,72,77,82)
>
> I need fit R and A in y=f(x)=R*exp(A*x), with minimize sd=
> sqrt(SRR/(n-2)) where SRR is Sum of the Square of the Residuals
> and n is number of data points (in this case 10)
>
> How do I make this?
What is your objection, with these data, to a linear regression
of log(y) on x? This would give you log(R) as intercept
and A as slope, and you can get back to y by exponentiating;
though it would not quite minimise what you want, rather minimising
the SS of residuals of log(y).
Or indeed, now that I look more closely, even a simple linear
regression of y on x?
[Perhaps you need the fitted relationship to be "realistic" over
the unobserved range (0,36) of x; but the lower end of this will
be poorly estimated.]
y<-c(2.8150,3.5239,4.0980,4.5845,5.0709,
5.4824,5.8427,6.3214,6.7349,7.3651)
x<-c(37,42,47,52,57,62,67,72,77,82)
lm1<-lm(y~x)
lm2<-lm(log(y)~x)
plot(x,y,xlim=c(0,85),ylim=c(0,8))
a<-lm1$coefficients[1];b<-lm1$coefficients[2]
lR<-lm2$coefficients[1];A<-lm2$coefficients[2]
u<-(0:85)
lines(u,a+b*u,col="red")
lines(u,exp(lR+A*u))
shows that the the fit lm(y~x) fits the data better than lm(log(y)~x),
over the range of X considered. The data do not match the curvature
of the exponentiated lm2 fit.
I tend to doubt that taking the trouble to do a non-linear fit which
minimises the residuals of y would make a meaningful improvement on
lm(log(y)~x) over this range!
More interesting, perhaps, is the apparent sinusoidal effect -- slight,
but clearly visible relative to the above fitted straight line ...
... what does "x" represent?
With best wishes,
Ted.
More information about the R-help
mailing list