# Least Squares Regression with Excel

#### Posted September 17, 2012

#### by Lensyl Urbano

Here I’ll go over how to do Least Squares Regression, as simply as possibly, using Excel and its Solver*. Least Squares Regression can be used to match pretty much any type of function to any type of data. Most spreadsheet programs, like Excel, will do some curve matching for you when you add trendlines to graphs, but for more sophisticated work — in pre-Calculus and beyond for example — you need a more general approach.

We’ll start with a data set that we want to match. The atmospheric CO_{2} data from Mauna Loa is a convenient dataset. It’s also an important data set to model because matching a function to the data will allow us to predict the change in CO_{2} over the next 100 years, and those predictions are the ones the IPCC uses in their estimates of the impact of global climate change around the world. Billions, if not trillions of dollars depend on those predictions (and how governments decide to respond). For ease of demonstration, I’ve picked a few of the annual average CO_{2} concentration measurements at random to work with:

*Table 1: CO _{2} Data*

Year (x) |
CO_{2} concentration (ppm) (y) |
---|---|

1959 | 315.97 |

1964 | 319.62 |

1969 | 324.62 |

1981 | 340.10 |

1985 | 346.04 |

1996 | 362.59 |

2003 | 375.77 |

Now, looking at the data, we can see there is some sort of trend. Our first decision is about how to model it.

# Straight Line Model

The simplest approach, and the one we’ll try first is to fit a straight line through the data. (The final spreadsheet is here).

The equation of a straight line is:

In this case, as we can see from the graph (Figure 1), the ** y** axis is CO

_{2}concentration, and the

**axis is the year.**

*x***and**

*m***are our two unknown constants that set the slope of the line (m) and move it up and down (b). If you need to get a better feel for what this means, try changing the slope and intercept in the Straight Line Grapher (I used this in class to demonstrate).**

*b*To match our straight line model to the data we need to determine the values of ** m** and

**that give the best fit.**

*b*So we create a spreadsheet with the data and in the adjacent column set up the straight line function by setting two cells to the values of the constants (** m** and

**) and using those values to calculate the modeled CO**

*b*_{2}concentration.

You’ll notice that I have values of ** m = 1** and

**. These are just my initial estimates of these values. The initial values are not crucial, as you’ll see, but are just there for me to check that my formula is in right.**

*b = -1600*Once I have the correct formulas in, I can play around with these values until my line matches the data. However, this is where Solver comes in to save a lot of time.

## Finding a match

First we need a quantitative way of telling if we have a good match or not. We can start by taking the difference between each real data point and the modeled value. We’ll call this the ** error**.

Now we could get a single value for the total error by adding up all the individual error values, or taking the average. However, as one of my students pointed out, we could end up with a case where the modeled line crossed through the data and we’d end up with positive differences of the data points above the line canceling out the negative differences of the data points below the line. His solution was to take the absolute value of the differences (errors) instead, which should actually work just as well in the method we’re taking here.

Instead of using the absolute value, however, we’ll square the errors instead. This achieves the same effect we need because the squares of both negative and positive numbers are positive. This approach is where the “squares” in Least Squares Regression comes from. The “Least” part comes from the fact that we’re now going to try adjusting our coefficients until we get the average of the squares of the errors to be as small as possible.

Now we take the calculate the average of the errors (the sum of the errors would work just as well) using the spreadsheet’s “AVERAGE” function.

Now we can adjust ** m** and

**and not just see how they compare to the data points on a graph, but know that we have the best fit if we minimize the average error.**

*b*## Solver

Instead of changing ** m** and

**by hand, we can use Excel’s Solver to minimize the average error for us. The matching of a straight line can be done using algebra (e.g. here and here) but that approach won’t help us when we get to more complex functions.**

*b*We select the average error cell (E16) and tell Solver to minimize its value by changing the values of ** m** and

**.**

*b*When we hit solve, Solver should converge on a solution. Because of the way the problem is set up — using the square of the error for example — makes this a non-linear problem for the solver to solve. As of this writing, Excel is the only spreadsheet program I know of that has a built-in, non-linear solver.

You’ll notice that Solver’s solution gives:

*m = 1.360**b = -2351.9*

So now we have the equation for the best fit line (our model) being:

## Prediction

Using this model we can predict the atmospheric CO_{2} concentration for the year 2050 by setting ** x = 2050** in the modeled equation, which gives

**.**

*436.5 ppm*The final spreadsheet I used to do these calculations can be found here.

# Parabolic Model

As good as the straight line model seems to be, it does not account for the slight upward curve the data seems to have (see Figure 1). So instead of a straight line, perhaps we could try a parabolic function. Just as before, we’ll need to figure out the coefficients for the parabolic function. In this case the general equation we’ll use is:

and we’ll need to find the coefficients ** a**,

**and**

*b***. To see how changing these coefficients change the curve, you can play around with the interactive parabola model.**

*c*We set up our spreadsheet in the same way as for the straight line, but with our new coefficients.

Note that the only column that needs to change from the straight-line spreadsheet is the “Model” column (column C), to add the coefficients and to change the formula to that of a parabola.

Now we can use Solver to minimize the average of the squares of the errors, just as we did before, only having it change the three coefficients instead of two.

*a = 0.00060091**b = -1.018**c = 0.9933*

and a final equation:

## Prediction

The parabolic model predicts for the year 2050 (** x = 2050**) that the CO

_{2}concentration will be

**.**

*439.4 ppm*The Excel spreadsheet for the parabolic model is here.

# Which model is better?

The easiest way to compare the two models is to see which did better at minimizing the squared errors.

*Table 2: Comparison of models.*

Model | Average Squared Error |
---|---|

Straight Line | 4.94 |

Parabola | 4.47 |

So the parabolic model does better, but not by much.

# Conclusions

With this approach, you can use any type of function — exponential, sinusoidal etc. — or combination of functions to match any data, and be able to compare among the models. A better measure of how well the models match the data is the regression coefficient or coefficient of determination, but I’ll save those for another post.

# Conclusions

* UPDATE (Dec 31, 2012): Gnumeric’s Solver works.

* You’ll need to use Microsoft’s Excel, *or better yet Gnumeric* for this because, as of this writing, none of the other common spreadsheet options — OpenOffice, Google Docs, and Mac’s Calc — have a non-linear solver built in — and even some of the newer versions of Excel seem buggy.

**Citing this post**: **Urbano**, L., 2012. Least Squares Regression with Excel, Retrieved July 23rd, 2017, from *Montessori Muddle*: http://MontessoriMuddle.org/ .**Attribution (Curator's Code )**: Via: ᔥ Montessori Muddle; Hat tip: ↬ Montessori Muddle.

October 4th, 2016 at 2:00 pm

Hi lensyl..your tutorial is really useful. Could you please kindly tell me how the square of errors make the linear function non linear.

October 8th, 2016 at 7:32 pm

The terminology here is a bit loose. I’m using linear here to refer to the fact that squaring the errors make the result we’re minimizing not directly proportional to the inputs.