4#include <grass/raster.h>
14static void regression(DCELL *result, DCELL *values,
int n,
int which)
18 DCELL numer, denom, denom2;
26 for (i = 0; i < n; i++) {
27 if (Rast_is_d_null_value(&values[i]))
36 Rast_set_d_null_value(result, 1);
44 for (i = 0; i < n; i++)
45 if (!Rast_is_d_null_value(&values[i]))
46 numer += i * values[i];
47 numer -=
count * xbar * ybar;
50 for (i = 0; i < n; i++)
51 if (!Rast_is_d_null_value(&values[i]))
52 denom += (DCELL)i * i;
54 denom -=
count * xbar * xbar;
58 for (i = 0; i < n; i++)
59 if (!Rast_is_d_null_value(&values[i]))
60 denom2 += values[i] * values[i];
61 denom2 -=
count * ybar * ybar;
62 Rsq = (numer * numer) / (denom * denom2);
67 *result = numer / denom;
70 *result = ybar - xbar * numer / denom;
76 *result = sqrt(Rsq * (
count - 2) / (1 - Rsq));
79 Rast_set_d_null_value(result, 1);
84 if (*result != *result)
85 Rast_set_d_null_value(result, 1);
88void c_reg_m(DCELL *result, DCELL *values,
int n,
const void *closure UNUSED)
93void c_reg_c(DCELL *result, DCELL *values,
int n,
const void *closure UNUSED)
98void c_reg_r2(DCELL *result, DCELL *values,
int n,
const void *closure UNUSED)
103void c_reg_t(DCELL *result, DCELL *values,
int n,
const void *closure UNUSED)
108static void regression_w(DCELL *result, DCELL (*values)[2],
int n,
int which)
112 DCELL numer, denom, denom2;
120 for (i = 0; i < n; i++) {
121 if (Rast_is_d_null_value(&values[i][0]))
124 xsum += i * values[i][1];
125 ysum += values[i][0] * values[i][1];
126 count += values[i][1];
130 Rast_set_d_null_value(result, 1);
138 for (i = 0; i < n; i++)
139 if (!Rast_is_d_null_value(&values[i][0]))
140 numer += i * values[i][0] * values[i][1];
141 numer -=
count * xbar * ybar;
144 for (i = 0; i < n; i++)
145 if (!Rast_is_d_null_value(&values[i][0]))
146 denom += (DCELL)i * i * values[i][1];
148 denom -=
count * xbar * xbar;
152 for (i = 0; i < n; i++)
153 if (!Rast_is_d_null_value(&values[i][0]))
154 denom2 += values[i][0] * values[i][0] * values[i][1];
155 denom2 -=
count * ybar * ybar;
156 Rsq = (numer * numer) / (denom * denom2);
161 *result = numer / denom;
164 *result = ybar - xbar * numer / denom;
170 *result = sqrt(Rsq * (
count - 2) / (1 - Rsq));
173 Rast_set_d_null_value(result, 1);
178 if (*result != *result)
179 Rast_set_d_null_value(result, 1);
182void w_reg_m(DCELL *result, DCELL (*values)[2],
int n,
183 const void *closure UNUSED)
188void w_reg_c(DCELL *result, DCELL (*values)[2],
int n,
189 const void *closure UNUSED)
194void w_reg_r2(DCELL *result, DCELL (*values)[2],
int n,
195 const void *closure UNUSED)
200void w_reg_t(DCELL *result, DCELL (*values)[2],
int n,
201 const void *closure UNUSED)
void w_reg_m(DCELL *result, DCELL(*values)[2], int n, const void *closure UNUSED)
void c_reg_c(DCELL *result, DCELL *values, int n, const void *closure UNUSED)
void w_reg_c(DCELL *result, DCELL(*values)[2], int n, const void *closure UNUSED)
void c_reg_r2(DCELL *result, DCELL *values, int n, const void *closure UNUSED)
void w_reg_t(DCELL *result, DCELL(*values)[2], int n, const void *closure UNUSED)
void c_reg_t(DCELL *result, DCELL *values, int n, const void *closure UNUSED)
void c_reg_m(DCELL *result, DCELL *values, int n, const void *closure UNUSED)
void w_reg_r2(DCELL *result, DCELL(*values)[2], int n, const void *closure UNUSED)