Last updated: 2016- October 2009. Kajiyama                    [ 目次に戻る ]

  HairEyeColor:多重クロス表を多重対応分析

Multiple Correspondence Analysis  Rパッケージ(MASS)


  1.  入門編を終えた後の参考書

    ・結果の解釈が詳しい参考書 "記述的多変量解析法", 大隈 昇・ルバール, 日科技連出版,1994.ISBN: 4-8171-2019-3
    ・03章 対応分析,"Rによるデータサイエンス", 金 明哲, 森北出版,2007.ISBN-10: 4627096011
    ・09章 対応分析,"Rで学ぶデータサイエンス1"カテゴリカルデータ解析", 藤井良宜, 共立出版,2010.ISBN:978-4-320-01921-8
    ・15章 質的多変量解析II(分類),"Rで学ぶデータサイエンス17"社会調査データ解析",鄭躍軍・金明哲,共立出版,2011.ISBN:978-4-320-01969-0
    ・"対応分析入門 原理から応用まで,解説Rで検算しながら理解する",Sten-Erik Clausen著,藤本一男訳・解説, オーム社, 2015. ISBN978-4-274-21827-9


  2.  3変数以上の多重対応分析で使用するRのパッケージ(MASS)に含まれる関数 mca (df, nf = 2, abbrev = FALSE)を使用する. 2変数の対応分析はcorresp

    Rの「コンソール」画面に,

    library (MASS) # パッケージMASSの読み込みが必要

    ? mca # と記述し, 関数 mca の情報を,表示し確認する.



  3. 多重対応分析で使用する「スタック形式」データ: 「アンスタック形式」と「スタック形式」のデータ


    (1) Rの解析で使用するデータセットのタイプ 事例:HairEyeColor

    592人の大学生を対象に@性別,A髪の毛の色,B目の色を調べ3次元のクロス集計表に整理したのが表1「HairEyeColor」である.

    Rに前もって組み込みこまれているデータセット「HairEyeColor」を使用して多重対応分析を行う.

    もしこれが2次元のクロス表であれば対応分析のデータ形式として使用できる.

    表1は多次元のクロス集計表なので,「アンスタック形式」のままでは多重対応分析のデータとして使用できない.

    Rの多重対応分析は表2,表3,表4の「スタック形式」を使用する.分析に使用するためにデータ変換を行う知識が必要になる.


    アンスタック形式


    表1 HairEyeColor 性別(2水準)髪の毛の色(4水準)目の色(4水準)の3次元の多重クロス表 「アンスタック形式」
     
      @性別Sex
    男性male 女性female
    A髪の色
    hair color
    B目の色eye color B目の色eye color
    Brown Blue Hazel Green Brown Blue Hazel Green
    Black 32 11 10 3 36 9 5 2
    Brown 53 50 25 15 66 34 29 14
    Red 10 10 7 7 16 7 7 7
    Blond 3 30 5 8 4 64 5 8


    表1' HairEyeColor  表1と表1' の形式は異なるが,内容は同じ3次元の多重クロス表である.「アンスタック形式」

    @性別 A髪の色 B目の色

      Brown Blue Hazel Green
    Black 32 11 10 3
    Brown 53 50 25 15
    Red 10 10 7 7
    Blond 3 30 5 8

      Brown Blue Hazel Green
    Black 36 9 5 2
    Brown 66 34 29 14
    Red 16 7 7 7
    Blond 4 64 5 8



    スタック形式

    表2 HairEyeColor.stak02 「スタック形式」

      (変数1) (変数2) (変数3)
    標本 髪の色 目の色 性別
    sample Hair Eye Sex
    sample 001 Black Brown Male
    sample 002 Black Brown Male
    sample 003 Black Brown Male
    sample 004 Black Brown Male
    ・・・・・・・・・・
    sample 589 Blond Green Female
    sample 590 Blond Green Female
    sample 591 Blond Green Female
    sample 592 Blond Green Female


    表3は表2のカテゴリを数値化したもの

    hair color
    Black=1
    Brown=2
    Red=3
    Blond=4

    eye color
    Brown=1
    Blue=2
    Hazel=3
    Green=4

    Sex
    Male=1
    Female=2
    表3 HairEyeColor.stak03  「スタック形式」

      (変数1) (変数2) (変数3)
    標本 髪の色 目の色 性別
    sample Hair Eye Sex
    sample 001 1 1 1
    sample 002 1 1 1
    sample 003 1 1 1
    sample 004 1 1 1
    ・・・・・・・・・・
    sample 589 4 4 2
    sample 590 4 4 2
    sample 591 4 4 2
    sample 592 4 4 2

    表4 HairEyeColor.stak04  「スタック形式」 表4は表3の3変数のカテゴリを0,1に2値化したもの. 10変数「01形式」

    標本 髪の色(変数1〜4) 目の色(変数5〜8) 性別(変数9〜10)
    sample H-Black H-Brown H-Red H-Blond E-Brown E-Blue E-Hazel E-Green S-Male S-Female
    sample 001 1 0 0 0 1 0 0 0 1 0
    sample 002 1 0 0 0 1 0 0 0 1 0
    sample 003 1 0 0 0 1 0 0 0 1 0
    sample 004 1 0 0 0 1 0 0 0 1 0
    ・・・・・・・・・・・・・・・・・・・・・・・・
    sample 589 0 0 0 1 0 0 0 1 0 1
    sample 590 0 0 0 1 0 0 0 1 0 1
    sample 591 0 0 0 1 0 0 0 1 0 1
    sample 592 0 0 0 1 0 0 0 1 0 1


  4. 「アンスタック形式」のクロス集計表から「スタック形式」のデータ変換操作の手続き


    (Step 1) データフレーム操作:
    表1の「HairEyeColor」のクロス集計表から592人の個人データを復元し,
    表2「HairEyeColor.stak02」の「スタック形式」のデータフレームを作成


    ・「アンスタック形式」のクロス集計表から「スタック形式」へデータ変換の解説

    HairEyeColor

    x <- data.frame(HairEyeColor)

    HairEyeColor.stak02 <- data.frame( lapply (x, function(i) rep(i, x[,"Freq"] ) )[-4] )

    HairEyeColor.stak02
    #  Rの内部のデータフレーム HairEyeColor.stak02 の内容表示.

    > HairEyeColor
    , , Sex = Male
           Eye
    Hair    Brown Blue Hazel Green
      Black    32   11    10     3
      Brown    53   50    25    15
      Red      10   10     7     7
      Blond     3   30     5     8
    
    , , Sex = Female
           Eye
    Hair    Brown Blue Hazel Green
      Black    36    9     5     2
      Brown    66   34    29    14
      Red      16    7     7     7
      Blond     4   64     5     8
    
    > x <- data.frame(HairEyeColor)
    > HairEyeColor.stak02 <- data.frame( lapply (x, function(i) 
     rep(i, x[,"Freq"]))[-4])
    > HairEyeColor.stak02
          Hair   Eye    Sex
    1   Black Brown   Male
    2   Black Brown   Male
    3   Black Brown   Male
    ・・・・・・・・・・・
    590 Blond Green Female
    591 Blond Green Female
    592 Blond Green Female
    
    > str(HairEyeColor.stak02 )
    'data.frame':   592 obs. of  3 variables:
     $ Hair: Factor w/ 4 levels "Black","Brown",..: 1 1 1 1 ...
     $ Eye : Factor w/ 4 levels "Brown","Blue",..: 1 1 1 1 ...
     $ Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 ...
    
    
    

    (Step 2) データフレーム操作:
    表2の「HairEyeColor.stak02」のカテゴリーを
    数字に置き換え,表3の「HairEyeColor.stak03」を作成



    HairEyeColor.stak03 <- data.frame( HairEyeColor.stak02 )
    #  と記述し,データフレーム HairEyeColor.stak03 に名称を変更.

    次に,
    levels ( HairEyeColor.stak03 $ Hair )
    levels ( HairEyeColor.stak03 $ Eye )
    levels ( HairEyeColor.stak03 $ Sex )
    #  と記述し, HairEyeColor.stak03 の変数とカテゴリーの水準を確認する.

    次に,
    HairEyeColor.stak03 $ Hair <- unclass( HairEyeColor.stak03 $ Hair )
    HairEyeColor.stak03 $ Eye <- unclass( HairEyeColor.stak03 $ Eye )
    HairEyeColor.stak03 $ Sex <- unclass( HairEyeColor.stak03 $ Sex )
    #  と記述し, HairEyeColor.stak03 の変数のカテゴリーを 数字 に変換する.

    HairEyeColor.stak03 $ Hair <- factor( HairEyeColor.stak03 $ Hair ) 
    HairEyeColor.stak03 $ Eye <- factor( HairEyeColor.stak03 $ Eye ) 
    HairEyeColor.stak03 $ Sex <- factor( HairEyeColor.stak03 $ Sex )

    #  と記述し, HairEyeColor.stak03 の変数のカテゴリーを 因子型 に変換する.

    HairEyeColor.stak03 #    と記述し,データを表示する.

    > HairEyeColor.stak03 <- data.flame( HairEyeColor.stak02 )
    > HairEyeColor.stak03$Hair <- unclass( HairEyeColor.stak03 $ Hair )
    > HairEyeColor.stak03$Eye <- unclass( HairEyeColor.stak03 $ Eye )
    > HairEyeColor.stak03k$Sex <- unclass( HairEyeColor.stak03 $ Sex ) 
    > HairEyeColor.stak03$Hair <- factor( HairEyeColor.stak03 $ Hair )
    > HairEyeColor.stak03$Eye <- factor( HairEyeColor.stak03 $ Eye )
    > HairEyeColor.stak03$Sex <- factor( HairEyeColor.stak03 $ Sex ) 
    > HairEyeColor.stak03 
        Hair Eye Sex
    1      1   1   1
    2      1   1   1
    3      1   1   1
       ・・・・・
    591    4   4   2
    592    4   4   2
    
    > str(HairEyeColor.stak03 )
    'data.frame':   592 obs. of  3 variables:
     $ Hair: Factor w/ 4 levels "1","2","3","4": 1 1 1  ...
     $ Eye : Factor w/ 4 levels "1","2","3","4": 1 1  ...
     $ Sex : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 ...
    


    (Step 3) データフレーム操作: 表3の「HairEyeColor.stak03」のデータフレームから表4の「HairEyeColor.stak04」を作成

    source("http://aoki2.si.gunma-u.ac.jp/R/src/make.dummy.R", encoding="euc-jp") # と記述し,make.dummy関数を青木先生のサイトから読み込む.

    z1 <- make.dummy(HairEyeColor.stak03) #  make.dummy関数を使ったデータ変換

    HairEyeColor.stak04 <- data.frame( z1 )

    colnames( HairEyeColor.stak04 ) <- c( "H-Black", "H-Brown", "H-Red", "H-Blond", "E-Brown", "E-Blue", "E-Hazel", "E-Green", "S-Male", "S-Female" )

    #  再度変数名を付ける

    HairEyeColor.stak04 #   データの内容確認

    >source("http://aoki2.si.gunma-u.ac.jp/R/src/make.dummy.R", encoding="euc-jp")  
    
    > z1 <- make.dummy(HairEyeColor.stak03)  
    
    > HairEyeColor.stak04  <- data.frame(  z1 )  
    
    > colnames( HairEyeColor.stak04 ) <- c( "H-Black", "H-Brown", "H-Red", "H-Blond", 
      "E-Brown", "E-Blue", "E-Hazel", "E-Green", "S-Male", "S-Female" )  
    
    > HairEyeColor.stak04  
           H-Black H-Brown H-Red H-Blond E-Brown E-Blue E-Hazel E-Green S-Male S-Female
      [1,]       1       0     0       0       1      0       0       0      1        0
      [2,]       1       0     0       0       1      0       0       0      1        0
      [3,]       1       0     0       0       1      0       0       0      1        0
           ・・・・・・・・・・・・・・・・・
    [590,]       0       0     0       1       0      0       0       1      0        1
    [591,]       0       0     0       1       0      0       0       1      0        1
    [592,]       0       0     0       1       0      0       0       1      0        1
    



  5. 多重対応分析: 「スタック形式」の表2の「HairEyeColor.stak02」のデータフレームを関数mca ( )で分析 表2,表3は同じ結果をもたらす.


    表2 HairEyeColor.stak02  「スタック形式」

      (変数1) (変数2) (変数3)
    標本 髪の色 目の色 性別
    sample Hair Eye Sex
    sample 001 Black Brown Male
    sample 002 Black Brown Male
    sample 003 Black Brown Male
    sample 004 Black Brown Male
    ・・・・・・・・・・
    sample 589 Blond Green Female
    sample 590 Blond Green Female
    sample 591 Blond Green Female
    sample 592 Blond Green Female


    (1) 関数mca ( )による多重対応分析 「データは因子型でないと解析できない」

    Rの「コンソール」画面に,

    library (MASS) #  パッケージMASSの読み込み.Rを起動して一度読み込めばよい.毎回読み込まなくてよい

    と記述し,次に,

    y2 <- mca(HairEyeColor.stak02, nf=2, ) #  関数mca ( )で多重対応分析.

    y2 #  結果を表示する.

    summary( y2 ) #  結果の詳細なリストを表示する.

    > library (MASS) 
    > y2 <- mca(HairEyeColor.stak02, nf=2, )
    > y2 
    Call:
    mca(df = HairEyeColor.stak02, nf = 2)
    
    Multiple correspondence analysis of 592 cases of 3 factors
    
    Correlations 0.699 0.621  cumulative % explained 34.97 66.04 
    
    > summary( y2 ) 
               Length  Class  Mode   
    rs 行の得点    1184   -none- numeric
    cs 列の得点      20   -none- numeric
    fs         1184   -none- numeric
    d 正準相関係数     2   -none- numeric
    p 要因の数        1   -none- numeric
    call          3   -none- call  
    
    > y2$d # 正準相関係数
        第1主成分    第2主成分
    [1] 0.6993436     0.6213633
    > y2$d^2  # 固有値=(正準相関係数)^2
        第1主成分    第2主成分
    [1] 0.4890814     0.3860923
    > y2$d^2 / sum(y2$d^2)  # 寄与率
        第1主成分    第2主成分
    [1] 0.5588392     0.4411608
    
    > y2$rs  # 行の得点
    
         第1主成分    第2主成分
    1    0.0130713376 -0.0100190744
    2    0.0130713376 -0.0100190744
    3    0.0130713376 -0.0100190744
    4    0.0130713376 -0.0100190744
    5    0.0130713376 -0.0100190744
       ・・・・・・・・・・
    587 -0.0131082182  0.0081618277
    588 -0.0131082182  0.0081618277
    589 -0.0131082182  0.0081618277
    590 -0.0131082182  0.0081618277
    591 -0.0131082182  0.0081618277
    592 -0.0131082182  0.0081618277
    
    > y2$cs   # 列の得点
    
                第1主成分   第2主成分
    Hair.Black  0.018153346 -0.024248225
    Hair.Brown  0.005659084  0.004287413
    Hair.Red    0.004900670  0.032408193
    Hair.Blond -0.030921315 -0.007152548
    Eye.Brown   0.017300837 -0.011784786
    Eye.Blue   -0.019781305 -0.007343814
    Eye.Hazel   0.008280856  0.019417554
    Eye.Green  -0.005051926  0.036964691
    Sex.Male    0.003759829  0.005975788
    Sex.Female -0.003351413 -0.005326661
    
    > y2$fs 
         第1主成分    第2主成分
    1    0.026726302 -0.0259499436
    2    0.026726302 -0.0259499436
    3    0.026726302 -0.0259499436
    4    0.026726302 -0.0259499436
        ・・・・・・・
    588 -0.026801710  0.0211395743
    589 -0.026801710  0.0211395743
    590 -0.026801710  0.0211395743
    591 -0.026801710  0.0211395743
    592 -0.026801710  0.0211395743
    
    > y2$p  # 要因・変数の数
    [1] 3
    
    > y2$call
    mca(df = HairEyeColor.stak02, nf = 2)
    


    (2) 関数 biplot ( )による行の得点の散布図と列の得点による散布図の作成

    行の得点の第1主成分と第2主成分の散布図を描く.行の得点の変数名は,y2$rs.

    列の得点の第1主成分と第2主成分の散布図を描く.列の得点の変数名は,y2$cs.

    第1主成分をx軸に第2主成分をy軸に描く.

    関数 biplot ( )は2変数,y2$rsとy2$csを同時に描いてくれる.


    Rの「コンソール」画面に,

    biplot( y2$rs, y2$cs, var.axes = FALSE ) #  と記述して散布図を描く.

    biplot( y2$rs, y2$cs ) #  これも試してみる.

    biplot( y2$rs, y2$cs, col=c(1, 0), var.axes = FALSE ) # 行だけを色をつけ表示.

    biplot( y2$rs, y2$cs, col=c(0, 2), var.axes = FALSE ) # 列だけを色をつけ表示.

    (3) 散布図の観察結果

    行のカテゴリーの散布パタ−ン,列のカテゴリーの散布パタ−ン.行と列の散布の重なり具合を観察する.

    空間的に近いものは関連が密であると解釈する.

    目がGreenな学生は髪がRedが多い.目がBlueな学生は髪がBlondが多い.

    目がBrownな学生は髪がBlackが多い.男子学生の多くは髪がBrownである.などがこのパタ−ンから読み取れる.


    (4) 変数名だけの散布図の作成

    ・列の得点の第1主成分と第2主成分の散布図をラベルを付けて描く.列の得点の変数名は,y$cs.

    表 y$cs
    label       第1主成分   第2主成分
    Hair.Black  0.018153346 -0.024248225
    Hair.Brown  0.005659084  0.004287413
    Hair.Red    0.004900670  0.032408193
    Hair.Blond -0.030921315 -0.007152548
    Eye.Brown   0.017300837 -0.011784786
    Eye.Blue   -0.019781305 -0.007343814
    Eye.Hazel   0.008280856  0.019417554
    Eye.Green  -0.005051926  0.036964691
    Sex.Male    0.003759829  0.005975788
    Sex.Female -0.003351413 -0.005326661
    
     z <- read.table ("clipboard", header=TRUE  ) 
    # 表y$csをコピーし,データフレームzとする.
    
     str(z)
    'data.frame':   10 obs. of  3 variables:
    $ label     : Factor w/10 levels "Eye.Blue","Eye.Brown",:5 7
    $ 第1主成分: num 0.01815 0.00566 0.0049 -0.03092 0.0173 ...
    $ 第2主成分: num -0.02425 0.00429 0.03241 -0.00715 -0.01178
    
     summary(z)
            label     第1主成分           第2主成分        
     Eye.Blue  :1   Min.   :-0.0309213   Min.   :-0.0242482  
     Eye.Brown :1   1st Qu.:-0.0046268   1st Qu.:-0.0072960  
     Eye.Green :1   Median : 0.0043302   Median :-0.0005196  
     Eye.Hazel :1   Mean   :-0.0001051   Mean   : 0.0043198  
     Hair.Black:1   3rd Qu.: 0.0076254   3rd Qu.: 0.0160571  
     Hair.Blond:1   Max.   : 0.0181533   Max.   : 0.0369647  
     (Other)   :4  
    
     plot( z[,2],  z[,3] )
     text( z[,2],  z[,3], z[,1], pos=3, cex=0.6, col="red" )
    # pos=1は下,pos=2は左,pos=3は上,pos=4は右にずらして表示.
    




  6. 多重対応分析: 「スタック形式」の表3の「HairEyeColor.stak03」のデータフレームを関数mca ( )で分析




    カテゴリの数値化      

    hair color
    Black=1
    Brown=2
    Red=3
    Blond=4

    eye color
    Brown=1
    Blue=2
    Hazel=3
    Green=4

    Sex
    Male=1
    Female=2
    表3 HairEyeColor.stak03  「スタック形式」

      (変数1) (変数2) (変数3)
    標本 髪の色 目の色 性別
    sample Hair Eye Sex
    sample 001 1 1 1
    sample 002 1 1 1
    sample 003 1 1 1
    sample 004 1 1 1
    ・・・・・・・・・・
    sample 589 4 4 2
    sample 590 4 4 2
    sample 591 4 4 2
    sample 592 4 4 2


    (1) 関数mca ( )による多重対応分析 「データは因子型でないと解析できない」

    Rの「コンソール」画面に,

    library (MASS) #    パッケージMASSの読み込み.Rを起動して一度読み込めばよい.毎回読み込まなくてよい.

    #と記述し,次に,

    y3 <- mca(HairEyeColor.stak03, nf=2, ) #    関数mca ( )で多重対応分析.

    y3 #  結果を表示する.

    summary( y3 ) #  結果の詳細なリストを表示する.


    > y3 <- mca(HairEyeColor.stak03, nf=2, )
    > y3 
    Call:
    mca(df = HairEyeColor.stak03, nf = 2)
    
    Multiple correspondence analysis of 592 cases of 3 factors
    
    Correlations 0.699 0.621  cumulative % explained 34.97 66.04
    
    > summary( y3 ) 
         Length Class  Mode   
    rs   1184   -none- numeric
    cs     20   -none- numeric
    fs   1184   -none- numeric
    d       2   -none- numeric
    p       1   -none- numeric
    call    3   -none- call  
    
    > y3$d # 正準相関係数
    [1] 0.6993436 0.6213633
    > y3$d^2  # 固有値=(正準相関係数)^2
    [1] 0.4890814 0.3860923
    > y3$d^2 / sum(y3$d^2)  # 寄与率
    [1] 0.5588392 0.4411608
    
    > y3$rs  # 行の得点
                    1             2
    1    0.0130713376 -0.0100190744
    2    0.0130713376 -0.0100190744
    3    0.0130713376 -0.0100190744
    4    0.0130713376 -0.0100190744
    5    0.0130713376 -0.0100190744
       ・・・・・・・・・・
    587 -0.0131082182  0.0081618277
    588 -0.0131082182  0.0081618277
    589 -0.0131082182  0.0081618277
    590 -0.0131082182  0.0081618277
    591 -0.0131082182  0.0081618277
    592 -0.0131082182  0.0081618277
    
    > y3$cs  # 列の得点
                      1            2
    Hair.1  0.018153346 -0.024248225
    Hair.2  0.005659084  0.004287413
    Hair.3  0.004900670  0.032408193
    Hair.4 -0.030921315 -0.007152548
    Eye.1   0.017300837 -0.011784786
    Eye.2  -0.019781305 -0.007343814
    Eye.3   0.008280856  0.019417554
    Eye.4  -0.005051926  0.036964691
    Sex.1   0.003759829  0.005975788
    Sex.2  -0.003351413 -0.005326661
    
    > y3$fs 
                   1             2
    1    0.026726302 -0.0259499436
    2    0.026726302 -0.0259499436
    3    0.026726302 -0.0259499436
    4    0.026726302 -0.0259499436
       ・・・・・・・・・
    588 -0.026801710  0.0211395743
    589 -0.026801710  0.0211395743
    590 -0.026801710  0.0211395743
    591 -0.026801710  0.0211395743
    592 -0.026801710  0.0211395743
    
    > y3$p 
    [1] 3
    
    > y3$call 
    mca( df = HairEyeColor.stak02, nf = 2)
    


    (2) 関数biplot ( )による行の得点の散布図と列の得点による散布図の作成

    行の得点の第1主成分と第2主成分の散布図を描く.行の得点の変数名は,y3$rs.

    列の得点の第1主成分と第2主成分の散布図を描く.列の得点の変数名は,y3$cs.

    第1主成分をx軸に第2主成分をy軸に描く.

    関数biplot ( )は2変数,y3$rsとy3$csを同時に描いてくれる.


    Rの「コンソール」画面に,

    biplot( y3$rs, y3$cs, var.axes = FALSE ) #        と記述して散布図を描く.

    左が「HairEyeColor.stak03」の結果,右が「HairEyeColor.stak02」の結果である.全く同じ分布になる.

    (3) 散布図の観察結果

    行のカテゴリーの散布パタ−ン,列のカテゴリーの散布パタ−ン.行と列の散布の重なり具合を観察する.

    空間的に近いものは関連が密であると解釈する.

    目がGreenな学生は髪がRedが多い.目がBlueな学生は髪がBlondが多い.

    目がBrownな学生は髪がBlackが多い.男子学生の多くは髪がBrownである.などがこのパタ−ンから読み取れる.



  7. 関数corresp ( )による多重対応分析: 「スタック形式」の表4の「HairEyeColor.stak04」のデータフレームを分析


    表4 HairEyeColor.stak04  10変数「カテゴリ 01形式」

    標本 髪の色(変数1〜4) 目の色(変数5〜8) 性別(変数9〜10)
    sample H-Black H-Brown H-Red H-Blond E-Brown E-Blue E-Hazel E-Green S-Male S-Female
    sample 001 1 0 0 0 1 0 0 0 1 0
    sample 002 1 0 0 0 1 0 0 0 1 0
    sample 003 1 0 0 0 1 0 0 0 1 0
    sample 004 1 0 0 0 1 0 0 0 1 0
    ・・・・・・・・・・・・・・・・・・・・・・・・
    sample 589 0 0 0 1 0 0 0 1 0 1
    sample 590 0 0 0 1 0 0 0 1 0 1
    sample 591 0 0 0 1 0 0 0 1 0 1
    sample 592 0 0 0 1 0 0 0 1 0 1


    (1) 関数corresp ( )による多重対応分析 「データは数値型でないと解析できない」

    Rの「コンソール」画面に,

    library (MASS) # パッケージMASSの読み込み.Rを起動して一度読み込めばよい.毎回読み込まなくてよい

    と記述し,次に,HairEyeColor.stak04は,行=592,列=10であるから,nf=10-1=9とする.

    z4 <- corresp( HairEyeColor.stak04, nf=9, ) #    関数mca ( )で多重対応分析.

    z4 #  結果を表示する.

    summary( z4 ) #  結果の詳細なリストを表示する.

    > library (MASS) # パッケージMASSの読み込み.Rを起動して一度読み込めばよい.
    > z4 <- corresp( HairEyeColor.stak04, nf=4 )
    > z4 
    正準相関係数
    First canonical correlation(s): 0.6993436 0.6213633 0.5941427 0.5762341
    
    
    Row scores: # 行の得点
                  [,1]        [,2]         [,3]        [,4] 略
      [1,] -1.36430528  1.17696655 -0.507039705  1.46609477
      [2,] -1.36430528  1.17696655 -0.507039705  1.46609477
      [3,] -1.36430528  1.17696655 -0.507039705  1.46609477
      [4,] -1.36430528  1.17696655 -0.507039705  1.46609477
      [5,] -1.36430528  1.17696655 -0.507039705  1.46609477
      [6,] -1.36430528  1.17696655 -0.507039705  1.46609477
      [7,] -1.36430528  1.17696655 -0.507039705  1.46609477
               ・・・・・・・・
    [589,]  1.36815465 -0.95879098 -1.650696218 -0.14578279
    [590,]  1.36815465 -0.95879098 -1.650696218 -0.14578279
    [591,]  1.36815465 -0.95879098 -1.650696218 -0.14578279
    [592,]  1.36815465 -0.95879098 -1.650696218 -0.14578279
    
    
     Col scores:# 列の得点
                   [,1]       [,2]       [,3]       [,4] 略
    H-Black  -1.3250699  1.7699544 -0.9418463  1.0870901
    H-Brown  -0.4130744 -0.3129518  1.0621728 -0.3965230
    H-Red    -0.3577154 -2.3655761 -2.3570607 -0.4260125
    H-Blond   2.2570442  0.5220870 -0.2733127  0.2066672
    E-Brown  -1.2628426  0.8602086 -0.5603887 -0.1337088
    E-Blue    1.4438997  0.5360481  0.3353515  0.4292958
    E-Hazel  -0.6044457 -1.4173485  2.0199476 -1.3303570
    E-Green   0.3687560 -2.6981693 -2.1354714  0.9506334
    S-Male   -0.2744418 -0.4361916  0.5984732  1.5810602
    S-Female  0.2446302  0.3888097 -0.5334633 -1.4093156
    
    > summary( z4 )   # z4の結果を見る
           Length Class  Mode   
    cor       9     -none- numeric   # 正準相関係数
    rscore 5328     -none- numeric   # 行の得点
    cscore   90     -none- numeric   # 列の得点
    Freq   5920     -none- numeric   # データのクロス表
    


    (2) 主成分の寄与率の計算

    寄与率(%)は(正準相関係数)~2/((正準相関係数)~2の総和)X100

    z4$cor #          第1主成分〜第9主成分の正準相関係数の表示

    固有値 <- z4$cor^2 #  固有値=(正準相関係数)^2  
    固有値 # 固有値の表示

    寄与率 <- round( 100 * 固有値 / sum( 固有値 ), 1 )  # 寄与率の計算 小数点一桁で出力
    寄与率  # 寄与率の表示

    >  z4$cor  # 正準相関係数
    [1] 6.993436e-01 6.213633e-01 5.941427e-01 5.762341e-01 5.623188e-01 5.311606e-01
    [7] 4.180601e-01 4.039172e-15 1.012129e-16
    
    > 固有値 <- z4$cor^2 #  固有値=(正準相関係数)^2  
    > 固有値 # 固有値の表示
    [1] 4.890814e-01 3.860923e-01 3.530056e-01 3.320457e-01 3.162025e-01 2.821316e-01
    [7] 1.747742e-01 1.631491e-29 1.024404e-32
    
    > 寄与率 <- round( 100 * z6$cor / sum( z6$cor ), 1 )  
    > 寄与率      # 寄与率の表示
    [1] 21.0 16.5 15.1 14.2 13.6 12.1  7.5  0.0  0.0
    

    第1主成分21.0%,第2主成分16.5%,第3主成分15.1%,第4主成分14.2%,第5主成分13.6%, 第6主成分12.1%,第7主成分7.5%,第8主成分0.0%,第9主成分0.0%である.

    第1主成分と第2主成分で21.0+16.5= 37.5%の寄与率 であり,データの散らばりの 37.5%が説明できる.


    (3) 関数biplot ( )による行の得点の散布図と列の得点による散布図の作成

    行の得点の第1主成分と第2主成分の散布図を描く.行の得点の変数名は,z4$rscore.

    列の得点の第1主成分と第2主成分の散布図を描く.列の得点の変数名は,z4$cscore.

    第1主成分をx軸に第2主成分をy軸に描く.

    関数biplot ( )は2変数,z4$rscoreとz4$cscoresを同時に描いてくれる.


    Rの「コンソール」画面に,

    biplot( z4 ) #        と記述して散布図を描く.


    (4) 散布図の観察結果

    行のカテゴリーの散布パタ−ン,列のカテゴリーの散布パタ−ン.行と列の散布の重なり具合を観察する.

    空間的に近いものは関連が密であると解釈する.

    目がGreenな学生は髪がRedが多い.目がBlueな学生は髪がBlondが多い.

    目がBrownな学生は髪がBlackが多い.男子学生の多くは髪がBrownである.などがこのパタ−ンから読み取れる.



  8. 多重対応分析ではなく「対応分析」で解析する: 2次元の表5を関数corresp ( )で分析


    表5  3次元のクロス表を「2次元の4x8のクロス表」として解いたらどうなるか

      男性male 女性female
    髪の毛の色 目の色eye color
    me_Brown me_Blue me_Hazel me_Green fe_Brown fe_Blue fe_Hazel fe_Green
    h_Black 32 11 10 3 36 9 5 2
    h_Brown 53 50 25 15 66 34 29 14
    h_Red 10 10 7 7 16 7 7 7
    h_Blond 3 30 5 8 4 64 5 8


    > library (MASS) # パッケージMASSの読み込み.Rを起動して一度読み込めばよい. 
    > A1 <- read.table ("clipboard", header=TRUE ) 
    
    > A1 
            me_Brown me_Blue me_Hazel me_Green fe_Brown fe_Blue fe_Hazel fe_Green
    h_Black       32      11       10        3       36       9        5        2
    h_Brown       53      50       25       15       66      34       29       14
    h_Red         10      10        7        7       16       7        7        7
    h_Blond        3      30        5        8        4      64        5        8
    
    > str( A1 )  
    'data.frame':   4 obs. of  8 variables:
     $ me_Brown: int  32 53 10 3
     $ me_Blue : int  11 50 10 30
     $ me_Hazel: int  10 25 7 5
     $ me_Green: int  3 15 7 8
     $ fe_Brown: int  36 66 16 4
     $ fe_Blue : int  9 34 7 64
     $ fe_Hazel: int  5 29 7 5
     $ fe_Green: int  2 14 7 8
    
    > A2 <- corresp( A1, nf=3 ) 
    
    > A2 
    First canonical correlation(s):
     正準相関係数  0.49156531 0.16936955 0.07721277 
    
     Row scores:行の得点
                  [,1]       [,2]       [,3]
    h_Black -0.9918882  1.6748003 -0.8322759
    h_Brown -0.3713579 -0.3749229  0.8896382
    h_Red   -0.3209302 -1.7864436 -2.0108832
    h_Blond  1.8591993  0.4187954 -0.1714806
    
    
     Column scores:列の得点
     Column scores:
                   [,1]       [,2]        [,3]
    me_Brown -1.0182817  1.0311136 -0.01391261
    me_Blue   0.4650332 -0.3287624  1.29174076
    me_Hazel -0.5260375 -0.3814142 -0.27979825
    me_Green  0.2515804 -1.7451860 -1.80543261
    fe_Brown -0.9657286  0.4181362 -0.43586824
    fe_Blue   1.6986389  0.8609650 -0.26058366
    fe_Hazel -0.3838374 -1.6570264  1.88765357
    fe_Green  0.3572719 -2.1053528 -1.94587707
    
    > summary( A2 ) 
           Length Class  Mode   
    cor     3     -none- numeric  # 正準相関係数
    rscore 12     -none- numeric  # 行の得点
    cscore 24     -none- numeric  # 列の得点
    Freq   32     -none- numeric  # データのクロス表
    > 寄与率 <- round( 100 * (A2$cor)^2 / sum( (A2$cor)^2 ), 1 ) 
    > 寄与率   # %
    [1] 87.5 10.4  2.2
    
    > biplot( A2 $ rscore, A2 $ cscore, var.axes = FALSE )  
    

    結果 特徴やパタ−ンを見つける.

    関数corresp()の結果は,180゜回転すると関数mca()の結果と同じ空間配置(布置)になる.

    表2や表3の結果を「ペイント」ソフトウェアで180゜回転してみる.

    このデータは目の色を男女ごとに合成している.目の色のBrownやGreenは男女とも近くに配置される.

    これに対しBlueやBlueは男女間で配置が離れている.

    髪の色との関係では,h_Redは女性の目の色のfe_Hazelやfe_Greenに多く,男性の目の色のme_Greenに多い.

    金髪h_Blondは女性のfe_Blue に多い.h_Brownは男性のme_Hazelやme_Blueに多い.

    h_Blackとh_Brownの中間の位置に,男女のfe_Brownとme_Brown の目の色が位置する.

[ 目次に戻る ]