不平等と異質性
Inequality and Heterogeneity: A Primitive Theory of Social Structure
- 作者: Peter Michael Blau
- 出版社/メーカー: Free Pr
- 発売日: 1977/10/01
- メディア: ハードカバー
- クリック: 3回
- この商品を含むブログ (1件) を見る
標題の本を題材として輪読会をするという噂を聞いて。
Linの『Social Capital』でも引用されていたBlauの書。手に入るのかな……。
値のリコードとクロス表分析
リコード作業に入る前に欠損値の指定をおこなう。SPSSでデータを作るとき、NAやDKに“9”や“99”を振ることが多い。分析の際、この“9”や“99”を必要に応じて欠損値扱いにする。Rでも“9”や“99”をそのままにしておくと普通の値として計算されてしまうので、欠損値であることを明確にしておく。
sex <- replace(d1$q1, which(d1$q1==9), NA) # q1は性別 age <- replace(d1$q2, which(d1$q2==99), NA) # q2は年齢 vol <- replace(d1$q12, which(d1$q12==97), NA) # q12はボランティア参加の程度 vol <- replace(vol, which(vol==99), NA)
sex、age、volをデータフレームに追加。
d1 <- cbind(d1, sex, age, vol)
欠損データをデータフレームから除去。
d2 <- na.omit(d1)
age5 <- ctgr(d2$age, c(30, 40, 50, 60), # 区切り値 c("20代", "30代", "40代", "50代", "60代以上")) # ラベル
n個の区切り値でn+1個の区間に区切る。区切り値は区間の左端に含まれる。たとえば、volの値は1「積極的に参加している」から4「参加していない」の4分位なので
vol2 <- ctgr(d2$vol, c(4), c("参加している","参加していない"))
とすれば、1から3までと4のふたつの区間に区切られる(区切り値は4)。
なお、この関数を使うとリコード後の変数は質的変数になる。carパッケージのrecode関数を利用すれば、連続変数のまま複数の値を統合することが可能。
リコードしたage5とvol2をクロス集計する。
t1 <- table(age5, vol2)
出力を確認。
> t1 vol2 age5 参加している 参加していない 20代 19 104 30代 42 107 40代 66 126 50代 100 179 60代以上 137 174
セル度数だけだと分かりにくいので、周辺度数を追加。
t2 <- addmargins(t1, c(1, 2))
> t2 vol2 age5 参加している 参加していない Sum 20代 19 104 123 30代 42 107 149 40代 66 126 192 50代 100 179 279 60代以上 137 174 311 Sum 364 690 1054
行%の計算は次のようにする。
t3 <- 100*prop.table(t1, 1)
> t3 vol2 age5 参加している 参加していない 20代 15.44715 84.55285 30代 28.18792 71.81208 40代 34.37500 65.62500 50代 35.84229 64.15771 60代以上 44.05145 55.94855
> chisq.test(t1) Pearson's Chi-squared test data: t1 X-squared = 35.148, df = 4, p-value = 4.331e-07
この値をもとに、クラマーのを計算。
だから
vnum <- 35.148 #分子 vden <- 1054*(2-1) #分母 v <- sqrt(vnum/vden)
で求まる。
> v [1] 0.1826123
たいした手間ではないが、直接、クラマーのを出せるコマンドがあったらいいな、と思っていたらこんなのを発見。
# クラマー係数を関数として定義 cr <- function(x) { if (dim(x)[1] > dim(x)[2] ) return(sqrt(chisq.test(x)$statistic/sum(x)/(dim(x)[2]-1))) else return(sqrt(chisq.test(x)$statistic/sum(x)/(dim(x)[1]-1))) }
簡単に係数をえることができる。
> cr(t1) X-squared 0.1826122
*1:関数は青木先生のページ(http://aoki2.si.gunma-u.ac.jp/R/recode.html)で公開されています。もとの関数の名前はrecodeですが、recodeという関数は他にもあるので、利用に際して関数名を変えさせていただきました。
SPSSのデータをRに読み込む
SPSSのデータファイルをdat形式(タブ区切りのテキスト)で保存する。データは2006年兵庫県民調査のデータセット*1。
SAVE TRANSLATE OUTFILE='D:\R\hyogo05.dat' /TYPE=TAB /MAP /REPLACE /FIELDNAMES /CELLS=VALUES.
Excelでdatファイルを開いてデータを確認。使う変数がはっきりしている場合、このときにオートフィルタで欠損値を空白セルに置き換えておくとよい。
データファイルをRに読み込む。
d1 <- read.delim("D:/R/hyogo05.dat", header=TRUE)
欠損値を指定してファイルを読む込むときは、次のようにプログラムを書く。
d1 <- read.delim("D:/R/hyogo05.dat", header=TRUE, na.strings="#NULL!") d2 <- na.omit(d1)
「#NULL!」のセルをNA扱いにして、さらにNAがあるケースをデータフレームから除去する、という意味。欠損値を空白セルにしているのであれば、na.stringsの引数は要らない。
指定した値をシステム欠損値に置換するためのシンタックス
SPSSのデータ上で欠損値として定義されている値を、いわゆる「システム欠損値」に置き換えるためのシンタックス。たとえばq13aという変数では「7」と「9」が欠損値に指定されているとする。この場合、まず欠損値の指定を解除したうえで、以下のシンタックスを実行する。
if (q13a = 7) or (q13a = 9) q13a = $sysmis.
データビューを確認すると「7」と「9」の値が入っていたセルが空欄(「.」)になっているはずである。複数の変数をまとめて処理するときは次のシンタックスが便利。
do repeat a = q13b to q13e/ b = q13b to q13e. recode a (1 thru 4 = copy) (7 thru 9 = sysmis) into b. end repeat.
recodeとdo repeatの組み合わせ。こちらの方法でシステム欠損値に置き換える場合は事前に欠損値の解除をおこなう必要がない。
PISA2000の生徒データと学校データをマージ
マニュアルやホームページでシンタックスが公開されていなかったので。
get file 'C:\PISA\Data2000\intscho.sav'. sort cases by country subnatio schoolid. save outfile='C:\PISA\Data2000\intscho.sav'.
get file='C:\PISA\Data2000\intstud_read.sav'. sort cases by country subnatio schoolid. match files file=* /table='C:\PISA\Data2000\intscho.sav' /by country subnatio schoolid.
PISA2003用のプログラムとのちがいは"sort cases by"以下で"country"も指定しないといけないところ。2000データは2003データと"subnatio"コードの振り方にちがいがありケースをソートする際に"country"も参照しないとキーの重複が起きてしまう(ようだ)。
日本のデータだけをとりだして別ファイルとして保存する場合、下記のコマンドを追加。
Select if cnt='JPN'. Save outfile='C:\PISA\Data2000\2000R JPN_sch.sav'.
欠損データ
Missing Data (Quantitative Applications in the Social Sciences)
- 作者: Paul D. Allison
- 出版社/メーカー: SAGE Publications, Inc
- 発売日: 2001/10/03
- メディア: ペーパーバック
- クリック: 21回
- この商品を含むブログ (4件) を見る
アンケート調査における欠損データ(わからない、無回答)にどう対処したらよいのかについて、わかりやすく書かれた解説書。
欠損データには「完全にランダムな欠損」(Missing Completely at Random)と「ランダムな欠損」(Missing at Random)、そして「無視できない欠損」がある。最後の「無視できない欠損」をいい加減に扱うと、パラメータの推定にゆがみが生じる。
たとえば、英語のジャーナルを読んでいると、欠損データを平均値で置き換えて、置き換えをおこなったかどうかを示すダミー変数を投入する、という手続きをよく見かけるが、この方法で欠損データを処理すると、パラメータ推定値は「真」の値から大きくはずれたものになってしまう。
欠損データを埋める効果的な方法として、マルティプル・インピュテーションとEMアルゴリズムを用いた方法が紹介されている。
理論的には理解できるものの、いざ実践するとなると、ハードルがもう一段高くなるという印象を受けた。とりわけ「簡便な」方法ではなく、「効果的」だとされる方法にかんしては、SPSSを使って遂行するのは難しいようだ。大学のコンピュータに入っているソフトでできそうなのはSASとAmosか。
かんなぎ
たまには漫画も。