[R] ggplot2: Get the regression line with 95% confidence bands

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Mon Dec 11 00:52:42 CET 2023


This can easily be done using predict.lm to get the intervals (confidence
or prediction).
?predict.lm contains a plotting example using ?matplot from the graphics
package. Here's a somewhat verbose version for your example (first
converting Year to numeric, of course):

df=data.frame(year= c(2012,2015,2018,2022), score=c(495,493, 495, 474))

fitted <- lm(score ~ year, data = df)
with(df,
   matplot(x = year, y = cbind(score,predict(fitted,interval = 'conf',
level = .95))
            ,type = c('p', rep('l',3))
            ,pch = 16
            ,lty = c('blank','solid', 'dashed','dashed') ## or use numeric
values of 0,1,2,2
            ,lwd = c(0,2,1,1)
            ,col = c('black','darkblue', 'red','red')
            ,xlab = 'Year'
            ,ylab = 'Data with Fitted Line and Conf Intervals'

   )
)

Cheers,
Bert



On Sun, Dec 10, 2023 at 2:51 PM Rui Barradas <ruipbarradas using sapo.pt> wrote:

> Às 22:35 de 10/12/2023, varin sacha via R-help escreveu:
> >
> > Dear R-experts,
> >
> > Here below my R code, as my X-axis is "year", I must be missing one or
> more steps! I am trying to get the regression line with the 95% confidence
> bands around the regression line. Any help would be appreciated.
> >
> > Best,
> > S.
> >
> >
> > #############################################
> > library(ggplot2)
> >
> > df=data.frame(year=factor(c("2012","2015","2018","2022")),
> score=c(495,493, 495, 474))
> >
> > ggplot(df, aes(x=year, y=score)) + geom_point( ) +
> geom_smooth(method="lm", formula = score ~ factor(year), data = df) +
> labs(title="Standard linear regression for France", y="PISA score in
> mathematics") + ylim(470, 500)
> > #############################################
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
> Hello,
>
> I don't see a reason why year should be a factor and the formula in
> geom_smooth is wrong, it should be y ~ x, the aesthetics envolved.
> It still doesn't plot the CI's though. There's a warning and I am not
> understanding where it comes from. But the regression line is plotted.
>
>
>
> ggplot(df, aes(x = as.numeric(year), y = score)) +
>    geom_point() +
>    geom_smooth(method = "lm", formula = y ~ x) +
>    labs(
>      title = "Standard linear regression for France",
>      x = "Year",
>      y = "PISA score in mathematics"
>    ) +
>    ylim(470, 500)
> #> Warning message:
> #> In max(ids, na.rm = TRUE) : no non-missing arguments to max;
> returning -Inf
>
>
>
> Hope this helps,
>
> Rui Barradas
>
>
>
> --
> Este e-mail foi analisado pelo software antivírus AVG para verificar a
> presença de vírus.
> www.avg.com
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list