Grokbase Groups R r-help April 2011
FAQ

[R] Plotting a quadratic line on top of an xy scatterplot

Josh B
Apr 11, 2011 at 7:29 pm
Dear Listserv,

Here is my latest in a series of simple-seeming questions that dog me.

Consider the following data:

x <- read.table(textConnection("temperature probability
0.11 9.4
0 2.3
0.38 8.7
0.43 9.2
0.6 15.6
0.47 8.7
0.09 12.8
0.11 9.4
0.01 7.7
0.83 8
0.65 9.3
0.05 7.4
0.34 10.1
0.02 4.8
0.07 9.1
0.6 15.6
0.01 8.4
0.9 9.6
0.83 8
0.12 8.4
0.01 8
0 5
0.11 9.7
0.41 7.4
0.05 9.4
0.09 8.3
0 6.1
0.12 8.4
0.73 7.8
0 4.2"), header = TRUE, as.is = TRUE)
closeAllConnections()

I modeled the relationship: Probability = f(Temperature), i.e., probability as a
function of temperature.

I found that there is a significant quadratic term in the model:

summary(lm(x[,2] ~ x[,1] + I(x[,1]^2)))

Now the question is: how do I plot it?

I can do this:
plot(x[,2] ~ x[,1])

...but I would also like to add a line corresponding to the quadratic function.
In other words, I want to visually show the relationship among the variables
that is being modeled. How do I do it? I think the curve() command will be used,
but I don't know how to employ it.

Thanks very much in advance.

Sincerely,
-----------------------------------
Josh Banta, Ph.D
Center for Genomics and Systems Biology
New York University
100 Washington Square East
New York, NY 10003
Tel: (212) 998-8465
http://plantevolutionaryecology.org
reply

Search Discussions

2 responses

  • Joshua Wiley at Apr 12, 2011 at 1:12 am
    Hi Josh,

    This is by no means the fanciest solution ever, but as there are
    predict methods for many types of models in R, I thought I would show
    it this way.

    ## fit the model
    model <- lm(probability ~ poly(temperature, 2), data = x)

    ## create line values
    dat <- data.frame(temperature = seq(min(x$temperature, na.rm = TRUE),
    max(x$temperature, na.rm = TRUE), by = .01))
    ## add predicted y values
    dat$yhat <- predict(model, dat)

    ## plot data
    plot(probability ~ temperature, data = x)
    ## add predicted line
    lines(x = dat$temperature, y = dat$yhat, type = "l")

    Hope this helps,

    Josh
    On Mon, Apr 11, 2011 at 12:29 PM, Josh B wrote:
    Dear Listserv,

    Here is my latest in a series of simple-seeming questions that dog me.

    Consider the following data:

    x <- read.table(textConnection("temperature probability
    0.11 9.4
    0 2.3
    0.38 8.7
    0.43 9.2
    0.6 15.6
    0.47 8.7
    0.09 12.8
    0.11 9.4
    0.01 7.7
    0.83 8
    0.65 9.3
    0.05 7.4
    0.34 10.1
    0.02 4.8
    0.07 9.1
    0.6 15.6
    0.01 8.4
    0.9 9.6
    0.83 8
    0.12 8.4
    0.01 8
    0 5
    0.11 9.7
    0.41 7.4
    0.05 9.4
    0.09 8.3
    0 6.1
    0.12 8.4
    0.73 7.8
    0 4.2"), header = TRUE, as.is = TRUE)
    closeAllConnections()

    I modeled the relationship: Probability = f(Temperature), i.e., probability as a
    function of temperature.

    I found that there is a significant quadratic term in the model:

    summary(lm(x[,2] ~ x[,1] + I(x[,1]^2)))

    Now the question is: how do I plot it?

    I can do this:
    plot(x[,2] ~ x[,1])

    ...but I would also like to add a line corresponding to the quadratic function.
    In other words, I want to visually show the relationship among the variables
    that is being modeled. How do I do it? I think the curve() command will be used,
    but I don't know how to employ it.

    Thanks very much in advance.

    Sincerely,
    -----------------------------------
    Josh Banta, Ph.D
    Center for Genomics and Systems Biology
    New York University
    100 Washington Square East
    New York, NY 10003
    Tel: (212) 998-8465
    http://plantevolutionaryecology.org
    ? ? ? ?[[alternative HTML version deleted]]

    ______________________________________________
    R-help at 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.


    --
    Joshua Wiley
    Ph.D. Student, Health Psychology
    University of California, Los Angeles
    http://www.joshuawiley.com/
  • Jjap at Apr 12, 2011 at 4:14 am
    Hi,

    Is it just me or it appears the "temperature" and "probability" should be
    reversed?
    --------
    Anyhow it should help you to assign your model to a variable (as Joshua did
    with his own suggestion)

    yourmodel <-lm(x[,2] ~ x[,1] + I(x[,1]^2)) # again, taking literally the way
    you formulated it...

    And you could then access the coefficients individually:

    c <- coef(yourmodel)[1] # for the intercept
    b <- coef(yourmodel)[2]
    a <- coef(yourmodel)[3]

    To build yourself a vector of predicted y-values based on a vector of
    x-values ("dat" as per Joshua's post)
    and pass them to the "lines" function to be plotted over your existing plot.

    This is less convenient than using the "predict" but sometimes it helps to
    do the arithmetic at a lower level.
    HTH


    --
    View this message in context: http://r.789695.n4.nabble.com/Plotting-a-quadratic-line-on-top-of-an-xy-scatterplot-tp3443018p3443693.html
    Sent from the R help mailing list archive at Nabble.com.

Related Discussions

Discussion Navigation
viewthread | post

3 users in discussion

Jjap: 1 post Joshua Wiley: 1 post Josh B: 1 post