FC2ブログ

# 偏相関係数 Partial Correlation Coefficient
# 引数 期間 値 値 値 ($Period, \@PriceX, \@PriceY, \@PriceZ)
# 戻り値 偏相関係数 (@pcc)
sub PCC{
my ($Period, $PriceX, $PriceY, $PriceZ) = @_;
my @pcc = ();
my @Price = ([@$PriceX], [@$PriceY], [@$PriceZ]);
my @xyz = ([0,1],[0,2],[1,2]);
my $count = @$PriceX - $Period;

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

# 計算
for(my $i = $count; $i >= 0; $i--){

# $j= [0] XY [1] XZ [2] YZ
my @cc = ();
for(my $j = 0; $j <= 2; $j++){
my $xyz1 = $xyz[$j][0];
my $xyz2 = $xyz[$j][1];

# 平均
my $avg1 = 0;
my $avg2 = 0;
for(my $k = 0; $k < $Period; $k++){
$avg1 += $Price[$xyz1][$i + $k];
$avg2 += $Price[$xyz2][$i + $k];
}
$avg1 = $avg1 / $Period;
$avg2 = $avg2 / $Period;

# 共分散
my $num = 0;
my $den1 = 0;
my $den2 = 0;
for(my $k = 0; $k < $Period; $k++){
my $tmp1 = ($Price[$xyz1][$i + $k] - $avg1);
my $tmp2 = ($Price[$xyz2][$i + $k] - $avg2);

$num += $tmp1 * $tmp2;
$den1 += $tmp1 * $tmp1;
$den2 += $tmp2 * $tmp2;
}

# 相関係数
$cc[$j] = $num / sqrt($den1 * $den2);
}

# 偏相関係数 $cc = [0] X [1] Y [2] Z 変数X,Yから変数Zの影響を取り除く
$pcc[$i] = ($cc[0] - ($cc[1] * $cc[2])) / (sqrt(1 - ($cc[1] * $cc[1])) * sqrt(1 - ($cc[2] * $cc[2])));
}

return @pcc;
}


参考URL
偏相関係数・擬似相関・見かけの相関
偏相関係数 とは - 統計学用語
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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