# Calculate Average Rate of Change for a Set of Points

I have two lists containing X/Y values which are used to plot points on a graph. The X-values are always sequential (1, 2, 3, 4...) but the Y values can vary.

For example:

var x = new List<int>(new[] {0, 1, 2, 3, 4, 5, 6, 7});
var y = new List<int>(new[] {0, 3, 7, 12, 14, 15, 17, 19});
var avgY = // What goes here?


With these values (the Y-values being more important in this case), how can I calculate the average rate of change linear regression line so that I can plot another "average" line (or "prediction" line if we were to extend the graph)?

-
It's called 'Linear regression'. After quick googling found a link that should give you everything you need –  ULazdins Feb 15 '12 at 15:23
There are a lot of possible answers - have you looked into keywords / topics like curve fitting, splines, derivatives, extrapolation? –  Mikeb Feb 15 '12 at 15:24
For extending the line, would there be data points in this area? Or are you talking about extending the line past your data points? –  Michelle Feb 16 '12 at 20:23

## migrated from stackoverflow.comFeb 16 '12 at 20:17

This question came from our site for professional and enthusiast programmers.

You should start out with linear regression, and see if that gives you what you want. Unfortunately C# doesn't make linear regression particularly easy, but have a browse around some statistics packages and see if you can find one that looks easy to use.

I took advantage of R's quick modelling capabilities to do a linear regression with your data, to see if this is the kind of thing you're after:

x = c(0,1,2,3,4,5,6,7)
y = c(0,3,7,12,14,15,17,19)
model = lm(y ~ x)
plot(x,y)
abline(coef(model))


which gives the following output. Is this the kind of thing you want?

-