FC2ブログ

# ケンドールの順位相関係数 Kendall Rank Correlation Coefficient
# 引数 期間 値 値 ($Period, \@Price1, \@Price2)
# 戻り値 ケンドールの順位相関係数 (@krcc)
sub KRCC{
my ($Period, $Price1, $Price2) = @_;
my @krcc = ();
my $count = @$Price1 - $Period;

# 期間と配列数の確認
if(($Period <= 0) || ($count < 0) || (@$Price1 != @$Price2)){
return 0;
}

# 計算
my $den = ($Period * ($Period - 1)) / 2;
for(my $i = $count; $i >= 0; $i--){

# 使用する値
my @SortPrice1 = ();
my @SortPrice2 = ();
for(my $j = 0; $j < $Period; $j++){
$SortPrice1[$j][0] = $$Price1[$i + $j];
$SortPrice1[$j][1] = $j;
$SortPrice2[$j][0] = $$Price2[$i + $j];
$SortPrice2[$j][1] = $j;
}

# 昇順ソート
@SortPrice1 = sort {$a->[0] <=> $b->[0]} @SortPrice1;
@SortPrice2 = sort {$a->[0] <=> $b->[0]} @SortPrice2;

# 同順位の場合には、平均値を使用する
&RANKAVG($Period, \@SortPrice1);
&RANKAVG($Period, \@SortPrice2);

# 順位
my @Rank1 = ();
my @Rank2 = ();
my $r = 0;
for(my $j = 0; $j < $Period; $j++){
$r = $SortPrice1[$j][1];
$Rank1[$r] = $SortPrice1[$j][2];
$r = $SortPrice2[$j][1];
$Rank2[$r] = $SortPrice2[$j][2];
}

# 大小関係の比較(x, y)
my $p = 0;
my $q = 0;
for(my $j = 0; $j < $Period - 1; $j++){
my $x = $Rank1[$j];
my $y = $Rank2[$j];
for(my $k = 1; $k < $Period - $j; $k++){
# 右上(大,大) 左下(小,小)
if(($x < $Rank1[$j + $k]) && ($y < $Rank2[$j + $k]) || ($x > $Rank1[$j + $k]) && ($y > $Rank2[$j + $k])){
$p += 1;
}else {
# 左上(小,大) 右下(大,小)
if(($x > $Rank1[$j + $k]) && ($y < $Rank2[$j + $k]) || ($x < $Rank1[$j + $k]) && ($y > $Rank2[$j + $k])){
$q += 1;
}
}
}
}

# ケンドールの順位相関係数
$krcc[$i] = ($p - $q) / $den;
}

return @krcc;
}


参考URL
Kendall tau rank correlation coefficient - Wikipedia, the free encyclopedia
perlでテクニカル分析 55 スピアマンの順位相関係数 (Spearman's Rank Correlation Coefficient: SRCC)
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS