1# -*- perl -*- 2 3# Test unweighted line fit, three points (an equilateral triangle), 1-D arrays 4 5use strict; 6 7use Test::More tests => 19; 8 9my $epsilon = 1.0e-12; 10my @x = (1, 1.5, 2); 11my @y = (1, 1.866025403784438, 1); 12 13eval { 14 use Statistics::LineFit; 15 my $lineFit = Statistics::LineFit->new(); 16 is($lineFit->setData(\@x, \@y), 1, 'setData(\@x, \@y)'); 17 my @coefficients = $lineFit->coefficients(); 18 cmp_ok(abs($coefficients[0] - 1.28867513459481), "<", $epsilon, 19 'coefficients[0]'); 20 is($coefficients[1], 0, 'coefficients[1]'); 21 is($lineFit->durbinWatson(), 3, 'durbinWatson()'); 22 cmp_ok(abs($lineFit->meanSqError() - 0.166666666666666), "<", $epsilon, 23 'meanSqError()'); 24 my @predictedY = $lineFit->predictedYs(); 25 my @results = (1.28867513459481, 1.28867513459481, 1.28867513459481); 26 for (my $i = 0; $i < @predictedY; ++$i) { 27 cmp_ok(abs($predictedY[$i] - $results[$i]), "<", $epsilon, 28 'predictedY()'); 29 } 30 my @residuals = $lineFit->residuals(); 31 @results = (-0.288675134594813, 0.577350269189625, -0.288675134594813); 32 for (my $i = 0; $i < @residuals; ++$i) { 33 cmp_ok(abs($residuals[$i] - $results[$i]), "<", $epsilon, 34 'residuals()'); 35 } 36 is($lineFit->rSquared(), 0, 'rSquared()'); 37 cmp_ok(abs($lineFit->sigma() - 0.707106781186547), "<", $epsilon, 38 'sigma()'); 39 my @tStatistics = $lineFit->tStatistics(); 40 cmp_ok(abs($tStatistics[0] - 0.828962859079729), "<", $epsilon, 41 'tStatistics[0]'); 42 is($tStatistics[1], 0, 'tStatistics[1]'); 43 my @varianceOfEstimates = $lineFit->varianceOfEstimates(); 44 cmp_ok(abs($varianceOfEstimates[0] - 0.412037037037036), "<", $epsilon, 45 'varianceOfEstimates[0]'); 46 cmp_ok(abs($varianceOfEstimates[1] - 0.166666666666666), "<", $epsilon, 47 'varianceOfEstimates[1]'); 48 my $sumSqErrors = 0; 49 foreach my $residual (@residuals) { $sumSqErrors += $residual ** 2 } 50 cmp_ok(abs($sumSqErrors - $lineFit->sumSqErrors()), "<", $epsilon, 51 'sumSqErrors()'); 52}; 53is($@, '', 'eval error trap'); 54