diff options
Diffstat (limited to '')
| -rw-r--r-- | lin_reg1.awk | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/lin_reg1.awk b/lin_reg1.awk deleted file mode 100644 index 7786247..0000000 --- a/lin_reg1.awk +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/awk -f - -### lin_reg1.awk -# simple linear regression between columns - - -BEGIN { - sign = "[+-]?" - decimal = "[0-9]+[.]?[0-9]*" - fraction = "[.][0-9]*" - exponent = "([Ee]" sign "[0-9]+)?" - number = "^" sign "(" decimal "|" fraction ")" exponent "$" -} - - -# column headers -NR == 1 { - for (n=1; n<=NF; n++) - ($n ~ number) ? header[n] = "col" n : header[n] = $n -} - - -# read input data -NF > 0 { - (NF > nf_max) ? nf_max = NF : nf_max = nf_max - - # columns - for (y=1; y<=nf_max; y++) { - if ($y == header[n]) - continue - - if ($y ~ number) { - - # mean - count[y] += 1 - sum[y] += $y - sum2[y] += $y*$y - delta0[y] = $y - mean[y] - mean[y] += delta0[y]/count[y] - delta1[y] = $y - mean[y] - sum_delta[y] += delta1[y] - sum_delta2[y] += delta0[y]*delta1[y] - - # x = row, y = col, trendline: y = A + Bx - for (x=1; x<=nf_max; x++) { - count[x,y] += 1 - sum_xy[x,y] += $x*$y - sum_delta_xy[x,y] += delta0[x]*delta1[y] - - # correlation - r_den[x,y] = sqrt(sum_delta2[x]*sum_delta2[y]) - (r_den[x,y]) ? r[x,y] = sum_delta_xy[x,y]/r_den[x,y] : r[x,y] = 1 - - ab_den[x,y] = (count[x,y]*sum2[x] - sum[x]*sum[x]) - if (ab_den[x,y]) { - a[x,y] = (sum[y]*sum2[x] - sum[x]*sum_xy[x,y])/ab_den[x,y] - b[x,y] = (count[x,y]*sum_xy[x,y] - sum[x]*sum[y])/ab_den[x,y] - } - else { - a[x,y] = 0 - b[x,y] = 1 - } - } - } - else - continue - } -} - - -END { - for (y=1; y<=nf_max; y++) { - for (x=1; x<=nf_max; x++) { - if (x != y && r[x,y]) { - printf(OFMT OFS "(%s)" OFS " = " OFMT "(%s)" OFS " + " OFMT ORS, - 10.0*log(r[x,y]*r[x,y])/log(10.0), - header[y], b[x,y], - header[x], a[x,y]) - } - } - } -} - |
