FC2ブログ

# 最小二乗法 Least Square Method
# 引数 期間 値 ($Period, $Price)
# 戻り値 最小二乗法 (@lsm)
sub LSM{
my ($Period, $Price) = @_;
my @lsm = ();
my $sum_x = 0;
my $sum_y = 0;
my $sum_x2 = 0;
my $sum_xy = 0;
my $count = @$Price - $Period;

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

# 合計
for(my $i = 0; $i < $Period; $i++){
$sum_x += ($i + 1);
$sum_y += $$Price[$i];
$sum_x2 += ($i + 1) * ($i + 1);
$sum_xy += ($i + 1) * $$Price[$i];
}

# 傾きa 切片b
my $a = (($Period * $sum_xy) - ($sum_x * $sum_y)) / (($Period * $sum_x2) - ($sum_x * $sum_x));
my $b = (($sum_x2 * $sum_y) - ($sum_xy * $sum_x)) / (($Period * $sum_x2) - ($sum_x * $sum_x));

# 最小二乗法 Least Square Method
for(my $i = 1; $i <= $Period; $i++){
$lsm[$i - 1] = ($a * $i) + $b;
}

return @lsm;
}


# 最小二乗法 Least Square Method
# 引数 期間 値 ($Period, $Price)
# 戻り値 hash {'lsm'} {'r2'} (%lsm)
sub LSM{
my ($Period, $Price) = @_;
my %lsm = ();
my $sum_x = 0;
my $sum_y = 0;
my $sum_x2 = 0;
my $sum_xy = 0;
my $sum_lsm = 0;
my $count = @$Price - $Period;

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

# 合計
for(my $i = 0; $i < $Period; $i++){
$sum_x += ($i + 1);
$sum_y += $$Price[$i];
$sum_x2 += ($i + 1) * ($i + 1);
$sum_xy += ($i + 1) * $$Price[$i];
}

# 傾きa 切片b
my $a = (($Period * $sum_xy) - ($sum_x * $sum_y)) / (($Period * $sum_x2) - ($sum_x * $sum_x));
my $b = (($sum_x2 * $sum_y) - ($sum_xy * $sum_x)) / (($Period * $sum_x2) - ($sum_x * $sum_x));

# 最小二乗法 Least Square Method
for(my $i = 1; $i <= $Period; $i++){
$lsm{'lsm'}->[$i - 1] = ($a * $i) + $b;
$sum_lsm += $lsm{'lsm'}->[$i - 1];
}

# 共分散
my $avg1 = $sum_lsm / $Period;
my $avg2 = $sum_y / $Period;
my $num = 0;
my $den1 = 0;
my $den2 = 0;
for(my $i = 0; $i < $Period; $i++){
my $tmp1 = ($lsm{'lsm'}->[$i] - $avg1);
my $tmp2 = ($$Price[$i] - $avg2);

$num += $tmp1 * $tmp2;
$den1 += $tmp1 * $tmp1;
$den2 += $tmp2 * $tmp2;
}
# 相関係数
my $cc = $num / sqrt($den1 * $den2);

# 決定係数 Coefficient of Determination
$lsm{'r2'} = $cc * $cc;

return %lsm;
}


参考URL
最小二乗法について
最小二乗法 [物理のかぎしっぽ]

追記
動作しているかわからないが、決定係数を付けてみた
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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