数量化1類
カテゴリ変数による回帰分析
従属変数(外的基準値という)が連続量で与えられていて、独立変数が質的データである場合において、外的基準値を予測するのに最適な質的データの数量化を考える。例えば、岩坪(1987)では、表1のようなデータ例が挙げられている。
表1 基準値(連続量)とカテゴリ変量 |
||
外的基準値 |
変量1 (カテゴリ値) |
変量2 (カテゴリ値) |
2 |
1 |
1 |
4 |
2 |
1 |
6 |
2 |
1 |
8 |
2 |
2 |
表1のデータを数量化1類のプログラムQ1.exeで分析すると図1のような分析結果が得られる。
図1
横軸が外的基準値Yを表し、縦軸がカテゴリ変量による予測値(図ではY-hatと表記)を表す。外的基準値Yと予測値との相関係数は0.949、決定係数(相関係数の2乗)は0.900と高い値であるので、カテゴリ変量による外的基準値の予測はよいといえる。
プログラムQ1.exeはクリックしてダウンロード・実行することができる。実行開始時に「***.dllファイルがありません」というようなエラーメッセージが表示されたときは、Visual Studio Express for Windows DesktopをMicrosoft社のウェブサイト
http://www.microsoft.com/visualstudio/jpn/downloads
からダウンロード・インストールすれば必要なファイルがインストールされてプログラムQ1.exeが実行できるようになる。なお、Windows 8/8.1の場合の手順については、特にウェブサイトを用意して説明している。
プログラムを実行すると図2のフォームが表示される。
図2
「GO」ボタンのクリックで入力データファイル名の設定を求めるダイアログウィンドウが表示される(図3)。
図3
入力データファイル名を設定する。表1のデータの場合は、図4のように用意する。
図4
1番目のスラッシュ / で始まる行の次の行にカテゴリ変数の数を書く。スラッシュ / で始まる行は、区切りとして扱われ、その右側に文字列を書いても無視されるので、コメントを書くことができる。
2番目のスラッシュ / で始まる行の次の行に、各カテゴリ変数の名前を並べて書く。
3番目のスラッシュ / で始まる行の次の行に、各カテゴリ変数におけるカテゴリ値の数を書く。
4番目と5番目のスラッシュ / で始まる行の間に、
外的基準値 カテゴリ変量値 カテゴリ変量値 ・・・
と書いていく。カテゴリ変量値は、カテゴリ値がK個の場合は、1からKまでの整数値で表す。カテゴリ変数において、データで用いられていないカテゴリ値があれば、その値を除いて考える。K個のカテゴリ値のうち h 個用いられていないカテゴリ値があれば、それらを除いた (K-h) 個のカテゴリ値で考え、用いられたカテゴリ値に 1 から
K-h までの整数値を割り当てる。また、ただ1つのカテゴリ値だけが用いられているカテゴリ変数は、その変数を除く。
図3において、入力データファイル名を設定後、「開く」ボタンをクリックすると、次に計算結果の出力用ファイル名の設定を求めるダイアログウィンドウが表示される(図5)。
図5
適当なファイル名(テキストファイルとして出力される)を設定して、「保存」ボタンをクリックすると計算が始まる。計算が終了すると計算結果が図1のように表示される。このグラフは、左上の「Save」ボタンのクリックで保存することができる。「Close」ボタンのクリックで、図1のウィンドウは閉じられて、計算結果の出力用ファイルが保存されたことを示すメッセージボックスが表示される(図6)。
図6
「OK」ボタンのクリックでメッセージボックスは閉じられ、プログラムの実行終了となる。
プログラムの終了後、出力ファイルを開くと、以下のように出力されている。
Data
file...D:\yasuharu\www\LaCoocan\VCpp\QMethods\Q1\Q1\Q1\DataForQ1.txt
岩坪、表2.1
/ カテゴリ変数の数
/ カテゴリ変数名
/ 各カテゴリ変数のカテゴリ数
CatVar[0] --> Item-1 n_categories
= 2
CatVar[1] --> Item-2 n_categories
= 2
/ データ
Number of cases = 4
Y[0] = 2 X[0][0] = 1 Nijk[0][0][0]
= 1 Nijk[0][0][1]
= 0 X[0][1] = 1 Nijk[0][1][0]
= 1 Nijk[0][1][1]
= 0
Y[1] = 4 X[1][0] = 2 Nijk[1][0][0]
= 0 Nijk[1][0][1]
= 1 X[1][1] = 1 Nijk[1][1][0]
= 1 Nijk[1][1][1]
= 0
Y[2] = 6 X[2][0] = 2 Nijk[2][0][0]
= 0 Nijk[2][0][1]
= 1 X[2][1] = 1 Nijk[2][1][0]
= 1 Nijk[2][1][1]
= 0
Y[3] = 8 X[3][0] = 2 Nijk[3][0][0]
= 0 Nijk[3][0][1]
= 1 X[3][1] = 2 Nijk[3][1][0]
= 0 Nijk[3][1][1]
= 1
Nhatjk[0][0]
= 0.250 Nhatjk[0][1]
= 0.750
Nhatjk[1][0]
= 0.750 Nhatjk[1][1]
= 0.250
Yhat = 5
Xstd[0][0] = -2.25
Xstd[0][1] = 0.75
Xstd[1][0] = -0.75
Xstd[1][1] = 2.25
Yest[0] = 2
Yest[1] = 5
Yest[2] = 5
Yest[3] = 8
Xstd[0][0] = -2.250
Xstd[1][0] = -0.750
Xstd[0][1] = 0.750
Xstd[1][1] = 2.250
r = 0.94868 r^2 = 0.90000
Y[i] は (i+1) 番目のケースの外的基準値、X[i][j] は (i+1) 番目のケースの
(j+1) 番目のカテゴリ変量の値である。インデクス i および
j は0から始まる形式であるが、これはC++における配列の添え字が0から始まることに合わせた出力である。Nijk はの値であるが、詳しくはPDFファイルで解説している。
Xstd[j][k]は(j+1)番目のカテゴリ変数の(k+1)番目のカテゴリ値k+1に割り当てられた数量化の値である。Xstd[j][k]は、カテゴリ変量とカテゴリ値による順序付けで出力されたものと、Xstd[j][k]の値の大きさによる順序付けで出力されたものの2通りの出力がある。値の大きさの順序による出力は Yest[i] の出力の後に書き出されている。
Y[i]は(i+1)番目のデータにおける外的基準値であり、Yest[i]はそれに対するカテゴリ変量による予測値である。
次式
によって予測されているので、上の出力の場合、カテゴリ値が大きいほど外的基準値が大きくなっていることが表されていることになる。また、カテゴリ変量1は外的基準値を小さい値に、カテゴリ変量2は外的基準値を大きい値に予測していることがわかる。
数量化1類の詳しい説明は、このPDFファイルに用意した。
なお、数量化の計算においては行列演算(線形代数)が有用であるが、データ分析に必要な行列演算などを簡潔に説明したものとして
岡本安晴(2009)「統計学を学ぶための数学入門[下]:データ分析に活かす」培風館
を用意した。
プログラムのソースコードファイルなどは、圧縮ファイルQ1.zipとして用意した。圧縮ファイル名Q1.zipをクリックしてダウンロード・解凍すれば、Visual Studio 2012で開くことができる。最初に開いたときに、フォームデザイナ関係のエラーが表示されたときは、プロジェクトをいったん閉じて再度開き直せばよい。
参考文献
岩坪秀一 1987 「数量化法の基礎」 朝倉書店