The NOAA Global Monitoring Laboratory Mauna Loa record is one of the best-known time series of atmospheric carbon dioxide (CO2). In this session, we use it to demonstrate practical, interactive data exploration tools in JMP, including Graph Builder, fit model, row diagnostics, factor profiling, and the local data filter.
After importing the Mauna Loa monthly CO2 data, we dynamically explore it, changing time windows, filtering, and comparing alternative views. We also annotate the timeline with contemporaneous events (e.g., volcanic eruptions, the COVID-era disruption, and other large-scale changes) as a hypothesis-generation exercise and discuss which conclusions are or are not supported by the data.
Attendees should leave with a curiosity to further explore CO2 data in JMP to determine for themselves if there are noticeable changes in the rate of increase in atmospheric CO2.

All right. Hi, everybody. My name is Don Lifke. I'm an R&D engineer. I only play a statistician at work. My degrees are electrical engineering, but I love statistics and using data in engineering, and that's how I got passionate about using JMP. My goal here today is to not so much convince you one way or the other what's happening with carbon dioxide data, but my goal is to just show you how easy it is to use JMP to explore data and to tell stories.
This is just the abstract from the website. The data source that we're going to use is easy to get. Here's the link to it. I'm going to just click this link here and go right to the web page. If you go to the link in the presentation, you will see this page, and what we're going to download is this Mauna Loa CO2 monthly mean data. We can download text or comma-delimited. I'll just click on this file here, and then it will show you downloads here, and you just open it up. What you'll get is a file that for me, it opens in Excel. With this data file, you'll notice that the data really doesn't belong, I mean doesn't begin until row 42 with the headers on row 41.
We can save this data file as an Excel file, and then we can open it directly into JMP, or alternately, you can take this data and just copy it and paste it right into JMP with headers. Let me show you how to open it in JMP. If we do file open, when you're opening an Excel file, you need to tell JMP what type of file you're opening. Sometimes this will default to only JMP files. I've got it set to all data files. This is the file that I saved, and I'm going to say open. But down here, I'm going to say never on enforce Excel row 1 as labels because I know it's not row 1 that has my column headers. I know my data doesn't begin until row 40 whatever it is. We're going to say never, and what JMP will do is give us this nice Excel Import Wizard here.
You can see Excel Import Wizard, and it's showing you what it's going to look like when you open it. My data really doesn't begin until row 41 and my column starts on row 40. I'm going to just type in 40 here for my column header start on row 40, oops, is it 40? Maybe it's 41. 41. There's only one row with a column header and then the data starts by default on the next row. It's showing you a preview that, "Oh, that's going to work pretty good." You just import the data, and there you have it. I've already done this, so I'm going to just close this out. I just want to show you how to pull it directly into JMP so that you don't even have to copy and paste. I just saved it as a comma-delimited file and opened it directly from JMP.
All right, the next thing that we want to do with this data... Let me close this window. The next thing that... I showed you how to do this. This will be in a presentation that I'll upload later. I try not to do death by PowerPoint. I like to just use JMP when I'm doing my presentations. You have to be able to improvise when you're using JMP and telling stories because there are so many things that will pop up in your head like, "Oh, I could do this." "Oh, I can look at it this way." I'm not going to be very scripted.
I'm going to be very improvising with what I'm presenting, but I'll try to provide a guide to you later so that if you want to follow through and do this yourself, you can follow this PowerPoint that will be uploaded by the time you're watching this. We're recording this in August. It's a Friday. It's my day off. I have a tee time right after this, so I'm very excited.
The next thing I wanted to do was add a little controversial information because people are always arguing about CO2 and this administration did this and this administration did that. That's what got me into, I'm just going to look at the data myself and see what it says. I'm not listening to any of this stuff, and I'm just going to find out for myself. I used AI to create a file with the month and the year and the president, and then I just pulled that data directly into JMP. Let me show you what that looks like. It was really easy. I just prompted AI, it spit it out, and I just pulled it right in to JMP. Piece of cake. AI, yay, did something right. One out of 42 ain't bad.
Then next, you can take this data file, and you can join it with your CO2 data. Let's see. Let me try that. If it crashes and burns, we're lucky because I've already done this. Here are my two data files that I want to join. Sorry, I want to leave the PowerPoint open so that I don't lose my spot. But you can see that this data file has a year and a month column, so does this one. One is capitalized, one is not, but that's okay. We can tell JMP that what we want to do is join this data table, this CO2 data table, with this one that we created. I'm telling it this month year president, which was the other file I had AI create. But what I want to do is have year and year match in the two data tables and month match in the two data tables, and then what it'll do is it'll pull in that month, year, and president from the data file that I created and put it into my CO2 data file that I downloaded from the website and pulled into JMP.
I'm going to cancel out of this because I've already done this, but I just want to show you how easy that is to do. I'm going to close those individual files, and I'm going to open up the joined data file, which is right here. What I've done, I always turn on the little column headers. This little histogram-looking thing here is nice. If it doesn't come on by default, you can click that, and it'll show you everything that's in your column. You can see all the different columns I have. I've added some other stuff here that I'm going to use as part of my presentation, some of the residuals and stuff. I'll show you where those came from. But now I have a nice data file with the data and also with the president column added as well. The column that I'm going to be interested in most is this decimal date, because I'm treating date as a continuous variable. 1958 March is going to be 1958.2027.
I'm also going to look at this column, deseasonalized. Let me just show you what this looks like. If you use the Graph Builder, you can look at your data, the date versus your... If you just look at the average data, what you see is the data is very choppy. It's sinusoidal in the... Let me see if I can get a good fit of the sine wave stuff going on there. There you go. You can see the little sine waves going on. That's the seasonal variation of the CO2 data, and what we really want to do is look at it in a more normalized fashion. What I'm going to use is this deseasonalized instead of the average, so it's more of a linear without the sinusoidal month-to-month variation.
All right, let's start with trying to fit a model. If you have JMP Pro, this conference is more for people new to JMP, but I want to show you something you can do in JMP Pro in case you ever are wondering why would I need JMP Pro versus JMP? Let me just show you that. I'm going to go back and do it with just regular JMP. But you can do this predictive modeling and do this Model Screening, and what's nice about the model screening is it's going to do all of these different models for you all at once.
I can say, let me try and predict deseasonalized versus decimal date, and I want to include two-way interactions and quadratics. We know there's curvature, we just looked at the data. Let's include two-way interactions. I don't really have two variables, I just have one, but normally I would include that. It'll fit all of these fairly quickly. While it's doing that, I'll have a little sip of coffee. Boom, quicker than I can sip my coffee, there are a bunch of models for me.
These Bootstrap Forest, Boosted Tree, these are all more advanced models, more than I need for this little simple curve that I'm looking at. I think it's way overkill. I'm not going to use these. I look down here, Fit Stepwise, Fit Least Squares. I'm going to use this fit least squares. I already know because I looked at the data that fit stepwise gives me exactly the same model as fit least squares because it reduces the model to just the main factor and its square term. You can click on fit least squares, and then you can run the model, and here's what you'll get. This is exactly what I would have gotten if I just said Analyze > Fit Model.
Let me go back and show you. If you don't have JMP Pro, what you could do, you just say Analyze > Fit Model. We want to look at deseasonalized versus decimal date. I'm going to put decimal date here, but I also want the square term so we can actually use this macros button and say a polynomial to a degree of two, so it's going to give me decimal date and decimal date squared. Boom, we have a model. Same thing that I just did in JMP Pro. I just did it manually using only one particular model. What I want to do is show you that these p-values say, "Hey, those are pretty significant statistically. That's probably not randomness going on." When I explain p-values in non-stats terms, because remember, I'm not a statistician, I like to tell people that it's the probability that the signal that they saw was just random chance and not real. That's, to me, the best way to understand it.
If we look at this data closely, this is a plot of the data versus the date, and there's a fit in here. There's a line. I'm zooming in on the x-axis. See how easy that is in JMP? You just get the little hand tool and drag the axis to change the scale. Try doing that in you know what program. You can see that the data actually fluctuates from this curve. That's what got my interest. What's going on? Why is this data fluctuating? Does that mean somebody is able to change it to make things better or do things get worse through time?
If we look at this data, I like to look at the residuals as well. The residuals are the unexplained variation. It's going to be the distance from the actual data to the curve fit. If you take this plot, lay it flat, and plot these data points against that flat line, this is what you get. You get the residuals. This shows you how much that data is varying from that nice parabolic curve. Scientists and engineers, I know what you're thinking, why are you using a parabola? Parabola's terrible. This is an exponential problem. Yes, I know. But that wasn't one of my options when I first did my model screen. Don't worry, we're going to get there. The reason the parabola is bad, let me just show you that, if you... Well, I guess, is it going to extrapolate out?
If you were to extrapolate out beyond the data, this curve would go back up again. We know that's not what happens in real life. Parabola, probably not the best choice, but it fits this data pretty darn good. I have a really good R-square. I have three 9s for an R-square. My root-mean-squared error is less than one. This data, by the way, is in parts per million, so it's less than one part per million. You can see that the data is typically within one, maybe two parts per million of the curve itself. Pretty good model regardless.
All right, let's look at some other things. I'm going to close this. I'm going to just run some scripts now. I've shown you how to create the model. What I want to do is run some scripts and show you that you can include the Local Data Filter as well. I turned on the local data filter, and what I can see is this model with only the presidents that I choose. I can choose them all. I'm just holding Shift, and I choose them all, or I can choose a subset of them and see what the model looks like to just a subset of them.
What is this telling me? You can draw your own conclusions. To me, what it shows is what was going on within each term, whether that curvature is going up or going down or flat. You can scroll through each of these and see what was going on with each of these president filters. I'm just scrolling through them all. When you get this data, you can go through it and do this yourself and draw your own conclusions. I'm not going to lean you one way or the other.
All right, let me go back to the presentation. When we fit the model, we had a pretty good R-square. I colored the rows by president in my data. You can do rows, color by column, and tell it that you want to color it by president. That's why the data is different colors here. You can get the equation if you want it. This is your y = ax + bx² + c equation from your old... I don't know what grade we learned parabolas. Was it fourth grade, sixth grade? I don't know. I'm a little too old for that.
But if we zoom in and look at the deviation from that curve, and I showed you this on the residuals plot in JMP, we can see that there's this odd behavior going on. There's some time periods where it starts to drift away from the line, then there's some time periods where it starts to drift back towards the line. You can see it tends to be within these certain administrative periods. I don't even know which ones they are. They're actually the legend's up here behind my picture on my screen. You can draw your own conclusions about that.
We can save the residuals as well and then look at the trends of the residuals by president. These residuals, the leftovers, the distance from the actual curve, you can save those in JMP. Then I've done that. Let me show you over here. If you want to know where your model is, in the bottom of your JMP screen, there will be little screens that show you what you have open with the current data table. This is what I had open. With this model, when I fit everything here, I can go in here and do Row Diagnostics, or it's under Save Columns, I can save the residuals to its own column. If we look at my data table, I've saved those values, so they are right here.
We can look at a fit of those versus the president, and I turned on this local data filter again. That is going to be one way to look at... Let me show you where the local data filter is because I didn't show you. Here's the local data filter. Right now it's remove local data filter, where that's where it would say put a local data filter in, and then you could pick president as your local data filter. Now I can see by president what happened through time versus the fit curve. Did they get closer to the curve or did they get further from the curve? You can look through each of these and see which administration tended to drift away from the curve and which administration tended to drift back to the curve. Again, you can draw your own conclusions from that.
We can also use the local data filter on the whole model to see the curvature of individual time periods. In this case, you can see this negative curvature for a particular... This is for John F. Kennedy. Then for Johnson, you see more of a positive curvature. Then for Gerald Ford, you see no curvature. The reason I know that this is negative curvature, I can see the estimate down here on the squared term, and I can see that it's statistically significant. This positive curvature, I'm saying it's positive because this term is positive and the p-value is slightly less than 0.05. That's my cutoff that I'm using arbitrarily. Then with this data, you can see that the term for the squared term is close to zero and not significant. In other words, there is no curvature statistically when you model just Gerald Ford. Again, you can look at the data that way and draw your own conclusions.
All right. Let me show you what the data looks like, just relatively speaking. I think this is an interesting point. If I just look at the data, this is the actual deseasonalized parts per million, and I have as the max scale, 1,000,000. This is 100%. If the atmosphere is 100% carbon dioxide, the data would be up here. If the data were at 10%, it would be here and so on.
You can see in relative terms, since we're down in the 400 parts per million, this is where the data falls on a full scale. I could zoom in. I'm just clicking and dragging here to get to where I can see some variation in this data. But you can see that relatively, it's very small PPM, and science says it doesn't take a whole lot of PPMs to change things. But I'll let you decide that for yourself. Down here now, I'm at 1e4, so that's not even 1%. We have to zoom in to start seeing the data. I thought it was interesting relatively what this data looks like on a full scale, 0 to 100.
All right, let me go into fitting a curve with exponential because I know that the parabola fit fits pretty good, but scientifically, when we start extrapolating, that curve goes back up again. Let's fit a curve instead. I'm going to go to the PowerPoint and show you... There's one other thing I forgot to do here. Let me go back to the residuals. I'm going to Analyze > Fit Y by X. I'm going to look at the residuals versus administration here, versus president, to just see what those look like.
Here's how far on average they are off of the curve. Let me turn on... I like to turn on the mean diamonds on this so that you can see where the center of these are. It's hard to see them. Then we can also compare all of these, compare all pairs using a Tukey. This shows you statistically which ones are different from the others. These little circles correspond to particular presidents. If I click on a circle, the ones that turn red are not statistically different. The ones that are gray are statistically different. A nice summary of that is this Connecting Letters Report, so statistically, I can see that the residuals for these three are not different. The residuals for this group of five are not different. For this group of three, they're not different, and so on. This Connecting Letters Report is handy to compare little groups between each other.
I'm prompting myself where I want to show you next. Let's fit a model. We fit the exponential model here, and we can look at that model and actually look at the residuals on that as well. Down here, these are the residuals by row. If I compare those to what I had with the parabolic model, let me show you in the PowerPoint here.
They're very similar. They gave very similar residuals. There's a little bit of a shift maybe on some of the presidents, but in general, the parabolic and the exponential curves are almost laid right on top of each other.
One thing we can do is we can also do an inverse prediction using that exponential. I can look and see when is this expected to cross the year... I'm sorry, when is this expected to cross the value of 500? This tells me that that is expected to happen about 2047. Let me put that data filter on here. Show you the data. All right, so here's the data itself, and I can add an axis setting here of 2047, a value of 2047. I'm going to label this 2047. Let's make it red. I don't see it here, so I need to scoot this so I can see it. We're going to also add 500 here. We're going to add a value of 500 to this axis, and I'll make it red also. We can see that the exponential model shows that this data should cross 500 at around 2047. I also have a decimal date as a data filter here.
Let's do a couple of things as we approach the end of this. If I just look by president one little period at a time, there's not a lot of data, so the curve is almost backwards. It almost says, "Hey, we're lowering CO2 concentrations through time, and eventually it'll flatline," if we just look at one particular administration. But when we start including more of these, the model gets a little bit better. If we just look at Lyndon B. Johnson, it looks like, "Oh, my goodness, we're going to blow the world up." Richard Nixon is like, "Oh, my god, look at that." Then Gerald Ford, who's got things under control. So you can make the data say pretty much whatever you want, unfortunately. But you can see by president what's going on.
But let's look at several of them at once. It looks like if we looked at the data, let us go through George Bush. I think this is data through... You can see it's through George Bush. The curve was showing that it was going to bust through 500 sometime before 2040. But now with all of the data, we've pushed that out a little bit. Maybe you could conclude that that's a good thing. We're pushing this curve out further and further as time goes on. Maybe not. If we start excluding some of these, what happens? We start looking back in time a little bit. It's like, yeah, maybe. I don't know. Maybe we did start to push it out a little bit. You decide. It's interesting to note that.
We can also take, let's include all of the presidents, and let's take a slider here. I'm going to put a 20-year time frame here. I'm going to do 1960 to 1980, so I know I have a 20-year slider here. This data filter's pretty cool. I can see that for the first 20 years, it was showing us crossing 500. I don't know where this is at. We can use the little crosshair and look. You can look and see about where that's at. About 2021, if we look at just the data modeled from '58 to '78, it's like, "Oh, my god, we're going to cross 500 in 2021." That didn't happen. But we can actually take this and slide it through time and see what's happening to that curve.
This is with every 20-year period. You can see, "Oh, well, if we'd only looked at '77 to '97, we'd say, 'Oh, we got it. We fixed it. Now everything's reducing, and we're going to flatline, and we're going to become asymptotic at, I don't know, 450 or whatever.'" Everybody would have been happy, but time goes on and things change, and you can see how things are moving through time. We can also just grab the right side of this filter and say, "All right, as we keep adding data, what happens to this?" We're scooting it out. We are scooting out where that line crosses 500. Then it like... Well, now we're bumped down that... We've done the best we can do. It doesn't seem like anything we're doing from now on is making much difference from this point on. This is at about 2003 to now, it didn't really change a whole lot. Look at it, decide for yourself what the data says. I think that rather than listening to all the opinions, form your own opinions. Look at the data and decide. I showed you how to do this.
With that, I think I'm going to turn it back to Kathy here in a second, but I think it's your turn. Think about this data, pull it up, play this back, pause it, and just start playing with JMP. You saw I just spent a half hour tinkering around. I could spend another 3 hours looking at this data and tell you all kinds of stuff. But do it yourself. I want you to see how easy it was. I pulled a data file from a government website. That sounds almost impossible. Pulled it into JMP with a few clicks. I was able to create another data file for president and merge those very easily just using AI. I was able to turn on data filters and look at what's going on through time. You could pick a president, and I could show you data that makes him look good, and I can show you data that makes him look bad very easily. Look at the data yourself. The opinions are out there. They're going to be interpreting the data in a way that supports their stories. I encourage you to learn how to just look at it yourself.
Other things you could look at are some of the other gases that are on that website. You have methane, nitrous oxide, and sulfur hexafluoride. Hey, that's pretty good for an electrical engineer, remember that. Then you could also consider time lags. That's always an argument. You can add a time lag column to your data, and you can add more variables besides just time and president.
One other plot I wanted to show you is... I did not show you this one, did I? Shame on me. I've added some things to the residuals to show you some events that have happened that might be contributing factors. This data is taken from the Mauna Loa volcano. There's one of the eruptions. There were several eruptions on this volcano. You can read the website. They've moved the source around a little bit because of these eruptions. You can see where COVID happened. You can see where a big eruption in Alaska happened. You can see Mount St. Helens. I wasn't alive, so I don't remember that. I'm kidding, I was very much alive. I remember the dust on my car from that. Maybe this Mount St. Helens was what caused this great increase. I don't know what caused the great decrease, but looking at COVID, it didn't look like it changed a whole lot of things. Anyway, add things like that and look at your data.