Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Confidence intervals won't plot for predicted data (plotting problem)

I have a model from which i have predicted data but i have an aesthetics error on the geom_ribbon() argument of my plot when i try to add my confidence intervals. I think its something to do with the length of my CIs dataframe but not sure what changes i need to make, so if anyone if good with this sort of thing that would be great. The error reads;

Aesthetics must be either length 1 or the same as the data (52): y Backtrace

All of my code used is here with a piece of my data at the end;

carbonD_mod = gam(co2 ~ s(timeStep, k = 50, bs = "cs") + s(month, k = 12, bs = "cc"), 
                data = carbonD,
                family = gaussian(link = "identity"))

#creating a vector of year and month
ts = seq(469,520, length.out = 52) #the 52 weeks from 1998
mon = seq(1,12, length.out = 52)
#combine vectors into a df
newdata = data.frame(timeStep = ts, month = mon)

#creating our new predictions
new_preds = predict(carbonD_mod, newdata, type = 'response', se.fit = TRUE)
new_fit = new_preds$fit

#creating confidence intervals
preds_ci = predict(carbonD_mod, newdata, type = 'link', se.fit = TRUE)
lower_ci = preds_ci$fit - 1.96 * preds_ci$se.fit
upper_ci = preds_ci$fit + 1.96 * preds_ci$se.fit

#combining confidence intervals into a df
predframe_ci = data.frame(lwr = lower_ci, upr = upper_ci, timeStep = ts, cases = mon)

#plotting our 1998 model predictions
ggplot(newdata, aes(timeStep, co2)) + 
  geom_ribbon(data = predframe_ci, aes(ymin = lwr, ymax = upr), fill = 'grey') +
  geom_line(aes(timeStep, new_fit), col = 'red')

data

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

carbonD
       co2 month year timeStep
1   315.42     1 1959        1
2   316.31     2 1959        2
3   316.50     3 1959        3
4   317.56     4 1959        4
5   318.13     5 1959        5
6   318.00     6 1959        6
7   316.39     7 1959        7
8   314.65     8 1959        8
9   313.68     9 1959        9
10  313.18    10 1959       10
11  314.66    11 1959       11
12  315.43    12 1959       12
13  316.27     1 1960       13
14  316.81     2 1960       14
15  317.42     3 1960       15
16  318.87     4 1960       16
17  319.87     5 1960       17
18  319.43     6 1960       18
19  318.01     7 1960       19
20  315.74     8 1960       20

>Solution :

You need inherit.aes = FALSE in geom_ribbon, since your ribbon data frame does not contain a co2 column

ggplot(newdata, aes(timeStep, co2)) + 
  geom_ribbon(data = predframe_ci, 
              aes(x = timeStep, ymin = lwr, ymax = upr), fill = 'grey',
              inherit.aes = FALSE, alpha = 0.5) +
  geom_line(aes(timeStep, new_fit), col = 'red')

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading