読者です 読者をやめる 読者になる 読者になる

Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

大学の時にもっと勉強しておけばよかったマーケティング・リサーチ〜その6〜

マーケティング

大学の時にもっと勉強しておけばよかったマーケティング・リサーチの6話目です。仕事がバタバタしていたので、更新ができていませんでした。 さて、前回アナウンスした通り、これからは基本的にはデータの分析が中心的な話題となります。では市場構造分析からみていきましょう。

市場構造分析(Market Structure Analysis)

市場構造分析とは、以下のように定義されています。

消費者からみた製品間の競合関係を基礎とした市場における競争の構造に関する分析のこと。

つまりは、言葉の通り、製品の競合関係を調査し、代替性が高いサービスや商品の関係を洗い出す分析のことです。代替性を測る指標としては、一般的に「交差価格弾力性」「ブランドスイッチ」「ブランドイメージ類似性(知覚マップ)」などがあり、これらの指標を検討することで、代替関係を調査します。今回は、「ブランドイメージ類似性(知覚マップ)」を、その代表的な手法である「因子分析」に焦点をあてます。

因子分析(Factor Analysis)とは

因子分析とは、一言で言うと「変数間の背後に潜む共通概念を発見する手法」です。つまり、調査で観測される多くの変数を、「何らかの共通概念」でまとめて表現したい場合に使われる手法です。よく間違われる「主成分分析」とは異ならないようで異なります。主成分分析は変数の分散が最大になるように新しい軸を検討し、合成変数を作り出す手法です。 例えば、「サッカーのWorld Cup決勝は楽しかったですか?」という質問をした場合、人によって「何が」楽しかったのか異なりますよね。「観客として盛り上がれたからなのか」「スーパーゴールを観れたのか」「好きな選手を生でみれたからなのか」など、色々とあると思いますが、このようにいろんな観点から本来は評価され、最終的に「サッカーのWorld Cup決勝は楽しかった」と判断するほうが感覚的にも望ましいはずです。その際に、主成分分析を用いて「総合的に楽しさを評価」してくれる合成変数を作る手法こそが主成分分析なのです。 一方、因子分析は「観客として盛り上がれたからなのか」「スーパーゴールを観れたのか」「好きな選手を生でみれたからなのか」などなど、他にも多くの楽しさに関係する質問をした場合に、その「楽しさ」に関わる多くの変数の背後に潜んでいる、複数の共有概念をあぶり出す手法です。例えば、「スタジアムの盛り上がり」「世界最高峰のサッカー技術」などの因子を想定し、楽しさの背後にはどうような「楽しさ」が潜んでいるのかを検討するための手法といえます。 また、因子分析では因子の数を自分で設定します(平行分析など数学的に決める方法もあります。)。この点は数学的に主成分が決定される主成分分析とは異なる部分でもあります。そのため、この点を嫌って因子分析を使わない方もいます。 理由としては、分析者が誰であれ、主成分分析の場合は、主成分負荷量の数値は一意に定まりますが、因子分析では分析者に多くの裁量が与えられています。わりと主観的な分析手法なのです。そのため、客観性が重んじられる工学や医学などではあまり使われおらず、心理や社会学マーケティングの分野でよく使われています。これは因子分析が悪い手法という話ではありません。 ことマーケティングに限ると、物を売るためにのマーケティング戦略は、いくら機械学習人工知能などが発達したところで、完璧には予測できませんし、それ以上に人間という生き物の判断は曖昧あやふやです。しかし、マーケティングを実践していくためには、自分の思い描く仮説に沿ってプレゼンし、予算を獲得して実践していくほかありません。そのために、自分の仮説を支える根拠として、因子分析は有効な分析手法だと私は考えています。 さらに、小難しい話、主成分分析では、「繰り返しのない主因子法」を用いて、「共通性の初期値を1とする(独自性の考慮をしない)」として計算します。そして、主因子法は因子分析の因子抽出法の1つです。以下に主成分分析と因子分析のイメージの違いを表現しておきました。 %e5%9b%a0%e5%ad%90%e5%88%86%e6%9e%90%e3%81%a8%e4%b8%bb%e6%88%90%e5%88%86%e5%88%86%e6%9e%90

