[R] Plot different regression models on one graph
Sharpie
chuck at sharpsteen.net
Sat Feb 13 20:07:35 CET 2010
Rhonda Reidy wrote:
>
> The following variables have the following significant relationships (x is
> the explanatory variable): linear, cubic, exponential, logistic. The
> linear relationship plots without any trouble.
>
> Cubic is the 'best' model, but it is not plotting as a smooth curve using
> the following code:
>
> cubic.lm<- lm(y~poly(x,3))
> lines(x,predict(cubic.lm),lwd=2)
>
> How do I plot the data and the estimated curves for all of these
> regression models in the same plot?
>
> x <- c(62.5,68.5,0,52,0,52,0,52,23.5,86,0,0,0,0,0,0,0,0,0,0)
>
> y <-
> c(0.054,0.055,0.017,0.021,0.020,0.028,0.032,0.073,0.076,0.087,0.042,0.042,0.041,0.045,0.021,0.018,0.017,0.018,0.028,0.022)
>
Hi Rhonda,
The problem is that the default behavior of predict() only produces output
corresponding to the original values of x used in the model. To get a
"smooth" curve, you will want to predict at a large number of x values that
fall within the range of the data. This can be done using the pretty()
function, or using a composition of the seq() and range() functions if you
desire more control:
# Create a new vector of X values at which to generate predictions:
predX <- pretty( x, n = 100 )
plot( y ~ x )
# Add the regression model, but generate predictions using the
# points in predX-- the default is to predict using points in x.
lines( predX, predict( cubic.lm, newdata = list( x = predX )), lwd = 2 )
The above should produce the output you want. However, I suggest Hadley
Wickham's excellent ggplot2 package-- I feel the following is more
expressive than using base graphics functions:
require( ggplot2 )
Plot <- qplot( x, y ) + stat_smooth( method = 'lm', formula = 'y ~
poly(x,3)' )
print( Plot )
The amazing power of ggplot2 is that when you want to alter or extend your
plot, you simply "add" more ggplot2 commands to your plot object:
# Add a linear regression model and change the color theme used in the
output
Plot <- Plot + stat_smooth( method = 'lm', color = 'red' ) + theme_bw()
print( Plot )
Hope this helps!
-Charlie
--
View this message in context: http://n4.nabble.com/Plot-different-regression-models-on-one-graph-tp1554606p1554622.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list