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

多重クロス表を数量化V類や対応分析用にデータ変換


  1.  数量化V類や多重対応分析で使用するデータの形式

    質的データの特徴やそのパタ−ンを探査する方法に多重対応分析や,数量化V類の解析法がある.

    これらの方法ではデータの形式が表3,表4の形式を要求する.この準備のためのデータ変換手続きがある.


    データの表現様式

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

    Rに前もって組み込みこまれているデータセット「HairEyeColor」を使用してデータ変換の練習を行う.

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

    表1は多次元のクロス集計表であるので,このままでは数量化V類・多重対応分析のデータとはならない.

    Rの多重対応分析では表2,表3,表4のデータ形式を使用する.Rの数量化V類では表3,表4のデータ形式を使用する.



    表1 HairEyeColor 性別(2水準)髪の毛の色(4水準)目の色(4水準)の3変数の多重クロス表

      性別Sex
    男性male 女性female
    髪の色hair color 目の色eye color 目の色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
    表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


    カテゴリの数値化

    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  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


  2.  表1の「HairEyeColor」のクロス集計表から592人の個人データを復元し,

    表2「HairEyeColor.stak02」の「スタック形式」のデータフレームを作成


    クロス集計表から「スタック」形式のデータフレームへデータ変換の説明.


    HairEyeColor #  と記述し, HairEyeColor のクロス表の内容を確認する.

    次に,

    x <- data.frame(HairEyeColor)

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

    HairEyeColor.stak02 #  と記述し,Rの内部のデータフレーム HairEyeColor.stak02 の内容を表示する.


    
    > x <- 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
    4   Black Brown   Male
    5   Black Brown   Male
    6   Black Brown   Male
    ・・・・・・・・・・・
    588 Blond Green Female
    589 Blond Green Female
    590 Blond Green Female
    591 Blond Green Female
    592 Blond Green Female
    
    表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の「HairEyeColor.stak02」のカテゴリーを数字に置き換え,表3の「HairEyeColor.stak03」を作成

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


    str( HairEyeColor.stak03 ) #  と記述し,データフレーム 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 の変数のカテゴリーを 数字 に変換する.

    str( HairEyeColor.stak03 ) #  と記述し, 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 の変数のカテゴリーを 因子型 に変換する.

    str( HairEyeColor.stak03 ) #  と記述し,変化したデータ構造を確認する.変数は因子型.

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


    
    > HairEyeColor.stak03 <- data.flame( HairEyeColor.stak02 ) 
    > str( HairEyeColor.stak03 ) 
    'data.frame':   592 obs. of  3 variables:
     $ Hair: Factor w/ 4 levels "Black","Brown",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ Eye : Factor w/ 4 levels "Brown","Blue",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 1 1 1 1 1 ...
    
    > levels ( HairEyeColor.stak03 $ Hair ) 
    [1] "Black" "Brown" "Red"   "Blond"
    > levels ( HairEyeColor.stak03 $ Eye ) 
    [1] "Brown" "Blue"  "Hazel" "Green"
    > levels ( HairEyeColor.stak03 $ Sex ) 
    [1] "Male"   "Female"
    
    > HairEyeColor.stak03 $ Hair <- unclass( HairEyeColor.stak03 $ Hair )
    > HairEyeColor.stak03 $ Eye  <- unclass( HairEyeColor.stak03 $ Eye )
    > HairEyeColor.stak03k $ Sex  <- unclass( HairEyeColor.stak03 $ Sex )
    
    > str( HairEyeColor.stak03 ) 
    'data.frame':   592 obs. of  3 variables:
     $ Hair: atomic  1 1 1 1 1 1 1 1 1 1 ...
      ..- attr(*, "levels")= chr  "Black" "Brown" "Red" "Blond"
     $ Eye : atomic  1 1 1 1 1 1 1 1 1 1 ...
      ..- attr(*, "levels")= chr  "Brown" "Blue" "Hazel" "Green"
     $ Sex : atomic  1 1 1 1 1 1 1 1 1 1 ...
      ..- attr(*, "levels")= chr  "Male" "Female"
    
    > HairEyeColor.stak03 $ Hair <- factor( HairEyeColor.stak03 $ Hair ) 
    > HairEyeColor.stak03 $ Eye <- factor( HairEyeColor.stak03 $ Eye ) 
    > HairEyeColor.stak03 $ Sex <- factor( HairEyeColor.stak03 $ Sex ) 
    
    > str( HairEyeColor.stak03 ) 
    'data.frame':   592 obs. of  3 variables:
     $ Hair: Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
     $ Eye : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
     $ Sex : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
    
    > HairEyeColor.stak03 
        Hair Eye Sex
    1      1   1   1
    2      1   1   1
    3      1   1   1
    4      1   1   1
    5      1   1   1
       ・・・・・
    588    4   4   2
    589    4   4   2
    590    4   4   2
    591    4   4   2
    592    4   4   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
  4.  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



  5.  表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) #  データ変換

    HairEyeColor.stak04 <- data.frame( z1 )

    str( HairEyeColor.stak04 )

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

    # と記述し,列の変数名を新たに文字列でつける


    str( HairEyeColor.stak04 ) #  データ構造を確認

    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" )  
    
    > str( HairEyeColor.stak04 )  
    'data.frame':   592 obs. of  10 variables:
     $ H-Black : num  1 1 1 1 1 1 1 1 1 1 ...
     $ H-Brown : num  0 0 0 0 0 0 0 0 0 0 ...
     $ H-Red   : num  0 0 0 0 0 0 0 0 0 0 ...
     $ H-Blond : num  0 0 0 0 0 0 0 0 0 0 ...
     $ E-Brown : num  1 1 1 1 1 1 1 1 1 1 ...
     $ E-Blue  : num  0 0 0 0 0 0 0 0 0 0 ...
     $ E-Hazel : num  0 0 0 0 0 0 0 0 0 0 ...
     $ E-Green : num  0 0 0 0 0 0 0 0 0 0 ...
     $ S-Male  : num  1 1 1 1 1 1 1 1 1 1 ...
     $ S-Female: num  0 0 0 0 0 0 0 0 0 0 ...
    
    > 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
    
    
    # 因子型にする場合は # 第1〜10変数をfactor因子型に変換 # > HairEyeColor.stak04[,1:10] <- lapply( HairEyeColor.stak04, factor ) # > str(HairEyeColor.stak04) 'data.frame': 592 obs. of 10 variables: $ H-Black : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ H-Brown : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... $ H-Red : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... $ H-Blond : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... $ E-Brown : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ E-Blue : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... $ E-Hazel : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... $ E-Green : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... $ S-Male : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ S-Female: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...


    表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

[ 目次に戻る ]