Multiple regression: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
m (Force PNG rendering on formulas)
Line 2: Line 2:
Given a set of data vectors in the following format:
Given a set of data vectors in the following format:


<math>y = \{ y_1, y_2, ..., y_n \}</math>
<math>y = \{ y_1, y_2, ..., y_n \}\,</math>


<math>x_i = \{ x_{i1}, x_{i2}, ..., x_{in} \}, i \in 1..k</math>
<math>x_i = \{ x_{i1}, x_{i2}, ..., x_{in} \}, i \in 1..k\,</math>


Compute the vector <math>\beta = \{ \beta_1, \beta_2, ..., \beta_n \}</math> using ordinary least squares regression using the following equation:
Compute the vector <math>\beta = \{ \beta_1, \beta_2, ..., \beta_n \}</math> using ordinary least squares regression using the following equation:


<math>y_i = \beta \cdot x_i</math>
<math>y_i = \beta \cdot x_i\,</math>


You can assume <i>y</i> is given to you as an array, and <i>x</i> is given to you as a two-dimensional array.
You can assume <i>y</i> is given to you as an array, and <i>x</i> is given to you as a two-dimensional array.

Revision as of 17:11, 29 June 2009

Task
Multiple regression
You are encouraged to solve this task according to the task description, using any language you may know.

Given a set of data vectors in the following format:

Compute the vector using ordinary least squares regression using the following equation:

You can assume y is given to you as an array, and x is given to you as a two-dimensional array.

Ruby

Using the standard library Matrix class:

<lang ruby>require 'matrix'

def regression_coefficients y, x

 y = Matrix.column_vector y.map { |i| i.to_f }
 x = Matrix.columns x.map { |xi| xi.map { |i| i.to_f }}
 (x.t * x).inverse * x.t * y

end </lang>

Testing: <lang ruby> regression_coefficients([1, 2, 3, 4, 5], [ [2, 1, 3, 4, 5] ]) # => Matrix0.981818181818182 </lang>