The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

######################### We start with some black magic to print on failure.

# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)

BEGIN { $| = 1; print "1..2\n"; }
END {print "not ok 1\n" unless $loaded;}
use Statistics::OLS;
$loaded = 1;
print "ok 1\n";

######################### End of black magic.

# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):

eval {
  # see pod for the source of the example
  @xydata = qw (   
		.77 2.57	.74 2.5 	.72 2.35
		.73 2.3		.76 2.25	.75 2.2
		1.08 2.11	1.81 1.94	1.39 1.97
		1.2 2.06	1.17e+00 2.02E0
	       );

  # create the least squares object
  $ls = Statistics::OLS->new;
  
  # register the data set with the regression object
  $ls->setData (\@xydata) or die $ls->error();

  # do the computation
  $ls->regress() or die $ls->error();

  # get the statistics 
  ($intercept, $slope) = $ls->coefficients();
  $R_squared = $ls->rsq();
  ($tstat_intercept, $tstat_slope) = $ls->tstats();
  $sigma = $ls->sigma();
  $sample_size = $ls->size();
  
  ($avX, $avY) = $ls->av();
  ($varX, $varY, $covXY) = $ls->var();
  ($xmin, $xmax, $ymin, $ymax) = $ls->minMax(); 
  
  @predictedYs = $ls->predicted();
  @residuals = $ls->residuals();      

#  these are the results on my machine

#  ($my_intercept, $my_slope) = (2.69112393863717, -0.479529075990007);
#  $my_R_squared = 0.662757189178281;
#  ($my_tstat_intercept, $my_tstat_slope) = (22.1268635416728, -4.20559190653145);
#  $my_sigma = 0.128702809019511;
#  $my_sample_size = 11;
#
#  ($my_avX, $my_avY) = (1.01090909090909, 2.20636363636364);
#  ($my_varX, $my_varY, $my_covXY) 
#    = (0.127409090909091, 0.044205454545456, -0.0610963636363632);
#  ($my_xmin, $my_xmax, $my_ymin, $my_ymax) = (.72, 1.81, 1.94, 2.57);
#
#  @my_predictedYs = qw (
#			 .77 2.32188655012486 .74 2.33627242240456 
#			 .72 2.34586300392437 .73 2.34106771316447 
#			 .76 2.32668184088476 .75 2.33147713164466 
#			 1.08 2.17323253656796 1.81 1.82317631109526 
#			 1.39 2.02457852301106 1.2 2.11568904744916 
#			 1.17 2.13007491972886
#			);
#
#  @my_residuals = qw (
#		       .77 0.248113449875135 .74 0.163727577595435 
#		       .72 0.004136996075635 .73 -0.0410677131644652 
#		       .76 -0.0766818408847648 .75 -0.131477131644665 
#		       1.08 -0.0632325365679627 1.81 0.116823688904742 
#		       1.39 -0.0545785230110606 1.2 -0.0556890474491618 
#		       1.17 -0.110074919728862  
#		       );

};
$_ = ($@ ? "Not ok 2: $@\n" : "ok 2\n");
print;