4 主成分分析と因子分析1
0)使われるコンテクスト |
0)使われるコンテクスト
・変数の集約。
多くの変数があるとき、類似した振る舞いをする変数をまとめる。
・相関のない変数の抽出。
変数間に相関があるとき、相関のない新しい変数を見つけることができれば回帰分析の時に有用。
回帰分析の例
#まずは普通に回帰分析 #log(nofdl)を従属変数、上の変数群(行列aに格納)を従属変数とした回帰分析 result<-lm(log(ossdata$nofdl)~ossdata$nrelease+ossdata$npcntb+ossdata$ncntb+ossdata$nmsgfr+ossdata$npml+ossdata$nmsgml+ossdata$npfrq+ossdata$nmsgfrq+ossdata$npbug+ossdata$nmsgbug) summary(result) #Coefficients: # Estimate Std. Error t value Pr(>|t|) #(Intercept) 5.621e+00 2.932e-01 19.173 < 2e-16 *** #ossdata$nrelease 6.976e-02 1.432e-02 4.871 5.17e-06 *** #ossdata$npcntb 1.259e-01 5.614e-02 2.242 0.0276 * #ossdata$ncntb 5.847e-05 1.018e-04 0.574 0.5673 #ossdata$nmsgfr 1.438e-03 1.837e-03 0.783 0.4359 #ossdata$npml 1.575e-02 8.052e-03 1.956 0.0538 . #ossdata$nmsgml -7.186e-04 5.449e-04 -1.319 0.1909 #ossdata$npfrq 2.554e-01 1.845e-01 1.384 0.1700 #ossdata$nmsgfrq -2.780e-02 4.972e-02 -0.559 0.5775 #ossdata$npbug 2.375e-02 2.981e-02 0.797 0.4279 #ossdata$nmsgbug -1.007e-02 7.799e-03 -1.291 0.2002 #Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 #Residual standard error: 1.601 on 84 degrees of freedom #Multiple R-Squared: 0.5008, Adjusted R-squared: 0.4413 #F-statistic: 8.426 on 10 and 84 DF, p-value: 2.405e-09 #npmlとnmsgmlの係数、npfrq、nmsgfrqの係数などをどう解釈? #参考)多重共線性の判定のため条件数を算出 #説明変数間の相関行列を作成し、その固有値を計算。 cr<-cor(a) cr ev<-eigen(cr) ev #条件数の計算 cn<-sqrt(abs(max(ev$values)/min(ev$values))) cn |
a<-data.frame(ossdata$nrelease,ossdata$npcntb,ossdata$ncntb,ossdata$nmsgfr,ossdata$npml,ossdata$nmsgml,ossdata$npfrq,ossdata$nmsgfrq,ossdata$npbug,ossdata$nmsgbug) cor(a) ossdata.nrelease ossdata.npcntb ossdata.ncntb ossdata.nmsgfr ossdata.npml ossdata.nrelease 1.00000000 0.01493146 0.02276606 0.154460299 0.1389913 ossdata.npcntb 0.01493146 1.00000000 0.86591054 0.064719054 0.5438346 ossdata.ncntb 0.02276606 0.86591054 1.00000000 0.108622709 0.5606790 ossdata.nmsgfr 0.15446030 0.06471905 0.10862271 1.000000000 0.1924539 ossdata.npml 0.13899125 0.54383464 0.56067905 0.192453949 1.0000000 ossdata.nmsgml 0.04690382 0.60804159 0.64350831 0.184122232 0.8358384 ossdata.npfrq 0.03018828 0.43607385 0.41840919 0.136345152 0.1978897 ossdata.nmsgfrq -0.01492542 0.26010178 0.23981700 0.141329648 0.1629656 ossdata.npbug 0.02401811 0.66451509 0.75262715 0.008867001 0.2541092 ossdata.nmsgbug 0.01626299 0.69161505 0.77812176 0.017850449 0.2418050 ossdata.nmsgml ossdata.npfrq ossdata.nmsgfrq ossdata.npbug ossdata.nmsgbug ossdata.nrelease 0.04690382 0.03018828 -0.01492542 0.024018112 0.01626299 ossdata.npcntb 0.60804159 0.43607385 0.26010178 0.664515093 0.69161505 ossdata.ncntb 0.64350831 0.41840919 0.23981700 0.752627154 0.77812176 ossdata.nmsgfr 0.18412223 0.13634515 0.14132965 0.008867001 0.01785045 ossdata.npml 0.83583843 0.19788975 0.16296564 0.254109155 0.24180496 ossdata.nmsgml 1.00000000 0.01083356 -0.01337628 0.184729259 0.20711604 ossdata.npfrq 0.01083356 1.00000000 0.88403139 0.608049508 0.60976489 ossdata.nmsgfrq -0.01337628 0.88403139 1.00000000 0.316033985 0.32462168 ossdata.npbug 0.18472926 0.60804951 0.31603399 1.000000000 0.98272002 ossdata.nmsgbug 0.20711604 0.60976489 0.32462168 0.982720019 1.00000000 |
z1=l11 x1+l12 x2+......+l1p xp
z2=l21 x1+l22 x2+......+l2p xp
....
zp=lp1 x1+lp2 x2+......+lpp xp
zi:i番目の主成分 (i=1〜p)
lij:j番目の主成分についてのi番目の変数の重み
→主成分の数は変数の数と同じp個
・因子分析の考え方。
相関が高い変数というのは、同じ潜在変数(因子)から影響をうけているからだ。
→観測されているデータの背後にある潜在変数(因子f)をみつけよう。
潜在変数の例
知能、都市化の程度、消費への関与、消費への知識、などなど
x1=l11 f1+l12 f2+......+l1m fm+e1
x2=l21 f1+l22 f2+......+l1m fm+e2
....
xp=lp1 f1+lp2 f2+......+l1m fm+ep
m:因子の数
fi:i番目の因子(i=1〜m)
lij:因子負荷量 factor loading:変数と因子との共分散(変数が基準化されている場合には相関)を示す。
ei:i番目の変数独自の因子
→ 因子分析:xはすべての変数について共通の因子 fiおよび、各変数独自の因子eiによって説明される。
p > m とならないと意味がない。→観測される変数よりも少ない数の潜在変数(因子)が見いだされる。
図表 主成分分析と因子分析の比較
主成分分析 |
因子分析 |
|
目的 |
変数を総合化することが目的。 | 潜在変数(因子)を見いだすことが目的。 |
共通する特徴 |
変数の数よりも少ない数の主成分が見いだされる。 主成分は直交(異なる主成分の間の相関は0)。 右に同じ。 右に同じ。 |
変数の数よりも少ない数の因子が見いだされる。 因子は直交(異なる因子の間の相関は0)。 ただし、直交しない因子を見いだす方法もある。 統計的な検定の枠組みにのっていないので因子数の決定には恣意性が残る。 類似した変数をたくさんいれると、それらだけで因子が構成される。 |
定式化 | 単なる数学的モデル | 統計的なモデル |
特殊因子 | なし | あり |
回転 | なし |
あり →これによって解釈しやすくなる。 |
主成分、因子数の決定方法 |
(1)固有値の大きさ1より大きいもののみ。 (2)固有値の大きさが急に小さくなるところまで。 (3)累積寄与率がある程度の大きさ(例80%)になるまで。 |
(1)〜(3)は左に同じ。 (4)(マーケティングや社会学などの)理論によってあらかじめ決められた数。 |
princomp(データセット,scores=TRUE) 主成分分析を行う。 |
注) 1.多変量解析ライブラリmvaに入っているので、使う前には library(mva) を実行する。 2.変数間の単位が異なる場合には、scaleコマンドで変数を平均0、分散1に正規化しておく。 3.実行後のオブジェクトには下記が含まれる。 "sdev" "loadings" "center" "scale" "n.obs" "scores" "call" 特に重要なのは loadings 主成分の重み scores 主成分得点 scores=TRUEを指定すると計算される。 |
#下記の変数群について適用する |
#主成分得点 |
これを用いて回帰分析。相関0なので多重共線性の恐れはない。
図表 主成分を用いた回帰分析
|
res$sdev #出力されるのは各主成分の標準偏差 Standard deviations: Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.10 2.1087618 1.3677456 1.1316591 0.9852742 0.8743565 0.5332139 0.3709885 0.2784211 0.2178189 0.1195933 10 variables and 95 observations. #2乗(行列1*行列2 とすると各要素を掛けた行列を作成する) res$sdev*res$sdev cr<-cor(sa) ev<-eigen(cr) ev $values [1] 4.49418359 1.89062940 1.29427627 0.98109253 0.77263234 0.28734170 [7] 0.13909668 0.07834297 0.04794982 0.01445471 $vectors ossdata.nmsgbug ossdata.npbug ossdata.nmsgfrq ossdata.nrelease 0.02957197 -0.1048562 0.38449896 ossdata.npcntb 0.41369177 -0.1358796 -0.14043682 ossdata.ncntb 0.43152651 -0.1430610 -0.15912317 ossdata.nmsgfr 0.07756477 -0.1125054 0.60774052 ossdata.npml 0.28966653 -0.4355478 0.21442493 ossdata.nmsgml 0.27034692 -0.5439875 0.06904691 ossdata.npfrq 0.32203324 0.4385472 0.27957605 ossdata.nmsgfrq 0.23091539 0.4177147 0.42766336 ossdata.npbug 0.39797487 0.2087901 -0.25005115 ossdata.nmsgbug 0.40416299 0.2034485 -0.25187199 ossdata.npfrq ossdata.nmsgml ossdata.npml ossdata.nmsgfr ossdata.nrelease -0.82601000 0.37913413 -0.10287721 -0.05314712 ossdata.npcntb 0.01753186 0.00725614 -0.64705097 0.59136159 ossdata.ncntb -0.03995705 -0.08847983 -0.24489885 -0.50625933 ossdata.nmsgfr -0.05814508 -0.77757850 -0.01550944 0.05410972 ossdata.npml 0.18636606 0.26625361 0.54743296 0.37877326 ossdata.nmsgml 0.20686905 0.10780565 -0.02574199 -0.41443159 ossdata.npfrq 0.13369518 0.15718707 0.04686790 0.11461312 ossdata.nmsgfrq 0.32517311 0.27934527 -0.13541867 -0.23450045 ossdata.npbug -0.24137061 -0.16414565 0.36070150 0.03703304 ossdata.nmsgbug -0.23026912 -0.17762112 0.24400708 -0.05932697 ossdata.ncntb ossdata.npcntb ossdata.nrelease ossdata.nrelease -0.01896101 0.02185657 -0.003233981 ossdata.npcntb -0.05788029 0.13479523 -0.020247875 ossdata.ncntb 0.57264548 -0.33712149 -0.026931433 ossdata.nmsgfr 0.01353093 0.02447586 -0.004237083 ossdata.npml 0.35207735 -0.01292700 0.086674522 ossdata.nmsgml -0.62376544 0.07817823 -0.064765050 ossdata.npfrq -0.30560183 -0.68880157 0.007291558 ossdata.nmsgfrq 0.17211702 0.54949389 -0.025075664 ossdata.npbug -0.08923610 0.19621712 -0.687278902 ossdata.nmsgbug -0.15544391 0.21431595 0.717004240 #各固有値に対して固有ベクトルは±二つ定義される。符号はちがうが絶対値は同じコトに注意。 |
factanal(データセット,factors=因子数,rotation =回転方法,scores =因子得点の算出方法) 因子分析を行う。 |
注) 0.最尤法による因子分析を行う(ので因子数を指定する必要がある)。 1.多変量解析ライブラリmvaに入っているので、使う前には library(mva) を実行する。 2.変数間の単位が異なる場合には、scaleコマンドで変数を平均0、分散1に正規化しておく。 3.因子数を指定する必要がある。 事前に主成分分析を行い、固有値の大きさをみることによって決める。 例 1以上の固有値の数 4. 回転方法は none 指定しなければ varimax 5.実行後のオブジェクトには下記が含まれる。 "converged" "loadings" "uniquenesses" "correlation" "criteria" "factors" "dof" "method" "n.obs" "call" scores 特に重要なのは loadings 因子負荷量 scores 因子得点 |
図表 因子分析の実際
#因子分析 |
図表 因子分析の出力
#Uniquenesses: |
図表 回転と因子得点の算出
#因子の意味を解釈しやすくするためにvarimax回転という座標変換を行う。 |
図表 因子得点による回帰分析
res<-lm(log(ossdata$nofdl)~f$scores) |
図表 変数間の関係をみてみる
#データセットに含まれる変数すべてを組み合わせて散布図を作成 |
pairs(f$scores) |
1 ここでの定式化は以下の文献に依っている。
Johnson and Wichern(1992),Applied Multivariate Statistical Analysis 3rd ed.,Prentice Hall: NJ
回帰分析のモデル、y=βx+β0と同じ形であることに注意。
ただし、回帰分析の場合、y,xとも観測されるが主成分分析と因子分析についてはxしか観測されないことに注意。
2 ’は転置すること(ベクトルや行列の行と列を入れ替えること)を示す。
3 マーケティングにおける知覚マップを描く方法の一つに、ブランド別に消費者に属性評価させたデータを因子分析し、算出された因子得点をブランド別に平均し、因子をもちいたグラフにプロットする方法がある。