| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package App::RecordStream::Aggregator::LinearRegression; |
|
2
|
|
|
|
|
|
|
|
|
3
|
6
|
|
|
6
|
|
26892
|
use strict; |
|
|
6
|
|
|
|
|
14
|
|
|
|
6
|
|
|
|
|
146
|
|
|
4
|
6
|
|
|
6
|
|
28
|
use warnings; |
|
|
6
|
|
|
|
|
15
|
|
|
|
6
|
|
|
|
|
138
|
|
|
5
|
|
|
|
|
|
|
|
|
6
|
6
|
|
|
6
|
|
378
|
use App::RecordStream::Aggregator::Ord2Bivariate; |
|
|
6
|
|
|
|
|
14
|
|
|
|
6
|
|
|
|
|
112
|
|
|
7
|
6
|
|
|
6
|
|
31
|
use App::RecordStream::Aggregator; |
|
|
6
|
|
|
|
|
12
|
|
|
|
6
|
|
|
|
|
101
|
|
|
8
|
6
|
|
|
6
|
|
481
|
use App::RecordStream::DomainLanguage::Registry; |
|
|
6
|
|
|
|
|
15
|
|
|
|
6
|
|
|
|
|
122
|
|
|
9
|
|
|
|
|
|
|
|
|
10
|
6
|
|
|
6
|
|
76
|
use base 'App::RecordStream::Aggregator::Ord2Bivariate'; |
|
|
6
|
|
|
|
|
14
|
|
|
|
6
|
|
|
|
|
1651
|
|
|
11
|
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
#sub new -- passed through |
|
13
|
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
#sub new_from_valuation -- passed through |
|
15
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
sub squish |
|
17
|
|
|
|
|
|
|
{ |
|
18
|
1
|
|
|
1
|
0
|
11
|
my ($this, $cookie) = @_; |
|
19
|
|
|
|
|
|
|
|
|
20
|
1
|
|
|
|
|
5
|
my ($sum1, $sumx, $sumy, $sumxy, $sumx2, $sumy2) = @$cookie; |
|
21
|
|
|
|
|
|
|
|
|
22
|
1
|
|
|
|
|
7
|
my $beta = ($sumxy * $sum1 - $sumx * $sumy) / ($sumx2 * $sum1 - $sumx ** 2); |
|
23
|
1
|
|
|
|
|
6
|
my $alpha = ($sumy - $beta * $sumx) / $sum1; |
|
24
|
|
|
|
|
|
|
|
|
25
|
1
|
|
|
|
|
10
|
my $sbeta_numerator = ($sumy2 + $alpha ** 2 * $sum1 + $beta ** 2 * $sumx2 - 2 * $alpha * $sumy + 2 * $alpha * $beta * $sumx - 2 * $beta * $sumxy) / ($sum1 - 2); |
|
26
|
1
|
|
|
|
|
5
|
my $sbeta_denominator = $sumx2 - $sumx * $sumx / $sum1; |
|
27
|
1
|
|
|
|
|
5
|
my $sbeta = sqrt($sbeta_numerator / $sbeta_denominator); |
|
28
|
1
|
|
|
|
|
4
|
my $salpha = $sbeta * sqrt($sumx2 / $sum1); |
|
29
|
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
return |
|
31
|
|
|
|
|
|
|
{ |
|
32
|
1
|
|
|
|
|
11
|
'alpha' => $alpha, |
|
33
|
|
|
|
|
|
|
'beta' => $beta, |
|
34
|
|
|
|
|
|
|
'beta_se' => $sbeta, |
|
35
|
|
|
|
|
|
|
'alpha_se' => $salpha, |
|
36
|
|
|
|
|
|
|
}; |
|
37
|
|
|
|
|
|
|
} |
|
38
|
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
sub long_usage |
|
40
|
|
|
|
|
|
|
{ |
|
41
|
0
|
|
|
0
|
0
|
|
return <
|
|
42
|
|
|
|
|
|
|
Usage: linreg,, |
|
43
|
|
|
|
|
|
|
Dump various status from a linear regression of y against x. |
|
44
|
|
|
|
|
|
|
EOF |
|
45
|
|
|
|
|
|
|
} |
|
46
|
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
sub short_usage |
|
48
|
|
|
|
|
|
|
{ |
|
49
|
0
|
|
|
0
|
0
|
|
return "perform a linear regression of provided fields, dumping various statistics"; |
|
50
|
|
|
|
|
|
|
} |
|
51
|
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
App::RecordStream::Aggregator->register_implementation('linreg', __PACKAGE__); |
|
53
|
|
|
|
|
|
|
App::RecordStream::Aggregator->register_implementation('linearregression', __PACKAGE__); |
|
54
|
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
App::RecordStream::DomainLanguage::Registry::register_vfn(__PACKAGE__, 'new_from_valuation', 'linreg', 'VALUATION', 'VALUATION'); |
|
56
|
|
|
|
|
|
|
App::RecordStream::DomainLanguage::Registry::register_vfn(__PACKAGE__, 'new_from_valuation', 'linearregression', 'VALUATION', 'VALUATION'); |
|
57
|
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
1; |