横浜の街にトンボが下りて来た

まだ、クーラーが必要な暑さが続いているけど、芝の広場でトンボが集まっているのが見れた。もうすぐ10月だ。

Pearsonの積率相関を求める

sub rxy{
	#Pearsonの積率相関を求める
	#Sxy = 1/n *��(i=1→n){(xi -avaerage x)(yi -avaerage y)}
	#    = 1/n *��(i=1→n){xi*yi -(aveverage x)yi -(avaerage y)xi + (avaerage x)*(avaerage y)}
	#    = 1/n *{sum_xy -(aveverage x)sum_y - (avaerage y)sum_x +n*(avaerage x)*(avaerage y)
	#    = 1/n *{sum_xy -sum_x * sum_y /n -sum_y *sum_x / n + sum_x *sum_y *n /n**2}
	#    = sum_xy /n -sum_x *sum_y /n**2
	
	#Sxx = 1/n*��(i=1→n){(xi -avaerage x)**2}
	#    = 1/n*��(i=1→n){xi**2 - 2 *(avaerage x) *xi + (avaerage x)**2}
	#    = 1/n*{sum_xx - 2 *(avaerage x) *sum_x + n *(avaerage x)**2}
	#    = 1/n*{sum_xx - 2 * sum_x **2 / n + sum_x**2/n}
	#    = sum_xx /n - sum_x**2 /n**2

	#rxy = Sxy /sqrt(Sxx) /sqrt(Syy)
	#    = ((sum_xy /n) - (sum_x *sum_y /n**2)) /sqrt(sum_xx /n - sum_x**2 /n**2) /sqrt(sum_yy /n - sum_y**2 /n**2)
	#    = n**2 *(((sum_xy /n) - (sum_x *sum_y /n**2))) /sqrt(n**2 *(sum_xx /n - sum_x**2 /n**2)) /sqrt(n**2 *(sum_yy /n - sum_y**2 /n**2))
	#    =  (sum_xy *n - sum_x *sum_y) /sqrt(sum_xx *n -sum_x**2) / sqrt(sum_yy *n - sum_y**2)
	my ($hle_x, $hle_y) =@_;
	my @hle_x = split(/\t/, $hle_x);
	my @hle_y = split(/\t/, $hle_y);
   

	my $n = 1+$#hle_x;
	my $sum_x = 0;
	my $sum_xx = 0;
	my $sum_yy = 0;
	my $sum_y = 0;
	my $sum_xy = 0;

	for (my $i =0; $i <$n; $i++){
		$sum_x += $hle_x[$i];
		$sum_xx += $hle_x[$i]**2;
		$sum_y += $hle_y[$i];
		$sum_yy += $hle_y[$i]**2;
		$sum_xy += $hle_x[$i] *$hle_y[$i];
	}
	
	my $rxy = "-";
    if($sum_xx *$n -$sum_x**2 <= 0 or $sum_yy *$n - $sum_y**2 <= 0){
    }else{
		$rxy = ($sum_xy *$n - $sum_x *$sum_y) /sqrt($sum_xx *$n -$sum_x**2) / sqrt($sum_yy *$n - $sum_y**2);
		#今回はr2乗の方が何かと便利なので
		#$rxy = ($sum_xy *$n - $sum_x *$sum_y)**2 /($sum_xx *$n -$sum_x**2) / ($sum_yy *$n - $sum_y**2);
	}
	return $rxy;
}