東京大学 | 大学院医学系研究科 | 国際保健学専攻 | 人類生態学教室TOP | 2nd

社会統計学第7回
「カテゴリカルデータの解析(3)」(2001年11月8日)

トップ | 更新情報 | 研究と教育 | 業績 | 計算機 | 写真 | 枕草子 | 著者 | 目安箱 | 書評 | 社会統計学目次

最終更新: 2001年11月15日 木曜日 08時22分

全部を一括して読む | 前回へ


講義概要

講義で使用したRのスクリプトは,p07.Rとしてダウンロードできる。

2つのカテゴリカル変数の独立性の検定
▼復習:例えば5人の人を対象に,性別と社会人か学生かを聞き取った場合,生データを書き出すと,
性別社会人か学生か
A男性(M)社会人(W)
B女性(F)学生(S)
C男性(M)学生(S)
D男性(M)社会人(W)
E女性(F)社会人(W)
のようになるが,ここでいう「性別」とか,「社会人か学生か」というくくりで表される属性は,人によって変わる「変数」である。「性別」とか「社会人か学生か」のように離散値であり大小関係がない値からなる変数をカテゴリカル変数という。
▼2つのカテゴリカル変数の間に関係があるかどうかを検討したいとき,それらの組み合わせの度数を調べた表を作成する。これをクロス集計表と呼ぶ。5人くらいなら数え上げても良いが,普通,調査は数百人以上を対象に行うので,ソフトウェアにやらせる。
▼Rではクロス集計表は,table(カテゴリカル変数名1,カテゴリカル変数名2)で作成できる。Excel2000ではデータ範囲を選択してから「データ」の「ピボットテーブルとピボットグラフレポート」を選んで「完了」ボタンを押せば,新しいワークシートが開くので,薄い字で「ここに列のフィールドをドラッグします」と書いてあるところと「ここに行のフィールドをドラッグします」と書いてあるところに2つのカテゴリカル変数名をドラッグ&ドロップし,「ここにデータアイテムをドラッグします」と書いてあるところにIDなど(この例では「人」)をドラッグすればクロス集計表ができあがる。
▼とくに,2つのカテゴリカル変数が,ともに2値変数のとき,そのクロス集計は2×2クロス集計表(2×2分割表)と呼ばれ,その統計的性質が良く調べられている。
▼研究デザインによって,検討すべき関係の種類はさまざまである。例えば,肺がんと判明した男性患者100人と,年齢が同じくらいの健康な男性100人を標本としてもってきて,それまで10年間にどれくらい喫煙をしたかという聞き取りを行うという「患者対照研究=ケースコントロール研究」を実施した場合に,喫煙の程度を「全然吸わない」から「ずっとヘビースモーカーだった」まで何段階かのスコアを振れば,喫煙状況という変数と肺がんの有無という変数の組み合わせが得られる。
▼もちろん,それらが独立であるかどうか(関連がないかどうか)を検討することもできる。
▼しかし,むしろこのデザインは,肺がん患者は健康な人に比べて,どれくらい喫煙していた割合が高いか,を評価するためのデザインである。逆に,喫煙者と非喫煙者を100人ずつ集めて,その後の肺がん発生率を追跡調査する前向き研究(フォローアップ研究)では,非喫煙群に比べて,喫煙者ではどれくらい肺がんの発生率が高いかを評価できる。
▼これらの値を,リスク比やオッズ比という。しかし,断面研究で得られた2つの変数には,時間的な前後関係がないので,独立性の検定を行ったり,リスク比やオッズ比以外の関連性の指標を計算することが多い。

リスク比とオッズ比は,

疾病あり疾病なし
曝露ありa人b人
曝露なしc人d人
であるとき,前向き研究からの疾病リスク比=a/(a+b)/(c/(c+d))=a(c+d)/c(a+b),疾病オッズ比=a/b/(c/d)=ad/bc,患者対照研究からの曝露リスク比=a/(a+c)/(b/(b+d))=a(b+d)/b(a+c),曝露オッズ比=a/c/(b/d)=ad/bcとなり,リスク比は異なるがオッズ比は一致する。断面研究の場合は,有病オッズ比としてad/bcを計算する。社会統計学ではリスク比はあまり使われないが,オッズ比は使われる。一般に,要因Aのない人に比べて,要因Aがある人は,何倍くらい特性Bをもちやすいか,を示す値となる。後にロジスティック回帰の話で触れる。

関連性の指標には,ピアソンの相関係数とか,ファイ係数などがある。これらについては後日触れる。

なお,同じ質問を2回した場合に同じ変数がどれくらい一致するかについても,独立性の検定ができそうな気がするかもしれないが,してはいけない。この場合はtest-retest-reliabilityを測ることになるので,前期の社会調査で説明したクロンバックのα係数を計算するか,あるいはκ係数などの一致度の指標を計算するのが正しい。

▼独立性の検定は,2つのカテゴリカル変数の間に関連がないと仮定した場合に推定される期待度数を求めて,それに観測度数が適合するかを検定するカイ二乗検定である。もちろん,ある種の関連が仮定できれば,その仮定の元に推定される期待度数と観測度数との適合を調べてもいいが,一般に,2つのカテゴリカル変数の間にどれくらいの関連がありそうかという仮定はできないことが多い。そこで,関連がない場合の期待度数を推定し,それが観測値に適合しなければ関連がないとはいえない,と推論するのである。
特性Aあり特性Aなし
特性Bありa人b人
特性Bなしc人d人
▼標本が,上記の表のような度数をもっているとき,母集団の確率構造が,
特性Aあり特性Aなし
特性Bありπ11π12
特性Bなしπ21π22
であるとわかっていれば,N=a+b+c+dとして,期待される度数は,
特性Aあり特性Aなし
特性BありNπ11Nπ12
特性BなしNπ21Nπ22
であるから,χ2=(a-Nπ11)2/Nπ11+(b-Nπ12)2/Nπ12+(c-Nπ21)2/Nπ21+(d-Nπ22)2/Nπ22として,自由度3のカイ二乗検定をすればよいが,普通はπが未知なので,p(A∩B)=p(A)p(B)と考えて,各々の変数については特性のある人とない人の人数が決まっている(周辺度数が固定している)と考え,π11を,p(A)の推定値(a+c)/Nとp(B)の推定値(a+b)/Nの積として推定するなどすれば,
χ2=N(ad-bc)2/((a+c)(b+d)(a+b)(c+d))となる。この場合は,母数を2つ(p(A)とp(B))推定したので,自由度1のカイ二乗分布に従うと考えて検定できる。
▼ただし,標本数が小さいときは,イェーツの連続性の補正を行うことが多い。カイ二乗分布は連続分布なので,各度数に0.5を足したり引いたりしてやると,より近似が良くなる。
▼この場合,χ2=N(|ad-bc|-N/2)2/((a+c)(b+d)(a+b)(c+d))が自由度1のカイ二乗分布に従うと考えて検定する。ただし,|ad-bc|がN/2より小さいときは補正の意味がないので,χ2=0とする。
▼実際の検定は,a=12, b=8, c=9, d=10などとわかっているときは,
x<-matrix(c(12,8,9,10),nc=2)として表を与え,chisq.test(x)とするだけでもできる(連続性の補正を行わないときはchisq.test(x,correct=F)とするが,通常その必要はない)。公式通りに計算した結果と比較せよ。
▼周辺度数が固定しているときに,すべての組み合わせを考えて,それらが起こる確率を直接計算し,与えられた表よりも偏った表になる確率をすべて足し合わせたものをフィッシャーの直接確率という。Rでは,fisher.test(x)で実行できる。Nが小さいときは,この方が正確である。
▼Rでは,simulate.p.valueというオプションを使えば,シミュレーションによってそのカイ二乗値より大きなカイ二乗値が得られる確率を計算させることもできるが,遅いコンピュータだと計算時間がかかるのが欠点である。
▼各度数が未知で,個人についての生の値が与えられているときは,chisq.test(A,B)などとする。度数を計算するには,table(A,B)とする。もちろん,chisq.test(table(A,B))としてもよい。Nが小さければ,この場合もFisherの直接確率の方が良い。fisher.test(A,B)で実行可能である。
▼infertのデータで,人工中絶(induced)と自然流産(spontaneous)の回数の関係を検討せよ。

フォロー

AありAなし
Bあり12人8人
Bなし9人10人
であるとき,カテゴリ変数Aとカテゴリ変数Bが独立である(無関係である)かどうかをカイ二乗検定せよ。chisq.test()を使った場合と,公式通りにやった場合で結果を比較せよ。フィッシャーの直接確率(フィッシャーの正確な検定ともいう)ではどうか? の解答例
▼Rを使って実行すると,x <- matrix(c(12,9,8,10),nrow=2); chisq.test(x)の結果は,0.6386である。つまり帰無仮説「カテゴリ変数Aとカテゴリ変数Bは独立である」が正しい確率は64%もあり,棄却されないことになる。
▼1-pchisq(39*(abs(12*10-8*9)-39/2)^2/(12+8)/(9+10)/(12+9)/(8+10),1)の結果は,0.638632となり,chisq.test()の結果と一致していることが確認された。
▼x <- matrix(c(12,9,8,10),nrow=2); fisher.test(x)の結果は,0.5273となる。カイ二乗検定のときより確率は低いが,それでも0.05よりはずっと大きいので,帰無仮説は棄却されない。
『infertのデータで,人工妊娠中絶回数(induced)と自然流産回数(spontaneous)は無関係といえるかを検討せよ』の解答例
▼Rでdata(infert); attach(infert); T<-table(induced,spontaneous); T; chisq.test(T); fisher.test(T);と実行すると,集計表が表示された後に,帰無仮説「infertのデータで人工妊娠中絶回数と自然流産回数が独立である」が成立する確率は,カイ二乗検定で0.001129,フィッシャーの直接確率で0.0004852となり,いずれにせよ1%よりずっと低いことがわかる。つまり,帰無仮説は棄却され,infertのデータでは人工妊娠中絶回数と自然流産回数は無関係とはいえない。
(確率の)数値をみて判断するということは,微妙な数値の場合,主観的判断に委ねるということ?
▼通常,検定を行う前に,何%より小さければ帰無仮説が棄却されるかという水準(有意水準)を決めておきます。習慣的に5%か1%が用いられます。
▼しかし,最近は有意水準との大小だけでなく,帰無仮説が正しい確率pを,そのまま結果として表示することが求められるようになってきました。そのため,pの値についての解釈は,0.06くらいだと「…傾向がある」と表現するといったことが起こっています。これは,ある意味では主観的といえるかもしれませんが,より厳密な表現になっただけともいえます。

全部を一括して読む | 次回へ