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

  HairEyeColor:2変数のクロス表で対応分析

Simple 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
    ・07章 対応分析法,"Rで学ぶデータサイエンス2 "多次元データ解析法", 中村 永友, 共立出版,2009.ISBN:978-4-320-01922-5
    ・15章 質的多変量解析II(分類),"Rで学ぶデータサイエンス17"社会調査データ解析",鄭躍軍・金明哲,共立出版,2011.ISBN:978-4-320-01969-0
    ・"対応分析入門 原理から応用まで,解説Rで検算しながら理解する",Sten-Erik Clausen著,藤本一男訳・解説,オーム社,2015.ISBN978-4-274-21827-9

  2.  2変数の対応分析で使用するRのパッケージ(MASS)に含まれる関数 corresp を使用する.  多変量対応分析には,mca がある.

    Rの「コンソール」画面に,
    
     library (MASS) # パッケージMASSの読み込みが必要.
    
     ? corresp #  と記述し, 関数 corresp の情報を,表示し確認する.
    

  3.  2変数で,変数のカテゴリーが3以上のクロス表(分割表)が分析の対象


    2x2のクロス表1では,変数間の関連は「独立性の検定」で判断でき,カテゴリー間の関連も判断できる.

    同様に,3x4のクロス表2の変数間の関連も「独立性の検定」で判断できる.

    しかし,変数のカテゴリーが3以上になると,変数の持つカテゴリー間の関連は判断が困難になる.

    表1 2変数の2x2クロス表
     
    変数2
    fair red


    blue 326 38
    light 688 116
    表2 2変数の3x4クロス表
     
    変数2
    fair red medium dark


    blue 326 38 241 110
    light 688 116 584 188
    medium 343 84 909 412


  4.  データセットcaith (Colours of Eyes and Hair of 5387 People in Caithness, Scotland)の読み込みと確認


    スコットランドのケイスネス地域の5387人について,1940年以前に,目(虹彩)の色と髪の毛の色を調べた結果を表3に示す.

    この時期の,この地域の人々の目の色と髪の毛の色は関連があるか.あるならばどのような関係かを検討する.

    表3 caithの4x5クロス表
     
    髪の色
    行合計
    fair金髪 red赤毛 medium dark black黒髪


    blue青色 326 38 241 110 3 718
    light 688 116 584 188 4 1580
    medium 343 84 909 412 26 1774
    dark 98 48 403 681 85 1315
    列合計 1455 286 2137 1391 118 5387


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

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

    caith #  と記述し, データ caithを表示する. caithはパッケージMASSに含まれている.

    #次に,

    str( caith ) #  と記述しデータ構造の確認.

    mosaicplot(caith, main = "Relation between hair and eye") #  と記述し, 表をグラフ化する.

    ? caith #  と記述し, データ caith の情報を表示し確認する.

    > library ( MASS )     パッケージMASSの読み込み
    
    > caith 
     # スコットランドのケイスネス地域の
     # 5387人の目の色と髪の毛の色のデータ
           fair red medium dark black
    blue    326  38    241  110     3
    light   688 116    584  188     4
    medium  343  84    909  412    26
    dark     98  48    403  681    85
    
    > str( caith )
    'data.frame':   4 obs. of  5 variables:
     $ fair  : int  326 688 343 98
     $ red   : int  38 116 84 48
     $ medium: int  241 584 909 403
     $ dark  : int  110 188 412 681
     $ black : int  3 4 26 85
    
    > mosaicplot(caith, main="Relation between hair and eye") # グラフ
    
    > ? caith    # データcaithの解説(省略)
    


  5.  目の色と髪の色の独立性の検定


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

    chisq.test ( caith ) #    χ2検定と記述する.

    > chisq.test( caith )
    
            Pearson's Chi-squared test
    
    data:  caith 
    X-squared = 1240.039, df = 12, p-value < 2.2e-16
    

    結果

    目の色と髪の色は独立である.目の色と髪の色は関連がないという帰無仮説を立てる.有意水準は5%とする.

    統計量であるカイ二乗値を求めると,χ2=X-squared = 1240.0である.自由度 df = 12である.

    P値が2.2e-16く0.05であるので帰無仮説を棄却する.

    したがって,対立仮説が選択され,目の色と髪の色は独立でなく,関連があることになる.

    しかし,独立性の検定はどのカテゴリー間に関連があるかは触れていない.


    fisher.test(caith) #    フィッシャーの直接確率 (Fisher's Exact Test)も試してみる.どうなるか.


    2変数のカテゴリーが3以上の場合,どのような関連があるかを数値ないしはパタ−ン図で表し,視覚化することが必要になる.

    Rには2変数のクロス集計表の対応分析 Simple Correspondence Analysist が用意されている.

    3変数以上の反応パタ−ンの対応分析は,多重対応分析 Multiple Correspondence Analysis と呼ばれ,手続きが異なる.




  6.  関数corresp( ) を使った目の色と髪の色の対応分析


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

    x1 <- corresp( caith ) #      nf=1 求める主成分が1つ

    x1     # 結果x1を確認

    意味のある nfの最大値は,行あるいは列の数値で小さいものから1を引いた数である.nf=3

    x4 <- corresp( caith, nf=4 ) #  nf=4 求める主成分が4つにすると

    x4 #       結果x4を確認

    と記述する.

    > x1 <- corresp( caith )    #  nf=1での対応分析
    > x1 
    First canonical correlation(s) 正準相関係数: 0.4463684 
    
     Row scores:第1主成分の行の得点
           blue       light      medium        dark 
    -0.89679252 -0.98731818  0.07530627  1.57434710 
    
     Column scores:第1主成分の列の得点
           fair         red      medium        dark       black 
    -1.21871379 -0.52257500 -0.09414671  1.31888486  2.45176017 
    
    
    > x4 <- corresp( caith, nf=4 )      #  nf=4での対応分析
    > x4 
    First canonical correlation(s) 正準相関係数: 4.463684e-01 1.734554e-01 2.931691e-02 5.862261e-17 
    
     Row scores:行の得点
           第1主成分[,1]  第2主成分[,2]  第3主成分[,3] 第4主成分[,4]
    blue   -0.89679252      0.9536227     2.1884132       1
    light  -0.98731818      0.5100045    -1.0837859       1
    medium  0.07530627     -1.4124778     0.1894089       1
    dark    1.57434710      0.7720361    -0.1482208       1
    
     Column scores:列の得点
           第1主成分[,1]  第2主成分[,2]  第3主成分[,3] 第4主成分[,4]
    fair   -1.21871379      1.0022432     0.4271282      -0.4007138
    red    -0.52257500      0.2783364    -4.0268545      -1.4900491
    medium -0.09414671     -1.2009094     0.1103959      -0.3452979
    dark    1.31888486      0.5992920     0.3450676      -1.2242170
    black   2.45176017      1.6513565    -1.5736976       4.2971022
    
    > summary( x4 ) # x4の作成された結果を見る Length Class Mode cor 4 -none- numeric # 正準相関係数 rscore 16 -none- numeric # 行の得点 cscore 20 -none- numeric # 列の得点 Freq 20 -none- numeric # データのクロス表 > x4$cor # 正準相関係数 [1] 4.463684e-01 1.734554e-01 2.931691e-02 5.862261e-17 > x4$rscore # 行の得点 [,1] [,2] [,3] [,4] blue -0.89679252 0.9536227 2.1884132 1 light -0.98731818 0.5100045 -1.0837859 1 medium 0.07530627 -1.4124778 0.1894089 1 dark 1.57434710 0.7720361 -0.1482208 1 > x4$cscore # 列の得点 [,1] [,2] [,3] [,4] fair -1.21871379 1.0022432 0.4271282 -0.4007138 red -0.52257500 0.2783364 -4.0268545 -1.4900491 medium -0.09414671 -1.2009094 0.1103959 -0.3452979 dark 1.31888486 0.5992920 0.3450676 -1.2242170 black 2.45176017 1.6513565 -1.5736976 4.2971022 > x4$Freq # データのクロス表 Column Row fair red medium dark black blue 326 38 241 110 3 light 688 116 584 188 4 medium 343 84 909 412 26 dark 98 48 403 681 85


  7.  第1主成分・第2主成分・第3主成分・第4主成分の寄与率の計算


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

    x4$cor # 正準相関係数

    固有値 <- x4$cor^2 # 固有値=(正準相関係数)^2

    寄与率 <- round( 100 * 固有値 / sum( 固有値 ), 1 ) # 小数点以下1桁で丸める.寄与率は%で示す.

    寄与率 # で結果を表示する.

    > x4$cor  # 正準相関係数
    [1] 4.463684e-01 1.734554e-01 2.931691e-02 5.862261e-17
    
    > 固有値 <- x4$cor^2 
    
    > 固有値 
    [1] 1.992448e-01 3.008677e-02 8.594814e-04 3.436610e-33
    
    > 寄与率 <- round( 100 * 固有値 / sum( 固有値 ), 1 ) # 小数点一桁で出力
    
    > 寄与率 
    [1] 86.6 13.1  0.4  0.0
    
    第1主成分寄与率 86.6%
    第2主成分寄与率 13.1%
    第3主成分寄与率  0.4%
    第4主成分寄与率  0.0%
    合計      100.1%
    

    結果

    第1主成分の寄与率 86.6%,第2主成分の寄与率 13.1%である.

    第1主成分と第2主成分で全体の86.6+13.1=99.7%が説明できることを示している.

    行と列の得点のパタ−ン化は,第1主成分と第2主成分の得点を用いて散布図で表現する.



  8.  対応分析結果の「第1主成分と第2主成分」の得点をbiplot( ) 「散布図」で表しパターン表示する (1)


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

    corresp( caith, nf = 2 ) # nf=2 求める主成分が2つと記述する.これを散布図で描く.

    biplot( corresp ( caith, nf = 2 ), main = "Relation between hair and eye" ) # と記述する.

    biplot( corresp ( caith, nf = 2 ), col=c(1, 0), main = "Relation between hair and eye" ) # 行だけを表示

    biplot( corresp ( caith, nf = 2 ), col=c(0, 2), main = "Relation between hair and eye" ) # 列だけを表示

    > corresp( caith, nf = 2 )
    First canonical correlation(s): 
    第1主成分の正準相関係数0.4463684 第2主成分の正準相関係数0.1734554 
    
     Row scores:行の得点
            第1主成分[,1]  第2主成分[,2]
    blue   -0.89679252      0.9536227
    light  -0.98731818      0.5100045
    medium  0.07530627     -1.4124778
    dark    1.57434710      0.7720361
    
     Column scores:列の得点
            第1主成分[,1]  第2主成分[,2]
    fair   -1.21871379      1.0022432
    red    -0.52257500      0.2783364
    medium -0.09414671     -1.2009094
    dark    1.31888486      0.5992920
    black   2.45176017      1.6513565
    
    > biplot( corresp ( caith, nf = 2 ), main = "Relation between hair and eye" )
    

    > biplot( corresp( caith, nf = 2 ), col=c(1, 0), main="Relation between hair and eye" )  #行だけを表示
    
    > biplot( corresp( caith, nf = 2 ), col=c(0, 2), main="Relation between hair and eye" )  #列だけを表示
    


    x軸が第1主成分,y軸が第2主成分,目の色が黒い目盛り,髪の色が赤い目盛り

    目の色の座標軸の原点と髪の色の座標軸の原点は一致させている.

    しかし目の色と髪の色の目盛の縮尺はデータのばらつきが重なるように調整されているため二つは同じでない.

    関数plot()は目の色と髪の色を同じ縮尺の目盛で描く.

    目の色の散布図・黒色は「第1主成分と第2主成分の得点」をプロットする.内部の計算は私の想像であるので注意する.

    ・目の色blue座標は blue(x,y)=(-0.400, 0.165)

    x=(blueの第1主成分[-0.89679252]) X (第1主成分の正準相関係数[0.4463684])=-0.400078

    y=(blueの第2主成分[0.9536227]) X (第2主成分の正準相関係数[0.1734554])=0.165


    髪の色の散布図・赤色は「第1主成分と第2主成分の得点」をプロットする.内部の計算は私の想像であるので注意する.

    ・髪の色red座標は red(x,y)=(-0.233, 0.048)

    x=(redの第1主成分[-0.52257500]) X (第1主成分の正準相関係数[0.4463684])= -0.2332610

    y=(redの第2主成分[0.2783364]) X (第2主成分の正準相関係数[0.1734554])=0.04827895


    結果

    「目の色がblueやlightの人は金髪fairが多い.目の色がこげ茶dark の人は黒髪が多い.」ことがこのパタ−ンからわかる.



  9.  対応分析結果の「第1主成分と第2主成分」の得点を plot( ) 「散布図」で表しパターン表示する (2)


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

    dimnames( caith ) [[ 2 ]] <- c ("F", "R", "M", "D", "B") #   髪の色を記号化

    plot( corresp(caith, nf=2) ); title("symmetric 行と列の欄の総合計を1")

    > dimnames( caith ) [[ 2 ]] <- c ("F", "R", "M", "D", "B")
    
    > plot( corresp(caith, nf=2) ); title("symmetric 行と列の欄の総合計を1")
    

    plot( corresp(caith, nf=2), type="rows" ); title("rows 行合計を1 目の色を基準")

    plot( corresp(caith, nf=2), type="col" ); title("columns 列合計を1 髪の色を基準")
    # と記述する.

    > plot( corresp(caith, nf=2), type="rows" ); title("rows 行合計を1 目の色を基準")
    
    > plot( corresp(caith, nf=2), type="col" ); title("columns 列合計を1 髪の色を基準")
    


[ 目次に戻る ]