Up

カテゴリカルデータの主成分分析

単純2段法

 

 質問項目がカテゴリカル変量である場合は多くみられるが、その分析法として村上(1999)は非計量的主成分分析を提案している。この分析法では、k番目()のカテゴリカル変量に対するデータを指標行列に対する重み(数量化)行列をの因子モデルにおける得点行列を、負荷行列をで表すとき、次式

を制約条件

のもとで最小化する解が求められる。しかし、ここではの情報を最大限反映する数量化に基づいた主成分分析を行うため、次の単純2段主成分分析を考える。この単純2段主成分分析を行うプログラムについては、このウェブサイトの後半で説明する。

 

2 単純2段主成分分析

各カテゴリカル変量)の数量化を行い(第1段)、その後、数量化されたカテゴリカルデータと他の数量データがあればそれを加えて主成分分析を行う。

(1)カテゴリカルデータの数量化

数量化のための重みの分散が最大(極大)になるように選ぶ。

、 

とおき、の制約のもとでを最大にするを求めるため、目的関数を

とおく。

なので、求めるは(2)式を満たす。

(2)式に対して、例えば  は1組の解である。

(2)式を満たす2組の解、、および、に対して

が成り立つ。したがって、

である。また、

より、

となる。これより、標準化得点

を得る。

とおく。

 

(2)主成分分析

 すなわちの数量化による標準得点に対して

とおく。

(2a)データがカテゴリカル変量のみからなる場合

の主成分分析を行う。

(2b)データがカテゴリカル変量と数量データとからなる場合

に対して主成分分析を行う。

 

 

プログラム

 (2a)のカテゴリカル変量のみからなる場合に対する上の方法によるプログラムPCACatVar.exeを用意した。プログラムファイル名PCACatVar.exeをクリックしてダウンロード・実行することができる。実行開始時に「***.dllがインストールされていません。」というようなエラーメッセージが表示された場合は、無料開発ツールVisual Studio Express 2012 for Windows Desktop

http://www.microsoft.com/visualstudio/jpn/downloads

からダウンロード・インストールすると必要なファイルがインストールされ、プログラムが実行できるようになる。プログラムのソースファイルなどは圧縮ファイルPCACatVar.zipとしてまとめたので、圧縮ファイル名PCACatVar.zipをクリックしてダウンロード・解凍すれば、Visual Studio 2012で開くことができる。

プログラムPCACatVar.exeを実行すると図1のフォームが表示される。

図1

 

N of Comp. = 」の右側のテキストボックスに求める主成分の個数を設定して、「GO」ボタンをクリックする。図2の入力ファイル名設定のダイアログウィンドウが表示される。

図2

 

入力ファイル名(ファイルの形式は後で説明する)を設定して、「開く」ボタンをクリックすると、計算結果が出力される出力用ファイル名の設定を求めるダイアログウィンドウが表示される(図3)。

図3

 

出力用のテキストファイル名を設定して「保存」ボタンをクリックすると計算が始まる。計算が終了すると、まず、各データ(ケース)に対する主成分の値を座標とする散布図が表示される(図4)。

図4

 

図4の左上は、図5のようになっている。

図5

 

横軸と縦軸に主成分の軸を選び直して、「Draw」ボタンをクリックすると、指定した軸による散布図が描かれる。表示されている散布図は、「Save」ボタンのクリックで保存することができる。保存した散布図は、後でWord文書などに挿入したりすることができる。「Close」ボタンをクリックすると、数量化得点と主成分との相関係数を座標とする散布図が表示される(図6)。

図6

 

この数量化得点と主成分との関係(構造)を表す散布図により、主成分の解釈を行うことができる。数量化得点の解釈は、出力ファイルの説明のところで扱う。図6の左上のボタンなどの配置は、図5と同じである。「Close」ボタンのクリックでフォームは閉じて、図7のダイアログボックスが表示される。

図7

 

OK」ボタンのクリックでプログラムの実行は終了する。

 

入力ファイルと出力ファイル

 入力ファイルは、図2で設定したDataMurakami.txtの場合、以下のようになっている。

==============================================

 

        村上 隆 平成11年(1999)科研報告書、Table 1

       

        Var1: 生国; ドイツ・オーストリア1、フランス2、ロシア3

        Var2: 作品の性格; 絶対音楽1、中間的2、表題・劇音楽3

        Var3: 時期; 19世紀前半1、19世紀後半2、20世紀前半3

       

