2段数量化分析法
本ウェブサイトのプログラムは、利用者の責任において、自由に御利用下さい。
Python版ウェブサイトも用意した。
カテゴリ変数を含むデータの分析法として、岡本安晴(2014)「2段数量化分析法」がある。これは、
1段目において、各カテゴリ変数に対して、2段目での分析で共通に用いるための数量化を行い、
2段目において、1段目において求められた共通数量化を用いて、種々の多変量解析を行う
というものである。
1段目の数量化は、数値計算としてはカテゴリ変量のindicator行列を量的データとみなしての主成分分析になっている。ただし、共通数量化の場合は、indicator行列を量的変量のデータとみなしたとき、データの標準化を行わずに主成分分析の計算を行っていることになるので注意。また、主成分も、分散として平方和をデータ数から1を減じた数で割った不偏分散を用いて算出されている場合がある。本ウェブサイトでは記述統計量としての分散、平方和をで割ったもの、が用いられている。不偏分散を用いた場合の数量化の値は、記述統計量の分散を用いた場合の値の倍になる。
数量化が非標準化主成分分析によって行われているとみるとき、2段数量化分析法は、
1段目において、各カテゴリ変数に対してindicator行列を作成し、カテゴリ変数ごとにindicator行列の非標準化主成分分析を行ったものを共通数量化の値とする。
2段目において、1段目において求められた共通数量化を用いて、種々の多変量解析を行う。
という分析法であると説明することもできる。Excelを用いたindicator行列の簡単な作成法の解説をpdfファイルHowToMakeG.pdfとして用意した。ファイル名HowToMakeG.pdfをクリックしてダウンロ―ド表示することができる。また、SPSSを用いて共通数量化を行う方法を説明したファイルHowTo_SPSS.pdfも用意した。ファイル名HowTo_SPSS.pdfをクリックして表示/ダウンロードすることができる。
なお、行列に関する簡潔な説明を<岡本安晴「統計学を学ぶための数学入門[下]培風館」>に用意している。
岡本(2014)「2段数量化分析法」で報告されている共通数量化とそれに基づく回帰分析および判別分析を行うプログラムを以下に用意した。
なお、同じ1つのデータセットに対して共通数量化を行い、主成分分析、回帰分析、および判別分析を行った例は、<このウェブサイト>で説明している。
第1段:共通数量化
第1段における共通数量化を行うプログラムは<CommonQ.exe>である。クリックしてダウンロード・実行できるが、実行形式のファイル*.exeのWindows 8.1におけるダウンロード実行については
http://y-okamoto-psy1949.la.coocan.jp/VCpp/Win8EXEFile/
で説明している。
ソースコードファイルなどは圧縮ファイルCommonQ.zipとして用意した。ダウンロード・解凍すれば、Visual Studio 2013で開くことができる。
プロジェクトを開いたときのエラーは無視できるが、このことは
http://y-okamoto-psy1949.la.coocan.jp/booksetc/introvcpp/vs2012FormApp/#BM1
で説明している。
Visual Studio 2013は、無料版Visual Studio Express 2013 for Windows Desktopが
https://www.visualstudio.com/downloads/download-visual-studio-vs
からダウンロードインストールすることができる。
共通数量化のプログラムを実行すると、図1のフォームが提示される。
図1
「GO」ボタンのクリックで、図2のダイアログ・ウィンドウが提示され、入力データファイル名の設定が求められる。
図2
図2では、岩坪秀一(1987)「数量化法の基礎」、朝倉書店の数量化1類のデータ (表1)を用意したDataQ1.txtを選んでいる。
表1 基準値(連続量)とカテゴリ変量 |
||
外的基準値 |
変量1 (カテゴリ値) |
変量2 (カテゴリ値) |
2 |
1 |
1 |
4 |
2 |
1 |
6 |
2 |
1 |
8 |
2 |
2 |
DataQ1.txtは、以下のようになっている。
========== DataQ1.txt =============
/ Number of Variables
4
/ Variable Names
ID Y X1 X2
/ Numbers of Categories of Variables
0 0 2 2
/
D1 2 1 1
D2 4 2 1
D3 6 2 1
D4 8 2 2
/
=============================
行の先頭がスラッシュ / で始まる最初の行の次の行に、データの変数の総数が書かれている。
次の、行の先頭がスラッシュ / で始まる行の次の行に、変数の名前(ラベル)が並べられている。
3番目の、行の先頭がスラッシュ / で始まる行の次の行には、各変数に対して0以上の整数を対応させたものが並べられている。
0のときは、変数の値は文字列として扱われ、何も変換が行われない。
1のときは、連続量の変数として扱われ、平均0、分散1に標準化される。
2以上のときは、この値が k であれば、その変数のカテゴリ数が k であることを表す。カテゴリー値は、1から k までの整数で表す。整数値を割り当てるが、尺度の水準は名義尺度(岡本安晴「計量心理学」培風館、第7−2節「尺度の水準」参照)である。したがって、変数の統計学的情報は、各カテゴリ(整数)の頻度分布で表され、この頻度分布を最大に反映する値として数量化が行われる。
4番目と5番目の先頭がスラッシュ / で始まる行に挟まれて、データ(変数の値)が上の変数のラベルの順序に対応して並べられている。
図2のダイアログウィンドウで入力データファイル名を選んで、「開く」ボタンをクリックすると、図3の出力ファイル名設定のダイアログウィンドウが表示される。
出力ファイルはテキストファイルなので、適当なテキストファイル名を設定して、「保存」ボタンをクリックする。
図3
「保存」ボタンのクリックで計算が始まる。計算が終了すると、図4のように出力ファイルが保存されたことを示すメッセージボックスが表示される。
図4
「OK」ボタンのクリックで、プログラムの実行終了となる。実行終了後、出力ファイルを開くと、入力データDataQ1.txtに対しては以下のようになる。
=============== 出力ファイル ==========================
Data
file...D:\yasuharu\www\LaCoocan\booksetc\TwoStepQA\CommonQ\CommonQ\DataQ1.txt
CatVar[0]
--> ID
n_categories = 0
CatVar[1]
--> Y
n_categories = 0
CatVar[2]
--> X1
n_categories
= 2
CatVar[3]
--> X2
n_categories = 2
Number
of cases = 4
Data...
0: D1 2 1 1
1: D2 4 2 1
2: D3 6 2 1
3: D4 8 2 2
k =
0 nCatPerVar = 0
k =
1 nCatPerVar = 0
k =
2 nCatPerVar = 2
G/Data
matrices for k = 2 ...
1 0
0 1
0 1
0 1
Lambda...
1.5
Omega...
-0.707
0.707
k =
3 nCatPerVar = 2
G/Data
matrices for k = 3 ...
1 0
1 0
1 0
0 1
Lambda...
1.5
Omega...
-0.707
0.707
Results...
ID-0 Y-0 X1-0 X2-0
D1
2
-1.73205 -0.57735
D2
4
0.57735 -0.57735
D3
6
0.57735 -0.57735
D4
8
0.57735 1.73205
================================
最後の「Results…」の後に、各変数の変換値が出力されている。変換値の変数名は、入力データの変数名に「−整数」を付けた形になっている。文字列変数として変換を行わなかった場合、および標準化のみが行われた変数は「変数名−0」の名前が与えられている。
カテゴリ変数は、例えば、そのカテゴリ変数に対して3個の数量化が求められた場合は、「変数名−0」、「変数名−1」、「変数名−2」と0から始まる通し番号がハイフン−の後に付けられる。変換値は、変換変数名の下に出力されている。
この変換値を用いて、回帰分析を行ってみる。回帰分析についての解説は<岡本安晴「心理学データ分析と測定」勁草書房>などを参照されたい。
第2段:回帰分析
回帰分析を行うプログラムとしてRegressCommonQ.exeを用意した。ソースコードファイルなどを圧縮ファイルとしてまとめたものRegressCommonQ.zipは、ダウンロード・解凍すれば、Visual Studio 2013で開くことができる。
プログラムを実行すると図5のフォームウィンドウが表示される。
図5
「GO」ボタンのクリックで、図6の入力データ名設定ダイアログ・ウィンドウが表示される。
図6
入力データファイルは、以下の形式で用意する。
=========== Data.txt ===========
/ Number
of independent variables
2
/
ID-0 Y-0 X1-0 X2-0
/
D1
2
-1.73205 -0.57735
D2
4
0.57735 -0.57735
D3
6
0.57735 -0.57735
D4
8
0.57735 1.73205
/
============================
上のData.txtは、第1段の共通数量化での出力から作成したものである。
最初の、先頭がスラッシュ / で始まる行の次の行に、独立変数の個数が書かれている。
次の、先頭がスラッシュ / で始まる行の次の行に、データの変数名が並べられている。先頭にケースID、2番目に従属変数、3番目以降に独立変数の名前(ラベル)がおかれている。
3番目と4番目の先頭がスラッシュ / で始まる行に挟まれて、データ(変数の値)が上の変数のラベルの順序に対応して並べられている。
図6のダイアログウィンドウにおいて、入力データファイル名の設定後、「開く」ボタンをクリックすると、図7の出力ファイル名の設定を求めるダイアログウィンドウが表示される。
図7
適当なテキストファイル名を設定して、「保存」ボタンをクリックすると、計算が始まる。計算終了後、図8の画面になる。
図8
横軸(Y)が従属変数のデータ値、縦軸(Y-hat)が回帰モデルによる予測値()である。左上の「Save」ボタンをクリックすると描画画面を保存することができる。「Close」ボタンをクリックすると、図8の画面は消えて、図9のメッセージボックスが表示される。
図9
「OK」ボタンのクリックで、プログラムは終了する。プログラムの終了後、上の出力ファイルresult.txtを開くと、以下のようになっている。
================ result.txt ========================
Data
file...D:\yasuharu\www\LaCoocan\booksetc\TwoStepQA\RegressCommonQ\RegressCommonQ\Data.txt
/ Number
of independent variables
/
/
Number
of cases = 4
Z...
X1-0
X2-0
Case-0
-1.732
-0.577
Case-1
0.577
-0.577
Case-2
0.577
-0.577
Case-3
0.577
1.732
Y, X...
Case-0/D1
2.000
1.000 -1.732 -0.577
Case-1/D2
4.000
1.000
0.577 -0.577
Case-2/D3
6.000
1.000
0.577 -0.577
Case-3/D4 8.000 1.000 0.577 1.732
b =
5
1.2990387113536
1.2990387113536
Y
=
Y_hat =
2
2.00000
4
5.00000
6
5.00000
8
8.00000
=========================================
「Y, X…」の後に、「Case-0/ケースID」に続いて、従属変数の値(Y)と、定数項を表す値1(1.000と表記;岡本安晴「心理学データ分析と測定」勁草書房、2.4節「重回帰モデルの理論」参照)、独立変数の値が出力されている。この変数の順序(定数項、独立変数・・・)に対応して、回帰モデルの係数が「b = 」に続いて出力されている。上の出力内容を重回帰モデルの式で表すと以下のようになる。
但し、表示桁数は小数点以下3桁に四捨五入してある。
第1段:共通数量化
上の回帰分析の場合と数量化するデータが異なるだけで、方法は同じである。
第1段における共通数量化を行うプログラムは<CommonQ.exe>である。クリックしてダウンロード・実行できるが、実行形式のファイル*.exeのWindows 8.1におけるダウンロード実行については
http://y-okamoto-psy1949.la.coocan.jp/VCpp/Win8EXEFile/
で説明している。
ソースコードファイルなどは圧縮ファイルCommonQ.zipとして用意した。ダウンロード・解凍すれば、Visual Studio 2013で開くことができる。
プロジェクトを開いたときのエラーは無視できるが、このことは
http://y-okamoto-psy1949.la.coocan.jp/booksetc/introvcpp/vs2012FormApp/#BM1
で説明している。
Visual Studio 2013は、無料版Visual Studio Express 2013 for Windows Desktopが
https://www.visualstudio.com/downloads/download-visual-studio-vs
からダウンロードインストールすることができる。
共通数量化のプログラムを実行すると、図A1のフォームが提示される。
図A1
「GO」ボタンのクリックで、図A2のダイアログ・ウィンドウが提示され、入力データファイル名の設定が求められる。
図A2
図A2では、岩坪秀一(1987)「数量化法の基礎」、朝倉書店の数量化2類のデータ (表2)を用意したDataQ2.txtを選んでいる。
表2 グループ別に与えられたアイテム(項目)・カテゴリ(選択肢)型データ
群 個体 |
項目1 |
項目2 |
選択肢1 選択肢2 |
選択肢1 選択肢2 選択肢3 |
|
A 1 2 3 |
1 0 1 0 1 0 |
1 0 0 1 0 0 0 1 0 |
B 1 2 |
1 0 0 1 |
0 1 0 0 1 0 |
C 1 2 3 |
0 1 0 1 0 1 |
0 1 0 0 0 1 0 0 1 |
DataQ2.txtは、以下のようになっている。
========== DataQ2.txt =============
/ Number of Variables
3
/ Variable Names
ID CA CB
/ Numbers of Castegories of Variables
0 2 3
/
A1 1 1
A2 1 1
A3 1 2
B1 1 2
B2 2 2
C1 2 2
C2 2 3
C3 2 3
/
=============================
行の先頭がスラッシュ / で始まる最初の行の次の行に、データの変数の総数が書かれている。
次の、行の先頭がスラッシュ / で始まる行の次の行に、変数の名前(ラベル)が並べられている。
3番目の、行の先頭がスラッシュ / で始まる行の次の行には、各変数に対して0以上の整数を対応させたものが並べられている。
0のときは、変数の値は文字列として扱われ、何も変換が行われない。
1のときは、連続量の変数として扱われ、平均0、分散1に標準化される。
2以上のときは、この値が k であれば、その変数のカテゴリ数が k であることを表す。カテゴリー値は、1から k までの整数で表す。整数値を割り当てるが、尺度の水準は名義尺度(岡本安晴「計量心理学」培風館、第7−2節「尺度の水準」参照)である。したがって、変数の統計学的情報は、各カテゴリ(整数)の頻度分布で表され、この頻度分布を最大に反映する値として数量化が行われる。
4番目と5番目の先頭がスラッシュ / で始まる行に挟まれて、データ(変数の値)が上の変数のラベルの順序に対応して並べられている。
図A2のダイアログウィンドウで入力データファイル名を選んで、「開く」ボタンをクリックすると、図A3の出力ファイル名設定のダイアログウィンドウが表示される。
出力ファイルはテキストファイルなので、適当なテキストファイル名を設定して、「保存」ボタンをクリックする。
図A3
「保存」ボタンのクリックで計算が始まる。計算が終了すると、図A4のように出力ファイルが保存されたことを示すメッセージボックスが表示される。
図A4
「OK」ボタンのクリックで、プログラムの実行終了となる。実行終了後、出力ファイルを開くと、入力データDataQ2.txtに対しては以下のようになる。
=============== 出力ファイル ==========================
Data
file...D:\yasuharu\www\LaCoocan\booksetc\TwoStepQA\CommonQ\CommonQ\DataQ2.txt
CatVar[0]
--> ID
n_categories = 0
CatVar[1]
--> CA
n_categories = 2
CatVar[2]
--> CB
n_categories = 3
Number
of cases = 8
Data...
0: A1 1 1
1: A2 1 1
2: A3 1 2
3: B1 1 2
4: B2 2 2
5: C1 2 2
6: C2 2 3
7: C3 2 3
k =
0 nCatPerVar = 0
k =
1 nCatPerVar = 2
G/Data
matrices for k = 1 ...
1 0
1 0
1 0
1 0
0 1
0 1
0 1
0 1
Lambda...
4
Omega...
-0.707
0.707
k =
2 nCatPerVar = 3
G/Data
matrices for k = 2 ...
1 0 0
1 0 0
0 1 0
0 1 0
0 1 0
0 1 0
0 0 1
0 0 1
Lambda...
3
2
Omega...
-0.408
0.707
0.816
0.000
-0.408
-0.707
Results...
ID-0 CA-0 CB-0 CB-1
A1
-1.00000 -1.00000 1.41421
A2
-1.00000 -1.00000 1.41421
A3
-1.00000 1.00000 0.00000
B1
-1.00000 1.00000 0.00000
B2
1.00000 1.00000 0.00000
C1
1.00000 1.00000 0.00000
C2 1.00000 -1.00000 -1.41421
C3
1.00000 -1.00000 -1.41421
================================
最後の「Results…」の後に、各変数の変換値が出力されている。変換値の変数名は、入力データの変数名に「−整数」を付けた形になっている。文字列変数として変換を行わなかった場合、および標準化のみが行われた変数は「変数名−0」の名前が与えられている。
カテゴリ変数は、例えば、そのカテゴリ変数に対して3個の数量化が求められた場合は、「変数名−0」、「変数名−1」、「変数名−2」と0から始まる通し番号がハイフン−の後に付けられる。変換値は、変換変数名の下に出力されている。
上の出力にある変換値を用いて、判別分析を行ってみる。ここでの判別分析はフィッシャーの判別関数を用いている。フィッシャーの判別関数についての説明はreadmeDiscrimi.pdfに用意した。
第2段:判別分析
判別分析を行うプログラムDiscrimiCommonQ.exeを用意した。ソースコードファイルなどは圧縮ファイルDiscrimiCommonQ.zipとしてまとめた。ダウンロード・解凍すればVisual Studio 2013で開くことができる。
プログラムを実行すると図A5のフォームが表示される。
図A5
「GO」ボタンのクリックで、図A6の入力データファイル名設定のダイアログウィンドウが表示される。
図A6
入力データファイルは以下の形式で用意する。
========== Data.txt ===================
/ Number
of Variables for discriminant analysis
3
/ Variable
Labels
ID CA-0 C2-0 C2-1
/ Number
of Groups
3
/ Group
Labels
GA GB GC
ID-0 CA-0 C2-0 C2-1
/ GA
A1
-1.00000 -1.00000 1.41421
A2
-1.00000 -1.00000 1.41421
A3
-1.00000 1.00000 0.00000
/ GB
B1
-1.00000 1.00000 0.00000
B2
1.00000 1.00000 0.00000
/ GC
C1
1.00000 1.00000 0.00000
C2
1.00000 -1.00000 -1.41421
C3
1.00000 -1.00000 -1.41421
/
================================
入力データData.txtは、第1段での共通数量化の出力データに基づいて作成されたものである。
行の先頭がスラッシュ / で始まる最初の行の次の行に、判別分析に用いる変数の個数を書く。
先頭がスラッシュ / で始まる2番目の行の次の行に、変数の名前(ラベル)を並べる。1番目にケースID、2番目以降に判別分析で用いる変数の名前を順番に書いていく。
先頭がスラッシュ / で始まる3番目の行の次の行に、判別するグループの数を書く。
先頭がスラッシュ / で始まる4番目の行の次の行に、グループの名前(ラベル)を並べる。
先頭がスラッシュ / で始まる5番目の行の次の行から、1行に1ケースずつ、ケースIDと判別分析に用いる変数の値を、上のケースIDおよび変数ラベルの順に合わせて書いていく。グループの区切りは、先頭がスラッシュ / で始まる行によって行う。上の例では、スラッシュ / の後にグループ名が書かれているが、これはプログラムの読み込みでは無視される。入力データを見やすくするためのものである。
データの最後は、スラッシュ / で始まる行を置く。
図A6の入力データファイル名設定ダイアログウィンドウにおいてファイル名の設定後、「開く」ボタンをクリックすると、図A7の出力データファイル名設定のダイアログウィンドウが表示される。
図A7
適当なテキストファイル名を設定して、「保存」ボタンをクリックすると計算が始まる。
計算が終了すると、図A8の画面になる。
図A8
各ケースの判別関数の値とグループごとの判別関数の値の平均を横軸および縦軸の値とする点がプロットされている。小円が各ケースを表し、小正方形がグループを表す。横軸および縦軸の判別関数は、「H-Axis」および「V-Axis」にその次元を指定することによって選ぶことができる。
図A9
図A9では、第1判別関数が横軸、第2判別関数が縦軸の値である。「H-Axis」あるいは「V-Axis」の値を変更したときは、「Re-Draw」ボタンのクリックで対応する判別関数による布置の描画が行われる。
カテゴリ変数の場合は、ケースの点が重なることがあるので、ランダムな一様乱数を座標点に加えて、重なりを避けている。「Re-Draw」ボタンをクリックすると、一様乱数の加え方を変えた布置が再描画されるので、見やすい布置が得られるまで「Re-Draw」ボタンをクリックし直せばよい。
「Save」ボタンのクリックで、描画画面を保存することができる。
「Close」ボタンのクリックで、描画画面は消えて、図A10のメッセージボックスが表示される。
図A10
「OK」ボタンをクリックすると、プログラムは終了する。
プログラムの終了後、出力ファイルを開くと、上の入力データの場合は、以下のようになっている。
================ Result.txt ===========================
Data
file...D:\yasuharu\www\LaCoocan\booksetc\TwoStepQA\DiscrimiCommonQ\DiscrimiCommonQ\Data.txt
Variable
Labels...
CA-0
C2-0
C2-1
Group-0
-1.000 -1.000 1.414
-1.000 -1.000 1.414
-1.000 1.000 0.000
Group-1
-1.000 1.000 0.000
1.000 1.000 0.000
Group-2
1.000 1.000 0.000
1.000 -1.000 -1.414
1.000 -1.000 -1.414
Group-0
-1.000 -0.333 0.943
Group-1
0.000 1.000 0.000
Group-2
1.000 -0.333 -0.943
W =
2.000 0.000 0.000
0.000 5.333 0.000
0.000 0.000 2.667
n_eigen
= 3
A =
6.000 0.000 -5.657
0.000 2.667 0.000
-5.657 0.000 5.333
ck_rank
= 2
Lambda[0]
= 5.0000000
Lambda[1]
= 0.5000000
Group
means of discriminant factors (or canonical variates)...
Group-GA
-1.05409 -0.33333
Group-GB
0.00000 1.00000
Group-GC
1.05409 -0.33333
Individual
discriminant factors...
Group-GA
A1
-1.26491 -1.00000
A2
-1.26491 -1.00000
A3 -0.63246 1.00000
Group-GB
B1
-0.63246 1.00000
B2
0.63246 1.00000
Group-GC
C1
0.63246 1.00000
C2
1.26491 -1.00000
C3
1.26491 -1.00000
S =
0.94868 0.00000
0.00000 1.00000
-0.89443 0.00000
==========================================
最後の、「S = 」に続いて、変数と判別関数との相関係数(構造行列)が出力されている。変数CA-0、C2-0、C2-1は行、判別関数は列に対応している。
求められた判別関数の総数は、「ck_rank」の値として示されている。上の出力の場合、「ck_rank = 2」である。
上の構造行列から、
第1判別関数は、変数CA-0と強い正の関係、変数C2-1と強い負の関係があることがわかる。これは、数量化の値CA-0およびC2-1が、グループをGA、GB、GCの順に並べるものであることを表している。
第2判別関数は、変数C2-0と強い正の関係がある。これは、数量化の値C2-0がグループGBをグループGAおよびGCと区別するもであることを表している。