どうみても、Correlation() の計算式は
ピアソン積率相関係数 のそれではないっ!!!
確かに似たような値が出てきてはいるが、明らかに違うっ!!!
ぬぅ。なんということだ。大前提からしてやり直しかっ!!!
しかも。これは致命的な問題ではないからいいようなものの…同モジュールに含まれている平方根を出す関数 SqrRoot() は
0.0 を入れると NaN を返すっ!!!
まてぃぃいいいいい!!!
どこの世界に0.0 の平方根が計算できない数値演算ライブラリがあるっ!!! ちなみに、他の値を入れると(プラスの値であれば)妥当な出力を出してくる。どうやら、0.0 の場合におかしくなるような漸近式を使っているらしい。
まぁ、0.0だろうが NaN だろうが、その結果を分母に持ってきて分数を計算すれば、NaNになるのは変わらないので、そりゃ結果だけ見れば構わないと言えば構わないのだが…。とりあえず、この程度のデバッグもできていないモジュールである以上、これは信頼するわけには行かぬ。
というわけで根こそぎ作り変えてくれよう。
!!決定!!
とりあえず、次のようなデザインにする。
- まず、データ列を1データ列1ファイルに分割する。
- そのデータ列には、当該データ列の平均値、平均値と各データの二乗和、さらに二乗和の平方根、の3つは最低限でも、データとして記録する。
- できればデータの個数も記録する。
- もちろん、ラベル名も記録する。
- いうまでもなく、データ列の値そのものも1行1エレメントで記録する。
- 2 で得られた値のどれかが NaN になるか、あるいは「二乗和の平方根」が 0.0 になる場合は、そのようなデータ列は当該データファイルを作らない。
- このファイルはすべて文字列で数値を記録する。
…それにしてもここまで巻き戻るとは…
PerlではRで読める程度に整形して、Rで処理がいいんじゃなかろうか?
返信削除当該データ列の平均値、平均値と各データの二乗和、さらに二乗和の平方根
はどれもO(N)だから大して影響しないだろうし?