install.packages("QCA") # 初めての場合は1回だけinstall.packages( )を実行
library(QCA) # 毎回のRセッションの最初に1回実行超初心者向けのRガイド
QCA. Qualitative Comparative Analysis
1 全体の構成
2 質的/定性的比較分析
ここでは,定性的比較分析が何であるかと云う事は説明しない。日本語で読める本の一部を紹介するにとどめる。かつては「ブール代数分析」と呼ばれる事が多かった。
また,QCAは現在,大きく分けると,元来のcrisp-set QCA(csQCA)とその後普及したfuzzy-set QCA(fsQCA)があるが,ここではより理解しやすいcrisp-set QCAの初歩をRで実行する方法を解説に留める。
fuzzy-set QCAについて興味があれば以下の書籍を参照の事。
crisp-set QCAでは原則的には,独立変数(要因factor)も従属変数(帰結outcome)も0-1の二値変数にしなければならない。
また,データにNAがあると実行されない。
要因の数は余り多過ぎてはいけないが,large-Nの場合には通常よりも多くても分析可能ではある1。
3 書籍の分析例の再現
田村正紀『経営事例の質的比較分析』
115-118頁の論理的簡単化のデータ
3.1 Truth Table
このRのpackageだと,complete の理解は以下の通りだが,テクストでは「不完備真理表」と書かれている。流派の違いかもしれないが,こちらの方が自然だと思う。
また,configurationの並べ方もテキストは全く規則性がないが,通常はこんな風(もしくはこの逆順)に書いて読み易くする。テクストは表の間での要因の順番も一貫していないが当然一貫させるべき。
t.tam <- truthTable(d.tam,
outcome = L,
complete = TRUE)
t.tam
OUT: output value
n: number of cases in configuration
incl: sufficiency inclusion score
PRI: proportional reduction in inconsistency
P Q R S OUT n incl PRI
1 0 0 0 0 ? 0 - -
2 0 0 0 1 0 1 0.000 0.000
3 0 0 1 0 0 1 0.000 0.000
4 0 0 1 1 1 1 1.000 1.000
5 0 1 0 0 0 1 0.000 0.000
6 0 1 0 1 ? 0 - -
7 0 1 1 0 ? 0 - -
8 0 1 1 1 ? 0 - -
9 1 0 0 0 0 1 0.000 0.000
10 1 0 0 1 ? 0 - -
11 1 0 1 0 ? 0 - -
12 1 0 1 1 1 1 1.000 1.000
13 1 1 0 0 ? 0 - -
14 1 1 0 1 1 1 1.000 1.000
15 1 1 1 0 1 1 1.000 1.000
16 1 1 1 1 1 1 1.000 1.000
テクストでは「完備真理表」とされている。
truthTable(d.tam,
outcome = L,
complete = FALSE)
OUT: output value
n: number of cases in configuration
incl: sufficiency inclusion score
PRI: proportional reduction in inconsistency
P Q R S OUT n incl PRI
2 0 0 0 1 0 1 0.000 0.000
3 0 0 1 0 0 1 0.000 0.000
4 0 0 1 1 1 1 1.000 1.000
5 0 1 0 0 0 1 0.000 0.000
9 1 0 0 0 0 1 0.000 0.000
12 1 0 1 1 1 1 1.000 1.000
14 1 1 0 1 1 1 1.000 1.000
15 1 1 1 0 1 1 1.000 1.000
16 1 1 1 1 1 1 1.000 1.000
他にも incl.cut1 と云うオプションがあるがここでは使い道がない。
3.2 最小化
minimize(t.tam, details = TRUE)
M1: P*Q*R + P*Q*S + ~Q*R*S <-> L
inclS PRI covS covU
-------------------------------------
1 P*Q*R 1.000 1.000 0.400 0.200
2 P*Q*S 1.000 1.000 0.400 0.200
3 ~Q*R*S 1.000 1.000 0.400 0.400
-------------------------------------
M1 1.000 1.000 1.000
outcome L が1となるconfigurationは5つあったが,最少化すると3つの項だけになる。
これが119頁に書かれている。
「最簡解」はどの様に導出されるのか,これでは分からない。
logical remainderを全てLと仮定するとどうなるかを試す。
minimize(t.tam, include = "?", details = TRUE)
M1: P*Q + R*S <-> L
inclS PRI covS covU
----------------------------------
1 P*Q 1.000 1.000 0.600 0.400
2 R*S 1.000 1.000 0.600 0.400
----------------------------------
M1 1.000 1.000 1.000
118頁に「最簡解」として書かれているものが導出される。
図4.4の最簡解は,logical remainderを全てL=1とした場合の解と一致する。
しかし,Truth Tableの1行目,全ての要因が0のものはケースが存在しないが,これのoutcomeが1であるとは流石に想定されないので,これをデータに追加した上でそれ以外のlogical remainderをoutcome = 1として最簡解を導出させると,
t.tam2 <- truthTable(rbind(d.tam , c(0, 0, 0, 0, 0)) ,
outcome = L, complete = TRUE)
t.tam2
OUT: output value
n: number of cases in configuration
incl: sufficiency inclusion score
PRI: proportional reduction in inconsistency
P Q R S OUT n incl PRI
1 0 0 0 0 0 1 0.000 0.000
2 0 0 0 1 0 1 0.000 0.000
3 0 0 1 0 0 1 0.000 0.000
4 0 0 1 1 1 1 1.000 1.000
5 0 1 0 0 0 1 0.000 0.000
6 0 1 0 1 ? 0 - -
7 0 1 1 0 ? 0 - -
8 0 1 1 1 ? 0 - -
9 1 0 0 0 0 1 0.000 0.000
10 1 0 0 1 ? 0 - -
11 1 0 1 0 ? 0 - -
12 1 0 1 1 1 1 1.000 1.000
13 1 1 0 0 ? 0 - -
14 1 1 0 1 1 1 1.000 1.000
15 1 1 1 0 1 1 1.000 1.000
16 1 1 1 1 1 1 1.000 1.000
minimize(t.tam2, include = "?", details = TRUE)
M1: P*Q + R*S <-> L
inclS PRI covS covU
----------------------------------
1 P*Q 1.000 1.000 0.600 0.400
2 R*S 1.000 1.000 0.600 0.400
----------------------------------
M1 1.000 1.000 1.000
最簡解に一致するのでこれはOK。
3.3 テクストの「最簡解」導出に必要な条件の探索
他のlogical remainder10について幾つか仮定を置いて同様に最簡解を導出してみる。
真理表で OUT が ? となっているconfigurationを一つだけoucome = 0として,他の?はoutcome=1の儘分析してゆく。
3.4 新たな中間解の検討
以上の検討から,テクストの「最簡解」は受け入れがたい。
しかし,全ての要因が0のconfigurationはoutcome=0として良い様にも思われる。
ここで,outcomeについて(データがないが)推測で値を埋めて解を求める事をやってみる。
t.tam
OUT: output value
n: number of cases in configuration
incl: sufficiency inclusion score
PRI: proportional reduction in inconsistency
P Q R S OUT n incl PRI
1 0 0 0 0 ? 0 - -
2 0 0 0 1 0 1 0.000 0.000
3 0 0 1 0 0 1 0.000 0.000
4 0 0 1 1 1 1 1.000 1.000
5 0 1 0 0 0 1 0.000 0.000
6 0 1 0 1 ? 0 - -
7 0 1 1 0 ? 0 - -
8 0 1 1 1 ? 0 - -
9 1 0 0 0 0 1 0.000 0.000
10 1 0 0 1 ? 0 - -
11 1 0 1 0 ? 0 - -
12 1 0 1 1 1 1 1.000 1.000
13 1 1 0 0 ? 0 - -
14 1 1 0 1 1 1 1.000 1.000
15 1 1 1 0 1 1 1.000 1.000
16 1 1 1 1 1 1 1.000 1.000
1行目はOUT=0の仮定が受け入れられるだろう。
他に,8行目は要因が3つ迄揃っているのでOUT=1としても尤もらしそうである。
この2つの追記で,include = “?” を付けずに分析する12。
t.tam4 <- truthTable(rbind(d.tam , c(0, 0, 0, 0, 0), c(0, 1, 1, 1, 1)) ,
outcome = L, complete = TRUE)
t.tam4
OUT: output value
n: number of cases in configuration
incl: sufficiency inclusion score
PRI: proportional reduction in inconsistency
P Q R S OUT n incl PRI
1 0 0 0 0 0 1 0.000 0.000
2 0 0 0 1 0 1 0.000 0.000
3 0 0 1 0 0 1 0.000 0.000
4 0 0 1 1 1 1 1.000 1.000
5 0 1 0 0 0 1 0.000 0.000
6 0 1 0 1 ? 0 - -
7 0 1 1 0 ? 0 - -
8 0 1 1 1 1 1 1.000 1.000
9 1 0 0 0 0 1 0.000 0.000
10 1 0 0 1 ? 0 - -
11 1 0 1 0 ? 0 - -
12 1 0 1 1 1 1 1.000 1.000
13 1 1 0 0 ? 0 - -
14 1 1 0 1 1 1 1.000 1.000
15 1 1 1 0 1 1 1.000 1.000
16 1 1 1 1 1 1 1.000 1.000
minimize(t.tam4, details = TRUE)
M1: R*S + P*Q*R + P*Q*S <-> L
inclS PRI covS covU
------------------------------------
1 R*S 1.000 1.000 0.667 0.500
2 P*Q*R 1.000 1.000 0.333 0.167
3 P*Q*S 1.000 1.000 0.333 0.167
------------------------------------
M1 1.000 1.000 1.000
テキストの複雑解,中間解,最簡解のいずれとも異なる解が得られた。
この様に,観測事例の無いパタン(logical remainder)にどの様な仮定を置くかによって結果の解が変化するので,どのパタンは結果が0でどのパタンは結果が1だと仮定したのかを,理由とともに必ず明記すべきであろう。
Footnotes
要因の数が多いと要因の組合せの種類(configuration)の数は倍々ゲームで増えていくが,それぞれのconfigurationに多少でも該当ケースが有れば分析手続きは可能である↩︎
言い換えれば裁量の余地がある,もしくは恣意性が発生する。↩︎
但しここで更にかなり工夫している。↩︎
等結果性(equifinality)とも呼ばれる。↩︎
近年では因果的複雑性(causal complexity)と呼ばれる事も多いが,多元結合因果の方が,QCAの特徴を具体的に表現している様に思う。Raginは多元結合因果を,(彼の理解する)統計的データ分析の線形(linear)因果の考え方に鋭く対置させ,統計的データ分析をvariable-oriented,自らの方法をcase-orientedと呼んで後者の優位性を主張した。しかし結合因果は少なくとも部分的には交互作用項として統計的データ分析でも扱いうるし,QCAとロジット分析やログリニア分析の類似性も指摘されている。また,QCAはcase-orientedなのではなくconfiguration-orientedであるとの指摘もある。↩︎
これはデータとして観測されていないもの(QCAはlogical remainderと呼んでいる)について帰結を仮定する事であり,かなり強い前提であるともいえる。こうした前提が尤もらしいかどうかの検討が重要となる。↩︎
Warning in admisc::writePrimeimp(impmat = inputt, mv = mv, collapse = collapse, : Function writePrimeimp() is deprecated, use writePIs().との警告が表示されるが,こちらではどうにもできないので無視する。↩︎
ケース数の違いも大きい為にraw coverage(covS)で言えば後者の方が高いが↩︎
115頁に「表4.1の真理表から」とあるので。↩︎
要するにmissing caseと言えばいいだけでは↩︎
率直に言ってしまえばやや論点先取に思われる。↩︎
正確に言えば,明示的に指定していない未観測のconfigurationについては全てOUT=0を仮定しているのであり,仮定を置いたり置かなかったりしている訳ではなく,全ての論理残余に1か0のいずれかの仮定を置いている筈である。この点について自覚の弱いものがしばしば見られる。↩︎