[R] How to plot linear, cubic and quadratic fitting curve in a figure?
David Winsemius
dwinsemius at comcast.net
Wed Jun 13 19:08:50 CEST 2012
On Jun 13, 2012, at 10:29 AM, Kristi Glover wrote:
>
> Hi R experts,
> Could you please help me to fit a linear, cubic and quadratic curve
> in a figure? I was trying to show all these three fitting curves
> with different colour in one figure.
> I spent substantial time to figure it out, but I could not.
>
> I have given here a example and what I did for linear, but no idea
> for cubic and quadratic fitting curve
>
>
>> dput(test)
> structure(list(sp = c(4L, 5L, 9L, 12L, 14L), env = c(12L, 18L,
> 20L, 17L, 15L)), .Names = c("sp", "env"), class = "data.frame",
> row.names = c(NA,
> -5L))
>> plot(test$sp~test$env, main = "S vs. temp", xlim=c(0,20),
>> ylim=c(0,14), ylab="S",xlab="env")
>> linear<-lm(test$sp~test$env)
>> quadratic<-lm(test$sp~test$env+I(test$env^2))
>> #summary(quadratic)
>> cubic<-lm(test$sp~test$env+I(test$env^2)+I(test$env^3))
>> #summary(cubic)
>> #fitting curve
>> abline(linear)
>>
> Here I did for linear, but now I don't how I can plot quadratic and
> cubic line in the figure with different colour. I further wanted to
> put r2 value on the top of the fitting line.
> ON linear fitting curve, I can see the line originated from left to
> right (cover whole x axis). I could not plot the line only within
> the data set.
> Would any one help me to figure it? I think it is not difficult but
> for me- it is really taking time.
>
There is the poly function that does the heavy lifting and also
preserves the statistical propriety of polynomial fits.
> quadratic<-lm( sp ~ poly(env, 2), data=test)
> #summary(quadratic)
> cubic<-lm( sp ~ poly(env, 3), data=test)
> #summary(cubic)
> #fitting curve
> plot( sp~ env, data=test, main = "S vs. temp", xlim=c(0,20),
ylim=c(0,14), ylab="S",xlab="env")
> abline(linear)
> lines( test$env[order(test$env)] , predict(quadratic)[order(test
$env)] )
> lines( test$env[order(test$env)] , predict(cubic)[order(test
$env)] , col="red")
You can substitute:
lines( x=seq( min(test$env) , max(test$env), len=100) ,
y= predict(model, data.frame(env=seq( min(test$env) , max(test$env),
len=100) ) ) )
... if you want smoother output.
--
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list