library(cjoint)
library(tidyverse)

1. コンジョイント分析とは何か?

1.1 定義

  • Hainmueller et al. (2014)にて考案されたコンジョイント実験
  • Horiuchi et al. (2018)が政治学への応用例を提示
  • 人びとの選好を明らかにする方法としてのコンジョイント分析
  • ある対象の属性(attributesあるいは属性の水準(levelsが、当該対象を選択する際にどの程度考慮されるのかを統計的に明らかにする方法

1.2 コンジョイント分析の応用分野

1.3 コンジョイント実験の特徴

  • 回答者に提示されるプロファイルの内容が無作為化される点
  • 方法:
    (1)プロファイルを回答者に提示する
    (2)比較してもらう作業を通じて水準等の影響を推定する
  • 複数(通常は 2 つ)のプロファイルを事前に作成する
    → ウェブ上のプログラムによって無作為にプロファイル内容を定める = プロファイルの内容を無作為化する
    →より妥当な形で複数の属性や水準の効果を、統計的因果推論の枠組みに基づき推定できる
  • 例えば、コロナワクチンに関するさまざまな条件(= 水準と呼ばれる)をランダムに組み合わせ、回答者にどれが望ましいかを選んでもらう
    → 個別の条件や内容の1つ1つを分解して、好ましいコロナワクチンの在り方について、どのような要素が、どの程度、また、どのように影響しているのかを厳密に検証できる

1.4 なぜコンジョイント実験に注目するのか?

  • 政治学や行政学、公共政策学における主要な関心事:
  1. 「人びとの選好を知ること」
  2. 「選好が実際の行動などに与える影響を明らかにすること」
  • 行政学や公共政策学においても、政策需要や行政満足度を分析し把握することは重要(野田 2013)
  • 代議制民主主義の下では、代理人である政治家や政党が有権者の選好に応答的であることが求められる → 政策選好の分析の重要性

従来の調査分析との違い

従来の調査分析

  • 従来の政策選好を明らかにする一般的な方法 = 意識調査

  • いくつかの政策や争点項目を多数の回答者に提示

  • それぞれについての賛否などを尋ねる

  • 実例):「JESⅢ調査」の質問
    リード
    集団的自衛権の問題として、次のA、Bのような意見があります

質問文:
A:日米安保体制を強化するためには、集団的自衛権の行使を認めるべきである
B:国際紛争に巻き込まれることになるので、集団的自衛権の行使を認めるべきではない
Q1:あなたの意見はどちらに近いですか
選択肢: 賛否が
1:Aに近い
2:どちらかといえばA
3:どちらかといえばB
4:Bに近い

Q2:集団的自衛権の問題はあなたにとってどのくらい重要ですか
選択肢: 重要性は
1:かなり重要である
2:やや重要である
3:あまり重要ではない
4:ほとんど重要ではない

  • 従来の世論調査方法では、様々な争点に関して人々の賛否(意見)は集約できる
  • しかし「因果推論」ができない

コンジョイント実験

このような従来の方法に代替する手法

  • Hainmueller et al. (2014)が考案

  • 一般的にマーケティング領域のコンジョイント分析を洗練させたもの

  • 様々な属性がもつ水準のうち、最も人びとに好まれる水準の組み合わせを統計的に分析する

  • 選好の「構成要素」= 属性

  • 構成要素の「変数値」= 水準

  • 衆院選挙で 2 つの政党からどちらかに投票する場合を考える

  • ここで考慮する政策(=属性)は次の 3 つだとする

  1. 憲法改正
  2. 消費税
  3. 原発
  • これら属性はさらに複数の水準をもつ:
    →「改憲」と「護憲」は「憲法改正」の水準
    →「10%」と「5%」は「消費税」の水準
    →「「再稼働」と「廃止」は「原発」の水準

図1:コンジョイント分析で回答者に示すプロファイル例

  • 図1に示すようなプロファイルを複数作成
  • 様々な水準を組み合わせたプロファイルを複数作成
  • これらを回答者に比較検討してもらう
  • どちらかの政党を選んでもらう
  • 各属性が選択に与える影響を推定

注意点:属性と水準の数が多すぎると多くのプロファイルを作成しなければならない
→ 推定結果の妥当性が減じられる可能性あり
→ 要因や水準を減らす方向で調整する必要がある(君山2010)

2. コンジョイント実験の特徴

2.1 プロファイル内容の無作為化

  • 回答者に提示するプロファイルの内容を無作為化する
    → 平均因果効果推定で必要な独立性仮定を満たす
  • コンジョイント実験 → 妥当な因果推論を可能にする
  • プロファイル内容は完全あるいは条件付きで無作為化
    → 回答者は、どのようなプロファイルが提示されるかわからない
    → 比較的少数のプロファイルを回答者に提示して評価してもらう
    → 属性ないし水準の影響力を推定する
  • 従来の意識調査・・・大量のプロファイルを見せた
  • コンジョイント実験・・・少数のプロファイルを見せる
    → 回答者の認知不可が低いという利点
    → 回答者が問われている内容をよく理解しないまま回答することが少なくなる

2.2 推定方法:平均因果効果 (AMCE)

AMCE: Average Marginal Component Effect

  • 2 項選択型の従属変数への AMCE についても線形回帰 (OLS) で推定する
  • 関心ある水準以外を全て平均値に固定
  • 水準を「存在しない状態 (0)」→「存在する状態( 1)」に変化させる
  • その時の従属変数 (Y) の期待値の差分(=効果量)として表現
  • 期待値の差分(=効果量)= OLS では「係数値」に該当

2.3 コンジョイント実験の利点

(1) 属性や水準の重要性について相対比較できる

  • 属性間の相対比較が可能

従来の意識調査

  • 複数の属性を列挙 → 評定法で重要度を測定
  • ある政策争点で「重要だ」と回答した回答者
    → 他の項目でも「重要だ」と回答することが多い
    → 回答者の選考を曖昧な形でしか把握できない

コンジョイント実験

  • どの属性を考慮するか「相対」比較の観点から検討できる
  • 全ての属性(あるいは水準)について「重要だ」と回答されることはない

(2) 過小評価バイアスを軽減できる

  • 独立変数の過小分散に基づく、過小評価バイアスの軽減
  • コンジョイント実験 → この問題を回避できる
  • 無作為に配分された実験が有力な方法
  • 政治学では、観察データを使った推定法 
    →実験的手法によって因果関係を分析する研究が 1990年代以降急増 (Druckman et al. 2011)

(3) 複数の仮説を同時に検証できる

  • 仮想シナリオを用いたフレーム実験: (秦 2015)
    → 一つの処置群には一つの刺激のみが含まれる
    → もし刺激が 2 種類あり、各刺激に 2 つのバリエーションがある場合
    → 4 つの実験群が必要

  • 1 つの群のサンプルサイズが小さすぎると
    → 平均因果効果を十分な精度で推定できない
    → フレーム実験は少数の独立変数の固定効果しか推定できない

  • 分析者が1つないし少数の変数の平均因果効果のみを検証したい場合

    → フレーム実験は有効な方法

  • コンジョイント実験 → 複数の変数の平均因果効果を推定可能

  • 回答者を複数の群に分割するのではなく、プロファイル内容を無作為化

  • 同時に複数の水準の効果を推定 → 各水準の影響力の相対的な比較も可能

  • 例えば、ある特定の政策パッケージが最も好まれる、あるいは好まれない点からどの程度離れているのかわかる

(4) 社会期待迎合バイアスを除去できる

  • SDB: Social Desirability Bias
  • フレーム実験では、SDB を招きかねない刺激に回答者が敏感に反応しうる
    → 刺激に効果がないのか、SDB ゆえに効果がないのか特定できない
  • コンジョイント実験では、回答者の回答は秘匿される
    → 安心して「ホンネ」を回答してもらえる
    → コンジョイント実験は Randomized Response Techniqueリスト実験(善教 2016)と同様の利点がある

参考:

FSE: Factorial Survey Experiment (Auspurg et al. 2015)
  • コンジョイント実験に近似した分析方法

  • 複数の属性から構成される 1 つの「物語 (vignettes)」を回答者に提示

  • それに対する評価を繰り返しおこなってもらう
    → 物語に含まれる属性等の効果を推定する方法

  • 1 つの物語を繰り返し提示するより、2 つのプロファイルのうち好ましい方を選択してもらうコンジョイント実験の方が、より実態に適合的な推定結果を得られる

3. コンジョイント分析の実例 (2014年衆院選)

  • Horiuchi et al. らが2014年11月に実施したコンジョイント実験
  • 1951人の日本人が 1 人あたり 5 ペア(= 5 つのタスク)の問いに回答
    → 1人あたり 10 人の候補者を比較 → N = 19510
  • 世論調査会社:Research Now
  • 調査実施期間:December 4-14, 2014

実験の目的

  • 従来の世論調査では明らかにされなかった投票において「最も人々に好まれる政策水準の組み合わせ」を統計的に分析すること

3.1 回答者に提示された設問

属性と水準

  • 「朝日新聞」「日経新聞」「産経新聞」に掲載された記事を使って、水準と実際に各政党が提示している政策位置をマッチング → 「支持政党名」にマッチング結果
  • 青字はベースライン: 自民党の政策が基準
属性 水準(構成要素の変数値) 支持政党名
消費再増税 ①中止・税率引き下げ 共産・社民
②当面は延期するが、一定の改革実現後速やかに実施 未来
③期限を決めずに延期 民主・維新・生活
④2017年4月に10%にし、軽減税率を導入 自民・公明
雇用政策 ①年功序列を撤廃して労働市場の流動化を促す 維新
②多様な働き方を認め、正規・非正規を問わず雇用を拡大 自民・公明
③派遣法改正など労働規制緩和に反対。正規雇用を維持 民主・生活・共産・社民
金融財政政策 ①大胆な金融緩和と機動的な財政出動によりデフレ脱却 社民・共産・生活
②格差拡大をもたらす金融財政政策に反対 民主・維新・未来
③過度の金融緩和や円安、公共事業のバラマキを是正 自民・公明
成長戦略 ①農業・医療など岩盤規制を打破 自民・公明・維新
②雇用政策や子育て支援などによる所得増で消費拡大 民主・生活・共産・社民
③地方産業・中小企業の活性化による成長実現 公明
原発再稼働 ①安全基準に合格すれば認める 自民・公明
②責任ある逃避計画など厳しい条件で容認 民主・維新
③再稼働を認めない 共産・生活・社民
TPP ①参加するが自由化には慎重 生活・社民・共産
②TPPへの参加反対 自民・公明・民主
③参加して積極的に自由化を推進 維新・未来
集団的自衛権 ①閣議決定のみに基づく行使の容認には反対 自民・公明・未来
②行使を認めない 社民・共産
③行使を容認し、関連法を整備 民主・維新・生活
憲法改正 ①憲法改正に賛成。国民の手による新しい憲法を制定 自民・民主・維新・未来
②現行憲法の基本原理を維持した上で必要な条文を追加 公明・生
③現行憲法条文のいかなる変更にも反対。平和憲法を守る 共産・社民
議員定数削減 ①選挙制度調査会の答申を尊重し、よりよい選挙制度改革に取り組む 自民・公明
②議員定数を大幅に削減する 民主・未来・生活
③議員定数削減を実現する 維新
④比例区の定数削減には反対 社民・共産

このコンジョイント分析の内容

  • 9 つの属性
  • プロファイル数は 2
  • 回答者は 2091人
  • 繰り返し回数 (task)は 5 回

3.2 主要な分析結果

  • Horiuchi et al (2018) の主要な分析結果を回帰プロット(キャタピラプロット)で示してみる

Source: Horiuchi, Yusaku; Smith, Daniel M.; Yamamoto, Teppei,
“Measuring Voters’ Multidimensional Policy Preferences with Conjoint Analysis:
Application to Japan’s 2014 Election”, Political Analysis (2018), vol.26:201.

省略形 政党名(英語) 政党名(日本語)
LDP Liberal Democratic Party 自民党
Komeito Komeito 公明党
DPJ Democratic Party of Japan 民主党
JIP Japan Innovation Party 維新の会
PFG Party for Future Generations 日本未来の党
PLP People’s Life Party 国民の生活が第一
SDP Social Democratic Party 社民党
JCP Japan Communist Party 共産党
  • Figure 1 の左側には各政党の「水準」が政策ごと(=政党ごと)に表示されている
    → 図の「●」が推定された「平均因果効果: AMCE」
    → その水準(=要素)が平均的にどのくらい選ばれやすいかを示す係数値

  • 図の x 軸には「自民党と比較した時の平均因果効果の差」がパーセンテージポイント (% points) で示されている

  • 自民党の位置は 0 であり横線が付いていない「●」で示されている

  • 自民党が効果の参照ライン (Baseline)

  • この Baseline を基準とする場合の他の「水準」の係数を確認する

  • 「●」の左右に伸びた横軸は 95% 信頼区間 (cluster-robust 95% confidence intervals)
    → それぞれの結果がどのくらいの誤差を伴っているかがわかる

  • それぞれの横棒の左限もしくは右限が、実線で示す縦軸上の 0 値とかぶっていなければ、その要素は、ワクチン接種の意向に対して、偶然ではなく「意味がある」(統計的に有意)と解釈できる

  • 解釈の一例:消費税に関して

  • 自公の主張:「⑤2017年4月に10%にし、軽減税率を導入」
    → これが Baseline

  • DPJ, JIP, PLP の係数が 4.7
    自民党の場合と比較すると、DPJ, JIP, PLP が主張する政策の方が回答者に選択される確率が 4.7% ポイント高い(5 %で統計的に有意)

  • 自公の主張と比べたときに、各政党の主張がもし好まれていれば、その ● は 0 の実線より右側 (+の方向)、逆に拒否されている場合は 0 の実線より左側 (− の方向)に示される

3.3 このコンジョイント分析で分かったこと

  • 推定された AMCEs の係数にプラスが多い
    → Baseline である自民党の政策はそれほど人気がないことを示唆
  • 5% で統計的に有意な政策位置は 11 個ある
    → 11 個中 9 個は自民党の政策位置よりも人気がある

消費税に関して

  • 自公の主張:「⑤2017年4月に10%にし、軽減税率を導入」— Baseline
  • 自民党と比較すると、日本未来の党 (PFG) が主張する政策が 1.8%ポイント選ばれる確率が高い傾向あり(しかし 5 %で有意ではない)
  • 日本未来の党の主張:「②当面は延期するが、一定の改革実現後速やかに実施」
  • 民主党・維新の党・国民の生活が第一の政策:「期限を決めずに延期」
    → 4.7%ポイント選ばれる確率が高い
  • 社民党・共産党の政策: 「中止・税率引き下げ」
    → 4.7%ポイント選ばれる確率が高い

原発に関して

  • 自公の主張:「①安全基準に合格すれば認める」— Baseline
  • 民主・維新の党の主張「②責任ある逃避計画など厳しい条件で容認」
    → 3.3%ポイント高い
  • 国民の生活・社民・共産の主張「③再稼働を認めない」
    → 4.9%ポイント高い

TPP に関して

  • 自公の主張:「②TPPへの参加反対」— Baseline
  • 維新・未来の主張:「①参加するが自由化には慎重」ポイント低い
  • 国民・社民・共産の主張:「③参加して積極的に自由化を推進」 ポイント低い

雇用政策・成長戦略・金融財政政策に関して

  • 成長戦略:
  • 自民の主張:「①農業・医療など岩盤規制を打破」 — Baseline
  • 自公とさほど大きな差はない
  • 民主・生活・共産・社民の主張:「②雇用政策や子育て支援などによる所得増で消費拡大」   → 3.0%ポイント選ばれる確率が高い
    → 「2014年衆院選はアベノミクスの是非を問う争点選挙」という主張と矛盾

憲法改正に関して

  • 自民の主張:「①憲法改正に賛成。国民の手による新しい憲法を制定」— Baseline
  • 公明・国民の主張:「②現行憲法の基本原理を維持した上で必要な条文を追加」0.04%ポイント選ばれる確率が高い
  • 社民・共産の主張:「③現行憲法条文のいかなる変更にも反対。平和憲法を守る」→ 自民と違いはない

議員定数削減に関して

  • 自民党の主張と比較すると、民主・未来・生活の主張が高く評価  
  • 社民・共産の主張は評価されず  

4. 実験結果分析の再現

  • ここでは、Horiuchi et al. (2018) が行った実験を、一般公開されている調査結果データ (japan2014conjoit) を使って再現する
  • 著者によるデータの詳細な解説はこちら

4.1 データの読み込みとデータ構造の確認

  • データセットを読み込む
  • japan2014conjoitcjoint パッケージに内包されているので、最初にパッケージをロードする
library(cjoint)
data("japan2014conjoint")
  • 分析に必要なデータだけに絞る
japan2014 <- japan2014conjoint %>% 
    select(!c(contains("rowpos"))) %>% # "rowpos"という不要な語句を含む変数を削除
    select(-c(wgt)) %>%                # wgtを削除  
    select(-c(respondent))             # respondent を削除  
names(japan2014)
 [1] "task"                             "profile"                         
 [3] "selected"                         "TPP"                             
 [5] "Nuclear power"                    "Constitutional revision"         
 [7] "Economic growth strategy"         "Consumption tax"                 
 [9] "National assembly seat reduction" "Monetary and fiscal policy"      
[11] "Collective self-defense"          "Employment"                      
[13] "respondentIndex"                 
  • 残された 13 の変数の内訳は次のとおり
変数名 説明
task タスク番号: 1 - 5(1 回のタスクで profile 1 と profile 2 を比較)
profile profile 番号: 1 or 2(1 回のタスクで 1 と 2 が同時に提示される)
selected 回答者が候補者 (profile 1 or 2) を選ぶ = 1、選ばない = 0
Consumption tax 「消費税」に関する回答
Employment 「雇用」に関する回答
Monetary and fiscal policy 「金融政策」に関する回答
Economic growth strategy 「経済成長」に関する回答
Nuclear power 「原発」に関する回答
TPP 「TPP」に関する回答
Collective self-defense 「集団的安全保障」に関する回答
Constitutional revision 「憲法改正」に関する回答
National assembly seat reduction 「衆議院議員定数」に関する回答
respondentIndex 世論調査会社が回答者に付けた数値 ID: 1-2091
  • 回答者は 2091人 (respondentindex を確認すること)
  • 回答者1人あたりがする仕事回数(つまり、task) は 5 回
  • 回答者1人あたり、一回の task で プロファイル 1 とプロファイル 2 を比較
  • どちらか一方を選ぶ
  • 例えば、responseindex = 1 の回答者がどのような task をしたかチェックしてみる
  • 変数respondentindexの右上にある△をクリックして「1」を表示させる
  • 「1」が10個、「2」が10個、……、「2091」が 10個ある
  • 2091人の回答者はひとりあたり 10 個のプロファイルを比較したという意味
  • 1 回の task で 2 個のプロファイルを比較し、これを 5 回(5 task)実行
  • 回答者1人あたり 10 個のプロファイルを比較したことになる
  • 回答者は 2091人いる → N = 2091 x 10 = 20910 程度
  • responseindex = 1 の回答者は1回目の task で profile 1 と profile 2 を提示され
  • task = 1, profile = 1 では selected = 0
  • task = 1, profile = 2 では selected = 1
    → responseindex = 1 の回答者は1回目の task で profile 2 を選んだという意味
  • 下のデータテーブルでこのことを確認すること
DT::datatable(japan2014)

4.2. コンジョイント分析

水準のベースラインの作成

attr_list <- list()             
attr_list[["Consumption tax"]] <- c("中止・税率引き下げ", 
              "当面は延期するが、一定の<br>改革実現後速やかに実施", 
                             "期限を決めずに延期",
                             "2017年4月に10%にし、<br>軽減税率を導入")

attr_list[["Employment"]] <- c("年功序列を撤廃して<br>労働市場の流動化を促す", 
                             "多様な働き方を認め、正規・<br>非正規を問わず雇用を拡大", 
                             "派遣法改正など労働規制緩和に<br>反対。正規雇用を維持")

attr_list[["Monetary and fiscal policy"]] <- c("大胆な金融緩和と機動的な<br>財政出動によりデフレ脱却",
                        "格差拡大をもたらす<br>金融財政政策に反対",
                        "過度の金融緩和や円安、<br>公共事業のバラマキを是正")

attr_list[["Economic growth strategy"]] <- c("農業・医療など<br>岩盤規制を打破",
                                             "雇用政策や子育て支援などに<br>よる所得増で消費拡大", 
                                             "地方産業・中小企業の<br>活性化による成長実現") 

attr_list[["Nuclear power"]] <- c("安全基準に合格すれば<br>認める",
                                  "責任ある逃避計画など<br>厳しい条件で容認",
                                  "再稼働を認めない")

attr_list[["TPP"]] <- c("参加するが自由化には慎重", 
                        "TPPへの参加反対",  
                        "参加して積極的に自由化を推進")

attr_list[["Collective self-defense"]] <- c("閣議決定のみに基づく行使の<br>容認には反対",
                                            "行使を認めない",
                                            "行使を容認し、関連法を整備")

attr_list[["Constitutional revision"]] <- c("憲法改正に賛成。国民の手による<br>新しい憲法を制定",
                                            "現行憲法の基本原理を維持した上で<br>必要な条文を追加",
                                            "現行憲法条文のいかなる変更にも<br>反対。平和憲法を守る")

attr_list[["National assembly seat reduction"]] <- c("選挙制度調査会の答申を尊重し、<br>よりよい選挙制度改革に取り組む",
                        "議員定数を大幅に削減する",
                        "議員定数削減を実現する",
                        "比例区の定数削減には反対") 

cjoint_design <- makeDesign(type = "constraints",
                            attribute.levels = attr_list)

AMCEの推定

# 変数名に半角スペースなどが入っている場合は "" で囲む
cjoint_pool <- amce(selected ~ `Consumption tax` + 
                       Employment +
                      `Monetary and fiscal policy` + 
                      `Economic growth strategy` +
                      `Nuclear power`  +
                      TPP + 
                      `Collective self-defense` + 
                       
                      `Constitutional revision` +
                      `National assembly seat reduction`,
                    data = japan2014,
                    respondent.id = "respondentIndex",
                    cluster = TRUE,
                    design = cjoint_design)

AMCEのプロット

plot(cjoint_pool, font.family = "HiraKakuProN-W3")

  • 分析はできたが、結果が見にくい
    → データクリーニングして結果がみやすくなるよう修正してみる

4.3 修正分析

4.3.1 データの準備

  • 分析につかう変数を絞る
df_1 <- japan2014 %>% 
  select(selected, 
         respondentIndex,
         `Consumption tax`,
         TPP,
         `Constitutional revision`,
         `National assembly seat reduction`)
  • 回答の選択肢をわかりやすく・短く変更
  • 変数名を変更
head(df_1)
  selected respondentIndex                                    Consumption tax
1        0               1                                 中止・税率引き下げ
2        1               1 当面は延期するが、一定の<br>改革実現後速やかに実施
3        0               1                                 中止・税率引き下げ
4        1               1 当面は延期するが、一定の<br>改革実現後速やかに実施
5        1               1                                 期限を決めずに延期
6        0               1                                 中止・税率引き下げ
                       TPP
1 参加するが自由化には慎重
2 参加するが自由化には慎重
3       TPPへの参加反対
4 参加するが自由化には慎重
5       TPPへの参加反対
6       TPPへの参加反対
                                 Constitutional revision
1     憲法改正に賛成。国民の手による<br>新しい憲法を制定
2   現行憲法の基本原理を維持した上で<br>必要な条文を追加
3     憲法改正に賛成。国民の手による<br>新しい憲法を制定
4   現行憲法の基本原理を維持した上で<br>必要な条文を追加
5     憲法改正に賛成。国民の手による<br>新しい憲法を制定
6 現行憲法条文のいかなる変更にも<br>反対。平和憲法を守る
                                  National assembly seat reduction
1 選挙制度調査会の答申を尊重し、<br>よりよい選挙制度改革に取り組む
2 選挙制度調査会の答申を尊重し、<br>よりよい選挙制度改革に取り組む
3                                         議員定数を大幅に削減する
4                                         議員定数を大幅に削減する
5 選挙制度調査会の答申を尊重し、<br>よりよい選挙制度改革に取り組む
6                                         議員定数を大幅に削減する
修正前の変数名 修正後の変数名
Consumption tax tax
Constitutional revision constitution
TPP tpp
National assembly seat reduction hr

Consumption tax => tax

df_1 <- df_1 %>% 
    mutate(
        tax = case_when(       # "修正前の表示" ~ "修正後の表示"
            `Consumption tax` == "中止・税率引き下げ" ~ "中止・引き下げ",
            `Consumption tax` == "当面は延期するが、一定の<br>改革実現後速やかに実施" ~ "当面延期",
            `Consumption tax` == "失業手当の拡充" ~ "失業手当拡充",
            `Consumption tax` == "期限を決めずに延期" ~ "無期限延期",
            `Consumption tax` == "2017年4月に10%にし、<br>軽減税率を導入" ~ "10%"
        )
    )

Constitutional revision => constitution

df_1 <- df_1 %>% 
    mutate(
        constitution = case_when(       # "修正前の表示" ~ "修正後の表示"
            `Constitutional revision` == "憲法改正に賛成。国民の手による<br>新しい憲法を制定" ~ "改憲",
            `Constitutional revision` == "現行憲法の基本原理を維持した上で<br>必要な条文を追加" ~ "条文追加",
            `Constitutional revision` == "現行憲法条文のいかなる変更にも<br>反対。平和憲法を守る" ~ "護憲"
        )
    )

TPP => tpp

df_1 <- df_1 %>% 
    mutate(
        tpp = case_when(       # "修正前の表示" ~ "修正後の表示"
            `TPP` == "参加するが自由化には慎重" ~ "自由化に慎重",
            `TPP` == "TPPへの参加反対" ~ "TPP反対",
            `TPP` == "参加して積極的に自由化を推進" ~ "TPP賛成"
        )
    )

National assembly seat reduction => hr

df_1 <- df_1 %>% 
    mutate(
         hr = case_when(       # "修正前の表示" ~ "修正後の表示"
            `National assembly seat reduction` == "選挙制度調査会の答申を尊重し、<br>よりよい選挙制度改革に取り組む" ~ "より良く",
            `National assembly seat reduction` == "議員定数を大幅に削減する" ~ "大幅削減する",
            `National assembly seat reduction` == "議員定数削減を実現する" ~ "大幅削減実現",
            `National assembly seat reduction` == "比例区の定数削減には反対" ~ "削減に反対"
        )
    )
df_1 <- df_1 %>% 
  select(selected,
         respondentIndex,
         tax,
         constitution,
         tpp,  
         hr)
  • 変数のデータ型をチェック
str(df_1)
'data.frame':   19220 obs. of  6 variables:
 $ selected       : int  0 1 0 1 1 0 1 0 1 0 ...
 $ respondentIndex: int  1 1 1 1 1 1 1 1 1 1 ...
 $ tax            : chr  "中止・引き下げ" "当面延期" "中止・引き下げ" "当面延期" ...
 $ constitution   : chr  "改憲" "条文追加" "改憲" "条文追加" ...
 $ tpp            : chr  "自由化に慎重" "自由化に慎重" "TPP反対" "自由化に慎重" ...
 $ hr             : chr  "より良く" "より良く" "大幅削減する" "大幅削減する" ...
  • characterfactor に変換する
df_1$tax <- as.factor(df_1$tax)
df_1$constitution <- as.factor(df_1$constitution)
df_1$tpp <- as.factor(df_1$tpp)
df_1$hr <- as.factor(df_1$hr)
  • データセットの確認
DT::datatable(df_1)

4.3.2 水準のベースラインの作成

attr_list <- list()
attr_list[["tax"]] <- c("中止・引き下げ", 
                             "当面延期", 
                             "失業手当拡充",
                             "無期限延期",
                             "10%")

attr_list[["constitution"]] <- c("改憲", 
                             "条文追加", 
                             "護憲")

attr_list[["tpp"]] <- c("自由化に慎重",
                        "TPP反対",
                        "TPP賛成")

attr_list[["hr"]] <- c("より良く",
                       "大幅削減する", 
                       "大幅削減実現",
                       "削減に反対") 

4.3.3 ベースラインを指定する

  • 自分が知りたい内容次第で基準となる「ベースライン」を自由に決める
  • 例えば constitution では「条文追加」をベースラインに指定する
  • これは「現行憲法の基本原理を維持した上で必要な条文を追加」という回答
  • この選択肢と比較して、他の選択肢がどの程度回答者に選ばれるかということを確かめることができる
Baseline <- list()
Baseline[["tax"]] <- "10%"
Baseline[["constitution"]] <- "条文追加"
Baseline[["tpp"]] <- "TPP賛成"
Baseline[["hr"]] <- "より良く"

4.3.4 デザインリストを作成する

cjoint_design_2 <- makeDesign(type = "constraints",
                            attribute.levels = attr_list)

4.3.5 AMCEの推定

cjoint_2 <- amce(selected ~ tax +
                      tpp + 
                      constitution +
                      hr,
                      data = df_1,
                      respondent.id = "respondentIndex",
                      cluster = TRUE,
                      design = cjoint_design_2, 
                      baseline = Baseline)

AMCEの推定結果を表示

summary(cjoint_2)
------------------------------------------
Average Marginal Component Effects (AMCE):
------------------------------------------
    Attribute          Level   Estimate  Std. Err  z value   Pr(>|z|)    
 constitution           改憲 -0.0395439 0.0089148 -4.43575 9.1754e-06 ***
 constitution           護憲 -0.0406414 0.0091926 -4.42108 9.8210e-06 ***
           hr     削減に反対 -0.0499065 0.0102737 -4.85771 1.1875e-06 ***
           hr   大幅削減する  0.0572216 0.0100854  5.67368 1.3976e-08 ***
           hr   大幅削減実現  0.0416608 0.0105301  3.95633 7.6109e-05 ***
          tax 中止・引き下げ  0.0426873 0.0114872  3.71607 2.0234e-04 ***
          tax       当面延期  0.0255412 0.0106702  2.39370 1.6680e-02   *
          tax     無期限延期  0.0425645 0.0110228  3.86149 1.1270e-04 ***
          tpp        TPP反対 -0.0313240 0.0094158 -3.32676 8.7863e-04 ***
          tpp   自由化に慎重  0.0022399 0.0088728  0.25245 8.0069e-01    
---
Number of Obs. = 19220
---
Number of Respondents = 1922
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05

--------------------
AMCE Baseline Levels:
--------------------
    Attribute    Level
 constitution 条文追加
           hr より良く
          tax      10%
          tpp  TPP賛成

AMCEのプロット

plot(cjoint_2, font.family = "HiraKakuProN-W3")

4.3.6 結果の解釈

憲法改正に関して

  • ベースライン:「現行憲法の基本原理を維持した上で必要な条文を追加」
  • 「条文追加」と比較すると「条文追加」の主張は約 0.04%ポイント選ばれる確率が低い
  • 「条文追加」と比較すると「条文追加」の主張は約 0.04%ポイント選ばれる確率が低い
    → 「改憲」と「護憲」の主張とは選ばれる確率において差がなくてどちらも選ばれない  

議員定数削減に関して

  • ベースライン:「より良く」
  • 「より良く」と比較すると「削減に反対」の主張は0.05%ポイント選ばれる確率が低い
  • 「より良く」と比較すると「大幅削減する」の主張は0.06%ポイント選ばれる確率が高い  
消費税に関して
  • ベースライン:「2017年4月に10%にし、軽減税率を導入」
  • 「10%」と比較すると「中止・引き下げ」の主張は0.04%ポイント選ばれる確率が高い
  • 「10%」と比較すると「無期限延期」の主張は0.04%ポイント選ばれる確率が高い  

TPP に関して

  • ベースライン:「TPP への参加賛成」
  • 「TPP への参加賛成」と比較すると「TPP 反対」の主張は0.03%ポイント選ばれる確率が低い
  • 「TPP への参加賛成」と「自由化に慎重」の主張とは選ばれる確率において差がない  

5. 今後検討されるべき課題

  • 方法論上、コンジョイント分析は「現在進行形」の分析手法
    → いくつかの点で方法論上の分析手法に関して統一見解が得られていない
  • コンジョイント分析に関して、今後検討されるべき事は次の 4 つにまとめることができる

5.1 分析に必要な「十分な」観測数とは?

  • コンジョイント実験では、複数の属性と水準を組み合わせる
    → フレーム実験より多くの観測数を必要とする
  • コンジョイント実験では、大量の観測数を推定の際に必要
  • 「観測数」は次の三つの要因の「積」である   
  1. 回答者数
  2. 繰り返し回数
  3. プロファイル数
  • 例えば、次のような場合の観測数 = \(1000・2・2=4000\)
  1. 回答者数: 1000人
  2. 繰り返し回数: 2回
  3. プロファイル数: 2個
  • 観測数 4000 という数字は、従来の意識調査からすると大きいな数字
  • コンジョイント分析においては、水準数が多すぎると、膨大な観測数が必要になることが起こりうる
  • コンジョイント分析においては、提示するプロファイル数や属性の水準の数によって「十分な観測数」が異なる

5.2 実験の繰り返しの回数の上限は?

  • 十分なサンプルサイズが確保できるなら、実験を繰り返す必要はない
    → 十分な数の回答者を確保できない場合
    → 実験を繰り返す必要がある
  • しかし、あまりにも多く実験を繰り返す 
    → 回答者が調査から脱落する可能性あり
    → 回答者が調査から不適切な回答をする可能性あり
    → 推定結果を歪める可能性

繰り返し回数と効果の大きさの関係

  • シミュレーションの結果 (宋・善教 2016)
    → 繰り返し回数が 2, 3, 4 回程度であれば推定結果が歪む傾向はない

  • 関心のある水準ではなくすべての水準が500回以上出現するという基準を満たす限り、大きな問題にはならない

繰り返し数と回答者のDrop率の関係

  • コンジョイント実験では類似の実験を複数回繰り返す
    → 複数の属性からなるプロファイルを比較することにくわえて, その作業をさらに複数回繰り返す
    → 実験の後半になるほど、回答を途中で諦める誘因が生じる
  • シミュレーションの結果 (宋・善教 2016)
  • 実験後半になるほど Drop 率は高くなるが、繰り返し回数の増加が Drop 率に与える影響は小さい
  • 後半のタスクになるほど、平均回答時間が短くなる
  • しかし、繰り返し回数の増加するにつれて係数の歪みはほとんどなく脱落者も少ない
    → 回答者は実験が繰り返されるにつれて、徐々に提示される属性や水準について学習している可能性
    → しかしそれは satisficer の増加を意味するわけではない
  • どのような属性が出現するのか、またどのような水準の違いに注目するのかなどを学習している
    → 2 回目以降の回答時間が短くなると考えるのが妥当
まとめ ・実験の繰り返し回数を多くすることは, 少なくとも 5 回程度までは問題はない
・繰り返し回数の増加による回答者の脱落は少ない
・回答者は実験が繰り返されるにしたがって慣れていくが, それは回答者が satisficer になることを意味しない
・ただし多い繰り返し回数 (10回、20回)だと何らかの問題が生じる可能性あり
・FSE では繰り返し回数の上限は10回程度とされている(Auspurg et al. 2015) (出典:宋・善教 2016, PP.98-101.)

5.3 選択肢の数(測定尺度の妥当性)

  • コンジョイント実験の従属変数の種類
  1. 二項選択型・・・「A か B か」という 2 択
  2. 4 件順序型・・・「どちらとも言えない」など曖昧な選択肢を含む
  • 二項選択型も4 件順序型も、全体的な傾向はほとんど変わらない
  • 推定値の有意確率が異なることのあるが、効果の差は誤差の範囲を超えない
    → 選択肢の違いが劇的な結果の差を生じさせるとはいえない
  • 全体の傾向として、 二項選択型の方が 4 件順序型よりも効果の 推定値が大きい傾向あり
  • なぜ 4 件順序型にすると推定値が小さくなるのかは不明
    → 曖昧な選択肢を設けることのバイアスの問題や(善教 2015)を考慮すると、二項選択型の方が現時点では望ましい

5.4 satisficer の問題

  • 意識調査には自己の「効用」を最大化しようとする satisficer が存在する
  • コンジョイント実験は、回答者の認知負荷が従来の意識調査よりは高い
  • 適切ではない回答をする satisficer が出てくる可能性が高い
  • satisficer の識別法:

(1) 回答時間による識別方法

  • 回答時間が短い回答者をsatisficer とみなす
  • ここでの問題:satisficer と非 satisficer を識別する「閾値」をどこに設定するかという問題が残る

(2) 「この項目では「・・・」を選択してください」という設問を追加する識別法

  • 質問内容にかかわらず、特定の選択肢を選ぶことをお願いすることで、回答者がしっかり問題文を読んで回答しているかどうか確認できる

  • satisficer に関する実験結果 (宋・善教 2016)

  • satisficer か否か(satisficer=1, 非 satisficer=0)を従属変数, コンジョイント実験(繰り返し 2 回)の回答 時間を独立変数とするロジット推定

  • 回答時間が短くなるほど, satisficer である確率が高くなるという推定結果  

  • satisficer として識別される予測確率が50%を超える回答時間:

  1. 1 回目の実験における回答時間・・・6.11秒
  2. 2 回目の実験における回答時間・・・3.99秒
  • satisficer として識別される予測確率が60%を超える回答時間:
  1. 1 回目の実験における回答時間・・・4.08秒
  2. 2 回目の実験における回答時間・・・2.79秒

→ しかし「回答時間が・・秒以下の回答者は satisficer だ」とは断言できない

まとめ ・satisficer による推定値の歪みはほとんど生じないし、誤差も大きくなるわけではない
・ただし satisficer が増えることで推定結果の信頼性が低下してしまう可能性はある (出典:宋・善教 2016, PP.98-101.)
参考文献