Welch's t-test: Difference between revisions

Content added Content deleted
(Added Kotlin)
m (→‎{{header|Perl 6}}: minor simplifications and whitespace tweaks)
Line 509: Line 509:
return 1 if @A <= 1 or @B <= 1;
return 1 if @A <= 1 or @B <= 1;


my $a-mean = @A.sum/@A.elems;
my $a-mean = @A.sum / @A;
my $b-mean = @B.sum/@B.elems;
my $b-mean = @B.sum / @B;
my $a-variance = @A.map( { ($a-mean - $_)² } ).sum / (@A - 1);
my $a-variance = @A.map( { ($a-mean - $_)² } ).sum / (@A - 1);
my $b-variance = @B.map( { ($b-mean - $_)² } ).sum / (@B - 1);
my $b-variance = @B.map( { ($b-mean - $_)² } ).sum / (@B - 1);
return 1 unless $a-variance && $b-variance;
return 1 unless $a-variance && $b-variance;


my \Welsh-𝒕-statistic = ($a-mean - $b-mean)/($a-variance/+@A + $b-variance/+@B).sqrt;
my \Welsh-𝒕-statistic = ($a-mean - $b-mean)/($a-variance/@A + $b-variance/@B).sqrt;


my $DoF = ($a-variance/+@A + $b-variance/+@B)² /
my $DoF = ($a-variance / @A + $b-variance / @B)² /
(($a-variance² / (+@A² * (+@A - 1))) +
(($a-variance² / (@A³ - @A²)) + ($b-variance² / (@ - @B²)));
($b-variance² / (+@B² * (+@B - 1))));


my $sa = $DoF / 2 - 1;
my $sa = $DoF / 2 - 1;
my $x = $DoF / (Welsh-𝒕-statistic² + $DoF);
my $x = $DoF / (Welsh-𝒕-statistic² + $DoF);
my $N = 65355;
my $N = 65355;
my $h = $x / $N;
my $h = $x / $N;
my ( $sum1, $sum2 );
my ( $sum1, $sum2 );


for ^$N »*» $h -> $i {
for ^$N »*» $h -> $i {
$sum1 += (($i + $h / 2) ** $sa ) / ((1 - ($i + $h / 2)).sqrt);
$sum1 += (($i + $h / 2) ** $sa) / (1 - ($i + $h / 2)).sqrt;
$sum2 += $i ** $sa / (1 - $i).sqrt;
$sum2 += $i ** $sa / (1 - $i).sqrt;
}
}