summaryrefslogtreecommitdiff
path: root/scripts/monitoring/lr.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/monitoring/lr.pl')
-rw-r--r--scripts/monitoring/lr.pl151
1 files changed, 151 insertions, 0 deletions
diff --git a/scripts/monitoring/lr.pl b/scripts/monitoring/lr.pl
new file mode 100644
index 0000000..1ab3e3f
--- /dev/null
+++ b/scripts/monitoring/lr.pl
@@ -0,0 +1,151 @@
+;#
+;# lr.pl,v 3.1 1993/07/06 01:09:08 jbj Exp
+;#
+;#
+;# Linear Regression Package for perl
+;# to be 'required' from perl
+;#
+;# Copyright (c) 1992
+;# Frank Kardel, Rainer Pruy
+;# Friedrich-Alexander Universitaet Erlangen-Nuernberg
+;#
+;# Copyright (c) 1997 by
+;# Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
+;# (Converted to a PERL 5.004 package)
+;#
+;#############################################################
+
+package lr;
+
+##
+## y = A + Bx
+##
+## B = (n * Sum(xy) - Sum(x) * Sum(y)) / (n * Sum(x^2) - Sum(x)^2)
+##
+## A = (Sum(y) - B * Sum(x)) / n
+##
+
+##
+## interface
+##
+;# init(tag); initialize data set for tag
+;# sample(x, y, tag); enter sample
+;# Y(x, tag); compute y for given x
+;# X(y, tag); compute x for given y
+;# r(tag); regression coefficient
+;# cov(tag); covariance
+;# A(tag);
+;# B(tag);
+;# sigma(tag); standard deviation
+;# mean(tag);
+#########################
+
+sub init
+{
+ my $self = shift;
+
+ $self->{n} = 0;
+ $self->{sx} = 0.0;
+ $self->{sx2} = 0.0;
+ $self->{sxy} = 0.0;
+ $self->{sy} = 0.0;
+ $self->{sy2} = 0.0;
+}
+
+sub sample($$)
+{
+ my $self = shift;
+ my($_x, $_y) = @_;
+
+ ++($self->{n});
+ $self->{sx} += $_x;
+ $self->{sy} += $_y;
+ $self->{sxy} += $_x * $_y;
+ $self->{sx2} += $_x**2;
+ $self->{sy2} += $_y**2;
+}
+
+sub B()
+{
+ my $self = shift;
+
+ return 1 unless ($self->{n} * $self->{sx2} - $self->{sx}**2);
+ return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy})
+ / ($self->{n} * $self->{sx2} - $self->{sx}**2);
+}
+
+sub A()
+{
+ my $self = shift;
+
+ return ($self->{sy} - B() * $self->{sx}) / $self->{n};
+}
+
+sub Y()
+{
+ my $self = shift;
+
+ return A() + B() * $_[$[];
+}
+
+sub X()
+{
+ my $self = shift;
+
+ return ($_[$[] - A()) / B();
+}
+
+sub r()
+{
+ my $self = shift;
+
+ my $s = ($self->{n} * $self->{sx2} - $self->{sx}**2)
+ * ($self->{n} * $self->{sy2} - $self->{sy}**2);
+
+ return 1 unless $s;
+
+ return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) / sqrt($s);
+}
+
+sub cov()
+{
+ my $self = shift;
+
+ return ($self->{sxy} - $self->{sx} * $self->{sy} / $self->{n})
+ / ($self->{n} - 1);
+}
+
+sub sigma()
+{
+ my $self = shift;
+
+ return 0 if $self->{n} <= 1;
+ return sqrt(($self->{sy2} - ($self->{sy} * $self->{sy}) / $self->{n})
+ / ($self->{n}));
+}
+
+sub mean()
+{
+ my $self = shift;
+
+ return 0 if $self->{n} <= 0;
+ return $self->{sy} / $self->{n};
+}
+
+sub new
+{
+ my $class = shift;
+ my $self = {
+ (n => undef,
+ sx => undef,
+ sx2 => undef,
+ sxy => undef,
+ sy => undef,
+ sy2 => undef)
+ };
+ bless $self, $class;
+ init($self);
+ return $self;
+}
+
+1;