Sourav Chakraborty
Sourav Chakraborty

Reputation: 45

slope and intercept issue in scatterplot ggplot2

I was drawing a regression line (linear) using mtcars dataset (mpg ~ cyl). I ran a simple linear model using mpg and cyl and executed a summary.

Intercept from the linear model summary does not match with the graphical representation.

I am having hard time understanding what is going on. If I use R's base plotting function to draw the scatterplot, I get the same result as ggplot2. I changed the y-axis scale limit (0, 40) without any success.

Here is my code

data(mtcars)
library(ggplot2)
p <- ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point(shape=1) # create graph
p + geom_smooth(method = lm, se=FALSE) # add line
lm.car <- lm(mpg ~ cyl) # create linear model
summary(lm.car) # summary

http://imageshack.us/photo/my-images/213/scatterplot.png/

Here is linear model output

> summary(lm.car)

Call:
lm(formula = mpg ~ cyl)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.9814 -2.1185  0.2217  1.0717  7.5186 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  37.8846     2.0738   18.27  < 2e-16

cyl          -2.8758     0.3224   -8.92 6.11e-10 

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 3.206 on 30 degrees of freedom
Multiple R-squared: 0.7262, Adjusted R-squared: 0.7171 
F-statistic: 79.56 on 1 and 30 DF,  p-value: 6.113e-10 

Based on following suggestions I used

data(mtcars)
library(ggplot2)
p <- ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point(shape=1) +
    xlim(0, 10)# create graph
p + geom_smooth(method = lm, se=FALSE) # add line

Here is the ouput: desired graphical output

Upvotes: 1

Views: 2378

Answers (1)

Didzis Elferts
Didzis Elferts

Reputation: 98429

When you do regression analysis Intercept value shows how large will be y value if x value is 0. In case of cyl and mpg Intercept value 37.8846 means that mpg will be 37.8846 if cyl value is O.

On the ggplot2 plot regression line only shows values of cyl from 4 to 6 (as there are no other values).

If you calculate predicted value of mpg for cyl value of 4 you will get 26.38142. That's the value you see on plot.

predict(lm.car,data.frame(cyl=4))
       1 
26.38142 

Upvotes: 2

Related Questions