/       カテゴリー変数の総数

                3

               

/       カテゴリー変数名

                Country         Charactr                period

 

/       変数ごとのカテゴリー数

                3               3               3

               

/       データ: ID文字列    カテゴリー値・・・

Beethoven               1       1       1

Schubert                1       2       1

Wagner                  1       3       2

Schoenberg              1       1       3

Berlioz                 2       3       1

Bizet                   2       3       2

Debussey                2       2       3

Tchaikovsky             3       2       2

Musorgsky               3       3       2

Stravinsky              3       2       3

/

==============================================

 

最初の「スラッシュ / 」で始まる行まではコメントである。この入力ファイルのデータが、BeethovenからStravinskyまでの10人の作曲家についての、生国、作品の性格、時期に関するそれぞれ3カテゴリーによる評定であることが示されている。

この最初の「スラッシュ / 」で始まる行の次の行に、カテゴリー変数の個数を書く。上のデータの場合は、生国、作品の性格、時期の3変数である。

次の「スラッシュ / 」で始まる行の次の行に、各カテゴリー変数のラベル、「Country」、「Charactr」、「period」、を順番に並べて書く。これはプログラムの出力に用いられるので、分かり易いものを用いる。

3番目の「スラッシュ / 」で始まる行の次の行には、各カテゴリー変数における選択カテゴリー数を並べて書く。上のデータの場合、すべてカテゴリー数は3個である。カテゴリー値は、カテゴリー数がK個の場合は、1からKまでの整数値を用いる。カテゴリー値は名義尺度であるので、どの選択カテゴリーにどの数値を対応させるかは任意である。

4番目と5番目の「スラッシュ / 」で始まる行の間にデータ値を1行に1ケース単位で書いていく。まず、各データの表すケースのラベルを書く。これは出力に用いられるので、分かり易ものを用いる。続いて、各カテゴリー変数の選択カテゴリーを1からKまでの整数で表したものを順番に書いていく。

上のデータを入力ファイルとしたときの出力ファイルは以下のようになる。

============================================

Data file...D:\yasuharu\www\LaCoocan\booksetc\pm2010\PCACatVars\PCACatVar\PCACatVar\DataMurakami.txt

 

 

        村上 隆 平成11年(1999)科研報告書、Table 1

       

        Var1: 生国; ドイツ・オーストリア1、フランス2、ロシア3

        Var2: 作品の性格; 絶対音楽1、中間的2、表題・劇音楽3

        Var3: 時期; 19世紀前半1、19世紀後半2、20世紀前半3

       

/       カテゴリー変数の総数

               

/       カテゴリー変数名

 

/       変数ごとのカテゴリー数

 

CatVar[0] --> Country     n_categories = 3

CatVar[1] --> Charactr     n_categories = 3

CatVar[2] --> period     n_categories = 3

               

/       データ: ID文字列    カテゴリー値・・・

 

Number of cases = 10

 

Data...

Beethoven             1  1  1

Schubert              1  2  1

Wagner                1  3  2

Schoenberg            1  1  3

Berlioz               2  3  1

Bizet                 2  3  2

Debussey              2  2  3

Tchaikovsky           3  2  2

Musorgsky             3  3  2

Stravinsky            3  2  3

 

Indicator matrices...

Beethoven            1 0 0  1 0 0  1 0 0

Schubert             1 0 0  0 1 0  1 0 0

Wagner               1 0 0  0 0 1  0 1 0

Schoenberg           1 0 0  1 0 0  0 0 1

Berlioz              0 1 0  0 0 1  1 0 0

Bizet                0 1 0  0 0 1  0 1 0

Debussey             0 1 0  0 1 0  0 0 1

Tchaikovsky          0 0 1  0 1 0  0 1 0

Musorgsky            0 0 1  0 0 1  0 1 0

Stravinsky           0 0 1  0 1 0  0 0 1

 

 

CatVar-Country

 

Lambda...

                 3.6                   3

Omega...

               0.816               0.000

              -0.408               0.707

              -0.408              -0.707

 

 

CatVar-Charactr

 

Lambda...

                   4                 2.4

Omega...

               0.000               0.816

               0.707              -0.408

              -0.707              -0.408

 

 

CatVar-period

 

Lambda...

                 3.6                   3

