Rand Stats

Math::Libgsl::MovingWindow

cpan:FRITH

Actions Status Build Status

Moving mean, minimum and maximum

NAME

Math::Libgsl::MovingWindow - An interface to libgsl, the Gnu Scientific Library - Moving Window Statistics

SYNOPSIS

use Math::Libgsl::Vector;
use Math::Libgsl::MovingWindow;

my Math::Libgsl::Vector $x .= new: 1000;
$x.scanf('data.dat');
my Math::Libgsl::MovingWindow $mw .= new: :10samples;
my Math::Libgsl::Vector $res = $mw.mean($x);
$res[^$res.vector.size]».put;

DESCRIPTION

Math::Libgsl::MovingWindow is an interface to the Moving Window Statistics functions of libgsl, the Gnu Scientific Library.

This class creates a window around a sample which is used to calculate various local statistical properties of an input data stream. The window is then slid forward by one sample to process the next data point and so on.

new(Int :$samples!)

new(Int :$before!, Int :$after!)

The constructor accepts one or two named arguments. If just the samples argument is provided then a workspace is allocated for computing symmetric, centered moving statistics with the specified window length. When both sbefore and after arguments are provided then the window has before samples before the current sample and after samples after.

In all the following methods the user must specify how to construct the windows near the end points. Every method allows for a $endtype argument, which defaults to GSL_MOVSTAT_END_PADZERO. The symbolic names for this argument are listed in the Math::Libgsl::Constants module as follows:

mean(Math::Libgsl::Vector $x!, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving window mean of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the mean in-place. If an error occurs during the computation this method returns a failure object.

variance(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving variance of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the variance in-place. If an error occurs during the computation this method returns a failure object.

sd(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving standard deviation of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the standard deviation in-place. If an error occurs during the computation this method returns a failure object.

min(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving minimum of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the minimum in-place. If an error occurs during the computation this method returns a failure object.

max(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving maximum of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the maximum in-place. If an error occurs during the computation this method returns a failure object.

minmax(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO --> List)

This method computes the moving minimum and maximum of the input vector $x, returning a List of two Math::Libgsl::Vector objects of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. If an error occurs during the computation this method returns a failure object.

sum(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving sum of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the sum in-place. If an error occurs during the computation this method returns a failure object.

median(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO, Bool :$inplace? --> Math::Libgsl::Vector)

This method computes the moving median of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. The boolean named argument :$inplace directs the method to compute the median in-place. If an error occurs during the computation this method returns a failure object.

mad0(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO --> List)

mad(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO --> List)

This method computes the moving Median Absolute Deviation (MAD) of the input vector $x, returning a List of two Math::Libgsl::Vector objects of the same length as the input one: the median and the MAD. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. If an error occurs during the computation this method returns a failure object. The mad0 method does not include the scale factor of 1.4826.

qqr(Math::Libgsl::Vector $x, Num() $quantile, Int :$endtype? = GSL_MOVSTAT_END_PADZERO --> Math::Libgsl::Vector)

This method computes the moving q-quantile range (QQR) of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $quantile argument must be between 0 and 0.5. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. If an error occurs during the computation this method returns a failure object.

Sn(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO --> Math::Libgsl::Vector)

This method computes the moving Sₙ statistics of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. If an error occurs during the computation this method returns a failure object.

Qn(Math::Libgsl::Vector $x, Int :$endtype? = GSL_MOVSTAT_END_PADZERO --> Math::Libgsl::Vector)

This method computes the moving Qₙ statistics of the input vector $x, returning a Math::Libgsl::Vector of the same length as the input one. The $endtype is optional and defaults to GSL_MOVSTAT_END_PADZERO. If an error occurs during the computation this method returns a failure object.

C Library Documentation

For more details on libgsl see https://www.gnu.org/software/gsl/. The excellent C Library manual is available here https://www.gnu.org/software/gsl/doc/html/index.html, or here https://www.gnu.org/software/gsl/doc/latex/gsl-ref.pdf in PDF format.

Prerequisites

This module requires the libgsl library to be installed. Please follow the instructions below based on your platform:

Debian Linux and Ubuntu 20.04

sudo apt install libgsl23 libgsl-dev libgslcblas0

That command will install libgslcblas0 as well, since it's used by the GSL.

Ubuntu 18.04

libgsl23 and libgslcblas0 have a missing symbol on Ubuntu 18.04. I solved the issue installing the Debian Buster version of those three libraries:

Installation

To install it using zef (a module management tool):

$ zef install Math::Libgsl::MovingWindow

AUTHOR

Fernando Santagata nando.santagata@gmail.com

COPYRIGHT AND LICENSE

Copyright 2020 Fernando Santagata

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.