因子分析のモデル

基本的な因子分析のモデルは以下のようになります。観測された変数がY_1〜Y_5までの5つ。共通因子の数は2つを想定しています。f_iは「共通因子」であり、a_ijは「因子負荷量(Factor loadings)」です。因子は「共通因子」「共通第1因子」「因子」などいろいろな呼ばれ方をします。ここでは共通因子とよびます。そして、「共通因子」とは、変数の背後に潜んでいる因子のことで、「因子負荷量」とは、共通因子が観測された変数に与える影響力の大きさと言えます。 daum_equation_1484369497337 まとめて表現すると、因子分析(共通因子2つの場合)は、以下のように共通因子が2つで、各変数に対してのみ影響する独自因子εによって出来上がります。 daum_equation_1484369589885 そして、因子分析の望ましい形は、以下のような「単純構造」です。Y_1とY_2は因子f_1によって定まり、Y_3、Y_4、Y_5は因子f_2によって綺麗に分割された状態です。こうなることで、Y_1とY_2の背後には共有の因子f_1があり、Y_3、Y_4、Y_5の背後には因子f_2があると想定できるからです。 daum_equation_1484369520375

因子分析のコトバ

因子負荷量と寄与率

因子分析の目的はもちろん、潜在的な共通因子を見つけることにあります。そこで疑問になるのが、「うまく」共通因子が見つかるというのは、どういことなのでしょうか。それは「因子負荷量」をみることになりますし、因子負荷量が高いものがたくさんあればうまく共通因子が見つかったと言えます。そして各列ごとに因子負荷量を二乗和したものが「因子寄与」、その因子寄与を共通性+独自性の最大値16で割った値が「因子寄与率」となります。「基本的」に質問項目数=最大値になります。各質問に対して、各共通因子がどの程度影響を与えているのかをみるのが、「共通性」です。そして、モデルからもあきらかなように、1から共通性を引くことで、「独自性」が算出できます。 ※「基本的」には最大値は質問数となりますが、そうならない場合もあります。 %e5%9b%a0%e5%ad%90%e5%88%86%e6%9e%90%e3%81%ae%e8%a1%a8

因子得点

次に、因子得点について見ていきます。以下の図表を見ながら因子得点を考えてみます。天下り的な説明になります・・・・・。 %e5%9b%a0%e5%ad%90%e5%be%97%e7%82%b9-01 %e5%9b%a0%e5%ad%90%e5%be%97%e7%82%b9%e3%81%ae%e7%ae%97%e5%87%ba-01 質問001の実際の回答「4」というのは、「因子負荷量×得点」の列、Factor1の1.415、Factor2の1.501、独自因子の1.138というように分解されます。したがって、「1.415+1.501+1.138=4.053」となり、実際の回答である「4」に近い数値になっていることがわかります。また、「因子負荷量×得点」の列のFactor1の1.415という数値はFactor1の因子得点4.3に因子負荷量0.329を掛けた数値です。Factor2の1.501という数値はFactor2の因子得点3.6に因子負荷量0.417を掛けた数値です。 次に疑問として思い浮かぶのが「因子得点」の数値はどこからやってきたのでしょうか。そもそも、因子得点を求める話をしていたのに、因子得点を使って、各数値の関係性を検討するという話になりつつありますが、いったん因子得点については、こういう数値になると考えておいてください。 Factor1の因子得点というのは、そもそもその人が質問001をどの程度評価しているのかを示しています。ここでは、仮に4.3という因子得点を便宜上与えていますが、その人に対して 質問002をしたとしても、4.3という因子得点が影響を与える訳です。因子得点が、直接的に影響を与える訳ではなく、質問に応じて、共通因子と質問の関係性が因子負荷量によって調整されるのです。 最終的に因子得点はどう計算されるのでしょうか・・・因子得点は各回答者別に計算されます。なのでAさんは共通因子001は××点、共通因子002は××点、次にBさんは共通因子001は××点、共通因子002は××点・・・最後にZさんは共通因子001は××点、共通因子002は××点というような形です。忘れてはならないので、質問の回答は「共通因子」と「独自因子」に分解されます。そして、「共通因子」は「因子得点と因子負荷量の積」によって表されます。 となると、因子得点というのは、その因子得点の値と因子負荷量との積の合計が質問の回答値に近くなるように設定すればよい・・・ということになります。なので推定値として求めることになるのですが、その時には質問項目ごとに変化する独自因子をどう扱うかが問題になりますが、うまく回答値に合うように定めるとしか言いようがないので、その点はコンピューターにやってもらうことになります。いくつか代表的な計算方法を掲載します。

