summaryrefslogtreecommitdiff
path: root/lin_reg2.awk
diff options
context:
space:
mode:
authorwukong <wukong@longaeva>2026-05-05 11:15:46 -0700
committerwukong <wukong@longaeva>2026-05-05 11:15:46 -0700
commit6ff1fc477e92897177cb4cebdaa21fa41a41c0a4 (patch)
treefbc67ce5e5071960758f1b508d22c851a1a40ab3 /lin_reg2.awk
parentb60f09401a15721f626bcb7c852f68b82fe39c1c (diff)
removed extra versions of diff and lin_reg;
Diffstat (limited to '')
-rw-r--r--lin_reg2.awk96
1 files changed, 0 insertions, 96 deletions
diff --git a/lin_reg2.awk b/lin_reg2.awk
deleted file mode 100644
index d6097e3..0000000
--- a/lin_reg2.awk
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/awk -f
-
-### lin_reg2.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
- }
-
- # error estimate
- err_den[x,y] = count[x,y]*(count[x,y] - 2)
- if (count[x,y] > 2) {
- err[x,y] = $y - (a[x,y] + b[x,y]*$x)
- sum_err2[x,y] += err[x,y]*err[x,y]
- }
- b_err_den[x,y] = (count[x,y] - 2)*sum_delta2[x]
- if (b_err_den[x,y])
- b_err[x,y] = sqrt(sum_err2[x,y]/b_err_den[x,y])
- a_err_den[x,y] = count[x,y]*b_err_den[x,y]
- if (a_err_den[x,y])
- a_err[x,y] = sqrt(sum2[x]/count[x,y])*b_err[x,y]
- }
- }
- 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 " +/- " OFMT ")(%s)" OFS " + (" OFMT " +/- " OFMT ")" ORS,
- 10.0*log(r[x,y]*r[x,y])/log(10.0),
- header[y], b[x,y], b_err[x,y],
- header[x], a[x,y], a_err[x,y])
- }
- }
- }
-}
-