| 1 | import math |
| 2 | |
| 3 | struct LinearResult { |
| 4 | r2 f64 |
| 5 | intercept f64 |
| 6 | slope f64 |
| 7 | dependent_variable_means f64 |
| 8 | independent_variable_means f64 |
| 9 | } |
| 10 | |
| 11 | fn linearrelationship(independent_variable []int, dependent_variable []int) LinearResult { |
| 12 | // Objective : |
| 13 | // Find what is the linear relationship between two dataset X and Y? |
| 14 | // x := independent variable |
| 15 | // y := dependent variable |
| 16 | mut sum_r2_x := 0 |
| 17 | mut sum_r2_y := 0 |
| 18 | mut sum_xy := 0 |
| 19 | mut sum_x := 0 |
| 20 | mut sum_y := 0 |
| 21 | for i in independent_variable { |
| 22 | sum_x += i |
| 23 | sum_r2_x += i * i |
| 24 | } |
| 25 | for yi in dependent_variable { |
| 26 | sum_y += yi |
| 27 | sum_r2_y += yi * yi |
| 28 | } |
| 29 | x_means := sum_x / independent_variable.len |
| 30 | y_means := sum_y / dependent_variable.len |
| 31 | for index, x_value in independent_variable { |
| 32 | sum_xy += x_value * dependent_variable[index] |
| 33 | } |
| 34 | // /Slope = (∑y)(∑x²) - (∑x)(∑xy) / n(∑x²) - (∑x)² |
| 35 | slope_value := f64((sum_y * sum_r2_x) - (sum_x * sum_xy)) / f64((sum_r2_x * independent_variable.len) - (sum_x * sum_x)) |
| 36 | // /Intercept = n(∑xy) - (∑x)(∑y) / n(∑x²) - (∑x)² |
| 37 | intercept_value := f64((independent_variable.len * sum_xy) - (sum_x * sum_y)) / f64((independent_variable.len * sum_r2_x) - (sum_x * sum_x)) |
| 38 | // Regression equation = Intercept + Slope x |
| 39 | // R2 = n(∑xy) - (∑x)(∑y) / sqrt([n(∑x²)-(∑x)²][n(∑y²)-(∑y)²] |
| 40 | r2_value := f64((independent_variable.len * sum_xy) - (sum_x * sum_y)) / math.sqrt(f64((sum_r2_x * independent_variable.len) - (sum_x * sum_x)) * f64((sum_r2_y * dependent_variable.len) - (sum_y * sum_y))) |
| 41 | return LinearResult{ |
| 42 | r2: r2_value |
| 43 | intercept: intercept_value |
| 44 | slope: slope_value |
| 45 | independent_variable_means: x_means |
| 46 | dependent_variable_means: y_means |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | fn main() { |
| 51 | independent_variable := [4, 5, 6, 7, 10] |
| 52 | dependent_variable := [3, 8, 20, 30, 12] |
| 53 | result := linearrelationship(independent_variable, dependent_variable) |
| 54 | println(result) |
| 55 | } |
| 56 | |