回帰法 推定因子得点と真の因子得点の誤差を小さくすることを目的とする手法。
Bartlett法 独自因子得点を最小化するように因子得点を推定する手法。
Anderson-Rubin法 独自因子得点を最小化するように因子得点を推定しつつ、推定因子得点を直交させる。

クロンバックのα

心理的傾向を測定する場合、心理的傾向を反映する複数の質問から5件法(心理尺度)などで回答させます。心理尺度には、「信頼性」「妥当性」という概念にわけることができます。「信頼性」は、測定結果の一貫性、安定性を、「妥当性」は、測りたいことが測れているのかということを意味します。クロンバックのαは、「信頼性」を測る信頼性係数で、心理尺度に使われた項目の回答にどの程度一貫性があるかを示します。α係数が0.8以上であれば一貫性があると見なされます。因子分析でいうと共通因子は複数の質問の背景に潜む変数である訳で、その変数をささえる各質問が、「尋ね方」は違えども、一貫している必要があるわけです。

因子分析の道具だて

使える尺度

因子分析で処理できるデータは厳密には「間隔/比率尺度」です。社会科学系では「順序尺度」が使われることもありますが、基本的にはNGですが、実際には、回答に対して数値と文字を割り当てて、上位の尺度のように扱うことあ多いです。例えば、質問「×××××はどう思いますか?」に対して、回答『5:「非常にそう思う」』などとして扱うのです。

質問内容と相関関係

因子分析の基本的な考えは「相関関係をもとに共通因子を検討する」分析手法です。なので、相関関係があまりない項目ばかりを集めていたところで、因子分析はうまくいきません。また、直線的な相関関係が望ましいと言えます。 では、どれだけの質問項目を用意し、どのような質問をすればよいのか。質問項目の数については、経験上、想定している因子の数の3~4倍を準備しておけば大丈夫かと思われます。そして、質問内容については、「一貫している物」であれば大丈夫です。例えばアンケートで数値をとることはもちろん、実験でデータをとって、そのデータたちを混在させて分析しても、根本が一貫していれば、問題はないと思います。

因子分析の計算手順

ステップ001:初期解の計算

とりあえず「初期解」を計算します。初期解をだすために「因子の抽出法」を決定し、計算をおこなます。

主因子法 第1因子から順番に因子の寄与率が最大になるように因子を抽出する方法
重み付けのない最小二乗法 元のデータと因子分析のモデルから算出される共分散行列の間の差を最小にする方法
重み付きの最小二乗法 重み付けのない最小二乗法を重み付けすることで、尺度の大きさに影響を受けないように、標準化する方法
最尤法 因子分析に関するパラメタから尤度を算出し、最大化する方法

因子の抽出法が決まれば、共通因子の数を決定します。基本的には、固有値をもとに「カイザーガットマン基準」か「スクリープロット基準」「平行分析」のどちらかで因子の数を決定します。