Omega...

              -0.408               0.707

               0.816               0.000

              -0.408              -0.707

 

Variable Labels...

Country-0

Country-1

Charactr-0

Charactr-1

period-0

period-1

 

Z...

                          Country-0      Country-1     Charactr-0     Charactr-1       period-0       period-1

           Beethoven          1.225          0.000          0.000          2.000         -0.816          1.291

            Schubert          1.225          0.000          1.118         -0.500         -0.816          1.291

              Wagner          1.225          0.000         -1.118         -0.500          1.225          0.000

          Schoenberg          1.225          0.000          0.000          2.000         -0.816         -1.291

             Berlioz         -0.816          1.291         -1.118         -0.500         -0.816          1.291

               Bizet         -0.816          1.291         -1.118         -0.500          1.225          0.000

            Debussey         -0.816          1.291          1.118         -0.500         -0.816         -1.291

         Tchaikovsky         -0.816         -1.291          1.118         -0.500          1.225          0.000

           Musorgsky         -0.816         -1.291         -1.118         -0.500          1.225          0.000

          Stravinsky         -0.816         -1.291          1.118         -0.500         -0.816         -1.291

 

Singular values...

   1.39311   1.25179   1.05663   0.89511   0.61414   0.44430

 

Rank of Z = 6

 

The principal components...

           Beethoven:           1.760         -0.678

            Schubert:           0.846          0.009

              Wagner:          -0.331         -1.006

          Schoenberg:           1.538          0.453

             Berlioz:          -0.164         -1.266

               Bizet:          -1.046         -1.086

            Debussey:          -0.091          1.061

         Tchaikovsky:          -0.959          0.919

           Musorgsky:          -1.254         -0.277

          Stravinsky:          -0.299          1.870

 

Structure matrix...

                                 comp. 1             comp. 2

           Country-0               0.778              -0.249

           Country-1               0.156              -0.491

          Charactr-0               0.256               0.838

          Charactr-1               0.825              -0.056

            period-0              -0.733              -0.296

            period-1               0.167              -0.687

============================================

まず、読みこまれたデータと、カテゴリー変数の値を指標行列で表したものが出力されている。

続いて、各カテゴリー変数ごとに、数量化のときに算出されたの値が出力されている。これは、の対が、の下にの値が縦ベクトルの形で示されている。例えば、カテゴリー変数Countryの場合、に対してはであり、に対してはである。

の値のパターンから、対応する数量化の解釈ができる。Countryにおけるに対するはは、「ドイツ・オーストリア」に対して0.816を与え、「フランス」と「ロシア」には-0.408を与えるものであるので、「ドイツ・オーストリア」と(「フランス」および「ロシア」)を区別する数量化である。

次に、各カテゴリー変量を数量化した標準得点のラベルが示される。このラベルはカテゴリー変数のラベルに0からの整数値が順番に付けられた形で作成される。順番は、上のの値の大きさの順番に対応している。

これらの数量化標準得点に対して主成分分析が行われる。主成分分析を行ったときの特異値が「Singular values…」の後に示されている。

各ケースの主成分の値は、「The principal components…」の後に示されている。これらの値は、図4の散布図を描くのに用いられている。

主成分値とカテゴリー変数の標準化得点との相関係数は、「Structure matrix…」の後に示されている。この値は、図6の散布図の作成に用いられているが、主成分の解釈を行うのに有用である。例えば、図6を見ると、第1主成分とCharactr-1(絶対音楽vs<中間、表題>)およびCountry-0(ドイツ・オーストリアvs<フランス、ロシア>)の間に生の相関関係があり、このことは図4においてBeethovenSchoenbergが右端に位置していることに対応している。図6において第1主成分はperiod-0(19c後半vs<19c前半、20c前半>)との間に負の相関関係があることが示されているが、これは図4ではTchaikovskyMusorgskyBizetWagnerが左側に位置していることに対応している。第1主成分は、(ドイツ・オーストリア、絶対音楽)に対して正の値、19c後半に対して負の値をとる傾向の成分であるといえる。(生国、作品の性格)の特性と時期の特性が第1主成分の正の値と負の値によって表されている。

 

 

参考文献

村上隆(1999).科学研究費補助金(09610114)研究成果報告書

岡本安晴(2013)「カテゴリカルデータの単純2段主成分分析」日本行動計量学会第41回大会抄録集、192-195

 

Up