1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#!/usr/bin/perl
use strict;
my %hashx;
my %hashy;
my $std;
my $cor;
%hashx=(
'103904950' => 6.1,
'103905269' => 5.5,
'103905308' => 5.5,
'103905458' => 5.8,
'103905264' => 5.8,
'103905270' => 5.6);
%hashy=(
'103904950' => -6.1,
'103905269' => -6.3,
'103905308' => -5.7,
'103905458' => -6.6,
'103905264' => -6.8,
'103905270' => -6.6);
$std=mystd(values %hashx);
$cor=mycor(\%hashx, \%hashy);
print "STD= $std\nCC= $cor\n";
sub mysum
{
my ($refvaluelist)=@_;
my @valuelist=@{$refvaluelist};
my $sum=0;
foreach my $value (@valuelist)
{$sum+=$value;}
return $sum;
}
sub mymean
{
my @valuelist=@_;
my $mean=0;
$mean=mysum(\@valuelist)/@valuelist;
return $mean;
}
sub myvar
{
my @values=@_;
my $var=0;
my $mean=mymean(@values);
foreach my $v (@values)
{$var+=($v-$mean)*($v-$mean);}
$var=$var/@values;
return $var;
}
sub mystd
{
#my ($refvalues)=@_;
my @values=@_; #@{$refvalues};
my $std=myvar(@values);
$std=sqrt($std);
return $std;
}
sub mycov
{
my ($refx, $refy)=@_;
my %xvalues=%$refx;
my %yvalues=%$refy;
my $nb=(values %xvalues);
my $meanx=mymean(values %xvalues);
my $meany=mymean(values %yvalues);
my $cov=0;
foreach my $x (keys %xvalues)
{$cov+=($xvalues{$x}-$meanx)*($yvalues{$x}-$meany);}
$cov=$cov/$nb;
return $cov;
}
sub mycor
{
my ($refx, $refy)=@_;
my %xvalues=%$refx;
my %yvalues=%$refy;
my $cor=0;
my $stdx=mystd(\values %xvalues);
my $stdy=mystd(\values %yvalues);
if ($stdx!=0 && $stdy!=0)
{$cor=mycov(\%xvalues, \%yvalues)/($stdx*$stdy);}
else
{$cor="";}
return $cor;
} |
Partager