multi sec2day ( $sec ) { $sec / (60*60*24) }
multi sec2day ( @sec ) { @sec.map: {sec2day( $_ )} }
sub mean(@d) { @d R/ [+] @d }
sub sd (@d) {
my $mean = mean(@d);
sqrt @d R/ [+] map (* - $mean)**2, @d
}
sub add_errorbar_on_95CL ( @d ) {
my $range = 1.96*( sd(@d)/sqrt(@d.elems));
my $mean = &mean(@d);
($mean - $range, $mean, $mean + $range)
}
# cannot use webspider package or istall all nostandard package
# put data on code is very ugly , but I dont'know how to hand this online codepad terminal
my @release_day = gather for <
2018 6 26
2018 3 6
2017 11 28
2017 9 22
2017 7 25
2017 5 2
2017 2 8
2016 11 21
2016 9 20
2016 7 26
>
-> $y, $m, $d {
take DateTime.new(
year => $y,
month => $m,
day => $d
);
};
my @release_interval = gather for 0..(@release_day.elems - 2) -> $i {
take @release_day[$i] - @release_day[($i + 1)];
};
#say sec2day(@release_interval);
#say sec2day(&add_errorbar_on_95CL(@release_interval));
#say @release_day[0].later( day => $_ ) for sec2day(&add_errorbar_on_95CL(@release_interval)) ;
say "
Living World release log (form S3 ) {@release_day».Date}
The days between individual Living World {&sec2day(@release_interval)».Int}(day)
The mean of release interval is { sec2day(&add_errorbar_on_95CL(@release_interval))[1] }(day)
add errorbar (95 Confidence interval) { sec2day(&add_errorbar_on_95CL(@release_interval))[0] }(day) ~ { sec2day(&add_errorbar_on_95CL(@release_interval))[2] }(day)
last release day = {@release_day[0].Date }
Next release day = { (@release_day[0].later( day => $_ ).Date for sec2day(&add_errorbar_on_95CL(@release_interval))) }
"