カイザーガットマン基準 固有値が1以上の因子を採用する方法
スクリープロット基準 固有値の大きさをプロットし、推移がなだらかになる「前」までの数を共通因子の数とする。つまり、4個目を関節として、なだらかになっているのであれば、因子数は3つとします。
平行分析 固有値の大きさをプロットし、推移がなだらかになる「前」までの数を共通因子の数とする。つまり、4個目を関節として、なだらかになっているのであれば、因子数は3つとします。

ステップ002:因子軸の回転

初期解のあとは軸の回転を行います。想定している共通因子を見つけ出すために、因子軸を回転させます。因子軸を回転させるとは、以下のようなイメージです。左は回転する前の図で、中はバリマックス回転後の図、右はプロマックス回転後の図です。こうすることで、うまく2軸で説明できるようになっています。この回転の方法もいくつかあり、代表的な物は2つ、直交回転させる「バリマックス回転」、軸を斜交回転させる「プロマックス回転」の2つがあります。 %e5%9b%9e%e8%bb%a2-01

リマックス回転 因子の構造が単純になるように回転させる方法です。名前の通りVariance Maximunなので、分散を最大にする方法で、複数の項目があった場合に特定の因子の負荷量を高くし、他の因子負荷量を小さくする回転方法。
プロマックス回転 ターゲット行列にバリマックス回転で得た負荷行列を用い、斜交プロクラステス回転を行う。因子負荷行列を3~4乗したものを利用。なぜ累乗の性質、高い負荷量は高いままで、小さい負荷量をより小さくすることを利用。累乗した負荷量行列を基準化し、斜交プロクラステス回転を行う回転方法。
直接オブリミオン回転 因子パターンを単純化するように回転する方法。
プロクラステス回転 ある因子負荷をもとに、その因子負荷に近くなるようにしていく回転。単純構造をした仮想ターゲット行列を設定し、それに合わせるように軸を回転する方法です。

ステップ003:因子の解釈

ここでは、想定している因子の解釈を行います。恣意的な判断になりますが、うまいこと共通因子が見つかりように、想定因子数の調整や因子軸の回転を行っていきます。では、何を基準に項目を削除すればいいのか・・・それは、大前提として因子分析は、何かを判断・分析する上での判断材料の1つでしかないので、想定している因子が見つからないのであれば、それはそれでいいと思います。 が、そもそも因子が見つからないのであれば、その質問と似たような質問が少ないことが原因かもしれませんし、そのような事前の不備を除いての話ではありますが。

ステップ004:因子得点の活用

最終的に見つかった共通因子を元に、因子ごとに平均値に差があるかどうかをみたり、重回帰分析の説明変数にしたりして、分析を行っていきます。

因子軸と相関

プロマックス回転を行うと「パターン行列」というものが出力されます。SPSSでは「パターン行列と因子相関行列」というものが出力され、Rでは「Factor Correlations」というものがしれっと出力されます。単純に斜行回転では因子負荷の表を「パターン行列」と呼びます。そして、バリマックス回転では出力されない「因子相関行列」とは何か、今から見ていきます。 「因子相関行列」とは、因子(軸)の相関関係を表したものです。つまりベクトルで相関関係を考えた場合、ベクトル同士が近づくにつれて、相関関係が強まり、ベクトルが直角であれば相関関係はないと、というものですね。つまり、直行回転は軸が直行しているので、因子相関行列は、そもそも相関関係がないので表示されません。これが因子相関行列が表示される理由です。 では、斜行回転における、因子相関行列はどのように解釈すればよいでしょうか。簡単にいうと共通因子の間に相関関係があるものは、似たような因子と解釈できますし、相関関係があまりない場合は別の内容の因子と解釈できます。 %e5%9b%a0%e5%ad%90%e7%9b%b8%e9%96%a2-02

Rでの実践

r データフレームを指定する
nfactors 共通因子の数を指定する
rotate none、varimax、promax、quartimax、equamax、obliminを選択できる
fm 初期解の算出法を指定。ml=最尤法、minres=最小2乗法など。
SS loadings 因子負荷
Proportion Var 寄与率
Cumulative Var 累積寄与率

rplot05 rplot rplot01

rplot03 rplot

rplot