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

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Mon Dec 11 23:31:40 CET 2023



On 2023-12-11 5:27 p.m., Daniel Nordlund wrote:
> On 12/10/2023 2:50 PM, Rui Barradas 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
>>
>>
>>
> After playing with this for a little while, I realized that the problem 
> with plotting the confidence limits is the addition of ylim(470, 500). 
> The confidence values are outside the ylim values.  Remove the limits, 
> or increase the range, and the confidence curves will plot.
> 
> Hope this is helpful,
> 
> Dan
> 

  Or use + scale_y_continuous(limits = c(470, 500), oob = scales::squish)



More information about the R-help mailing list