散布図の相関係数
図1のように描かれた散布図に対して相関係数を求めるVisual C++/CLRプログラムCorCalcFromScatter.exeを作成した。
図1
図1の状態で「Calc」ボタンをクリックすると相関係数が算出され図2のように散布図の上部に算出された相関係数が表示される。
図2
表示されている散布図は、「Save」ボタンのクリックでファイルに保存される。「Clear」ボタンのクリックで画面はクリアされる。
プログラムは.NET Framework 3.5 対応であり、プログラム名CorCalcFromScatter.exeをクリックしてダウンロード・実行することが出来る。実行開始時は図3のように描画画面は真白である。
図3
白画面上でマウスの左ボタンでクリックすると黒の小円が描画され、黒の小円上で右ボタンクリックすると小円が消える。左ボタンをクリックした状態でマウスを動かすとカーソルの動いた後に小円が描かれる。右ボタンをクリックした状態でマウスを動かすとカーソルの動いた後の小円が消される。「Clear」ボタンのクリックですべての小円が消される。
マウスのクリックによる処理は次のメソッドにより行われている。
private: System::Void pictureBox1_MouseDown(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^
e) {
CheckPlot( e );
}
マウスのドラッグ(動き)に対しては次のメソッドが呼び出されている。
private: System::Void pictureBox1_MouseMove(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^
e) {
if
((e->Button == Windows::Forms::MouseButtons::Left) || (e->Button ==
Windows::Forms::MouseButtons::Right))
CheckPlot( e );
}
メソッドCheckPlotは以下のようなコードであり、マウスの位置に合わせた処理が行われている。
void CheckPlot(
System::Windows::Forms::MouseEventArgs ^e ){
if ((e->X < 0) || (e->X > 499) ||
(e->Y < 0) || (e->Y > 499)) return;
if (e->Button ==
Windows::Forms::MouseButtons::Left){
int px = e->X / 10, py = e->Y / 10;
pictureBox1->Image
= pictureBox1->Image;
Graphics
^g = Graphics::FromImage(pictureBox1->Image);
Brush
^ bsh = gcnew SolidBrush(Color::Black);
g->FillEllipse(bsh,
px*10, py*10, 10, 10);
data[px][49-py]
= 1;
}
if (e->Button ==
Windows::Forms::MouseButtons::Right){
int px = e->X / 10, py = e->Y / 10;
pictureBox1->Image
= pictureBox1->Image;
Graphics
^g = Graphics::FromImage(pictureBox1->Image);
Brush
^ bsh = gcnew SolidBrush(Color::White);
g->FillEllipse(bsh,
px*10, py*10, 10, 10);
data[px][49-py]
= 0;
}
}
プログラムのソースコードなどは圧縮ファイルCorCalcFromScatter.zipとしてまとめた。ファイル名CorCalcFromScatter.zipをマウスボタンでクリックしてダウンロードできる。ダウンロードしたファイルは、マウスの右ボタンクリックで表示されるメニュから「解凍」あるいは「展開」を選ぶと解凍される。解凍したファイルは、Visual Studio 2013などで開くことが出来る。
母数としての相関係数の値を指定してN個の点をランダムにサンプルするプログラムは<相関係数のシミュレーション>に用意した。
また、Visual C++プログラミングの入門書<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>を上梓した。