Cutting Edge on My Life

社会心理学者の筆者が切り取った日常[Academic Life/Social Life/IT Life]を書き溜めます.

Rでコレスポンデンス分析~準備編

2010-09-28 00:36:31 | Academic Life
この間,コレスポンデンス分析(正確には多重コレスポンデンス分析だけど.むしろ2項目でのコレスポンデンス分析の方がやる機会が少ない)をやらなきゃいけないことがあった.昔ならHALBOUがお手軽だったけど.まぁ,Rでやってみよう.

Rで多重コレスポンデンス分析をやるには,関数mca()とcorresp()という2つの関数が使える.関数mca()は変数がファクタ(Rの用語.要するに,質的変数,カテゴリカルな変数といったほうがしっくりくるかもしれない)でないといけない.関数corresp()はデータを反応パターン型のダミー行列に変換しなければならない.
どっちにしようか迷ったが,値のラベルがふってあるほうが作業の手間が報われるものだと思い,mca()で解くことにする.

ファクタへの変換

もちろんだが,データは数字で入力してある.これを「男」「女」などのファクタに変換しなければならない.ます,あらかじめ表計算ソフトで数値をラベルに置換しておくことを考えたが,これをやると,ラベルの順序がずれることがわかった.
例えば,よるあるようにデータが「強く思う」「そう思う」「そう思わない」「まったくそう思わない」などの4件法だったりする.このようなラベルで作られたデータをRで読み込むと,50音順でラベルが並んでしまい,度数分布表を描いたりするとき非常に困る.

ファクタへの変換はやっぱりRでやったほうがよさそうだ.
関数factor()とlevels()を組み合わせて行う.例えば,datというデータフレームの1列目が性別を表す変数だとしたら,次のようにする.
> dat[[1]] <- factor(dat[[1]], levels=1:2)
>   levels(dat[[1]]) <- c("男性", "女性")
データフレーム内の変数は変数名を使って,たとえばdat$sexなどと表記してもよい.関数factor()がファクタへの変換を宣言し,関数levels()で変数の水準に対応したラベルをふっていく.

これをすべての変数について行うのだが,省力化できるところはしなくては,何のためにコンピュータを使っているのか分からない.
特に,心理尺度に関する項目では,ふるラベルも共通しているので,ここは何とかできそうだ.

同じことの繰り返しなので,for文を使うことにする.例えば,次のようにする.
> # リッカート尺度は,forループを用いて,簡潔に書く
> for (i in 12:45) {
>   dat[[i]] <- factor(dat[[i]], levels=1:4)
>   levels(dat[[i]]) <- c("全くない", "それほどない", "そう思う", "強く思う")
> }
あらかじめ,繰り返す列番号を確認しておき,その数字を利用する.上の場合だと12番目から45番目までの変数に対して同じ変換を繰り返すことになる.

変数のリコーディング

コレスポンデンス分析をするにあたり,頻度が非常に多い(少ない)カテゴリーがあると具合が悪い.なので,変数のリコーディングは,普通やらざるを得ないだろう.

カテゴリーを統合して,数を減らすだけなら,関数levels()が使える.無くしたい水準にラベルを書き込むだけで済む.最初の[数字]はデータフレーム内の列数を,2番目の[数字]は変数の水準を表していることに注意.
> # リッカート尺度は,forループを用いて,簡潔に書く.レベルが減っていくことに注意
> for (i in 6:32) {
>   levels(dat[[i]])[1] <- "思わない"
>   levels(dat[[i]])[2] <- "思わない"
>   levels(dat[[i]])[3] <- "そう思う" # レベル1と2が統合されることによって最大値が3になっている
> }

上の例では,4件法を「そう思う」「思わない」の2水準にまとめている.
注意したいのは,水準1と2をまとめてしまうと,この時点で水準は3になっている点である.最後は levels(dat[[i]])[4] <- "そう思う" と書きたくなってしまうが,それではミスとなる.

これだけ準備してようやくコレスポンデンス分析にとりかかることができる.が,ちょっと長い記事になったので,今日はここまで.
でも,実際の分析については,いろいろ書籍やウェブみれば分かるので,実はここまでの作業のほうが貴重な情報なのかもしれない.

続きは,ここここで.



2 コメント

コメント日が  古い順  |   新しい順
データの形式について (kfsk)
2010-09-30 23:17:38
普通ここで扱うデータは次のような形式で入力されている.

性別 学年 好きな教科
男性 1年 理科
女性 3年 国語
女性 2年 数学
 ・
 ・
 ・
男性 3年 英語

このようなデータ形式をアイテム-カテゴリー型という.ラベルじゃなくても,例えば「男性→1」「女性→2」などとコーディングされていてもいい.

一方で,上のデータは次のようにすれば,すべて「1」「0」の2値で表現することができる

男性 女性 1年 2年 3年 国語 数学 英語 理科 社会
1  0  1  0  0  0  0  0  1  0
0  1  0  0  1  1  0  0  0  0
0  1  0  1  0  0  1  0  0  0
 ・
 ・
 ・
1  0  0  0  1  0  0  1  0  0

これを反応パターン型という,反応パターンごとにダミー変数を作ることとなるのでダミー行列などと呼ばれることもあるようだ.

Rの関数のうち,mca()は前者を,corresp()は後者を扱う.

なお,「アイテムーカテゴリー型」「反応パターン型」という用語は,「HALBOUによる多変量解析の実践」(高木廣文・柳井晴夫編,現代数学社,1995年)に基づく.
記事の続編について (kfsk)
2010-12-13 13:39:58
記事の続編について情報を追加しました

コメントを投稿