前回は主成分分析を説明した。この手法は、
p変量(p次元)の観測値をm個(m次元)の主成分に縮約させる方法であった。
この意味では、因子分析も同じような方法であるのだが、
主成分分析の場合は、
データの散らばり方を捉えてデータ特性を把握する手法である。
今回説明する因子分析は、変数間に(潜在的な)構造を持ち込んで関係を探る手法である。
この手法は心理学の分野で広く利用されている。
/* Lesson 10-1 */ /* File Name = fact01.sas 01/10/97 */ data food; : infile 'food.dat'; : ファイルの読み込み input X01-X10; : 変量リスト、連続的に label X01='M(-15)' : 各変量に解りやすい名前を付ける X02='M(16-20)' : M : 男性 X03='M(21-30)' : F : 女性 X04='M(31-40)' : ()内 : 年齢 X05='M(41-)' : X06='F(-15)' : X07='F(16-20)' : X08='F(21-30)' : X09='F(31-40)' : X10='F(41-)'; : : proc print data=food(obs=10); : データの表示 run; : proc factor data=food; : 因子分析 var X01-X10; : 解析に使う変量リスト run; :
/* Lesson 10-2 */ /* File Name = fact02.sas 01/10/97 */ data food; infile 'food.dat'; input X01-X10; label X01='M(-15)' X02='M(16-20)' X03='M(21-30)' X04='M(31-40)' X05='M(41-)' X06='F(-15)' X07='F(16-20)' X08='F(21-30)' X09='F(31-40)' X10='F(41-)'; proc print data=food(obs=10); run; : proc factor data=food nfactor=3 out=fscore; : 因子数3、出力の保存 var X01-X10; : run; : proc plot data=fscore; : plot factor1*factor2/vref=0.0 href=0.0; : 第1因子 x 第2因子、軸 plot factor2*factor3/vref=0.0 href=0.0; : 第2因子 x 第3因子、軸 run; :
/* Lesson 10-3 */ /* File Name = fact03.sas 01/10/97 */ data food; infile 'food.dat'; input X01-X10; label X01='M(-15)' X02='M(16-20)' X03='M(21-30)' X04='M(31-40)' X05='M(41-)' X06='F(-15)' X07='F(16-20)' X08='F(21-30)' X09='F(31-40)' X10='F(41-)'; proc print data=food(obs=10); run; proc factor data=food nfactor=3 rotate=varimax out=fscore2; var X01-X10; : 回転の指定 run; : proc plot data=fscore2; plot factor1*factor2/vref=0.0 href=0.0; plot factor2*factor3/vref=0.0 href=0.0; plot factor3*factor1/vref=0.0 href=0.0; run;
/* Lesson 10-4 */ /* File Name = fact04.sas 01/10/97 */ data hobby; infile 'syumi.dat'; input code $ X1-X6; label X1='M(-29)' X2='M(30-49)' X3='M(50-)' X4='F(-29)' X5='F(30-49)' X6='F(50-)'; proc print data=hobby(obs=10); run; proc factor data=hobby nfactor=2 out=fscore; var X1-X6; run; proc plot data=fscore; : 回転前 plot factor1*factor2=code/vref=0.0 href=0.0; : コード化した記号 run; : proc factor data=hobby nfactor=2 rotate=varimax out=fscore2; var X1-X6; run; proc plot data=fscore2; : 回転後 plot factor1*factor2=code/vref=0.0 href=0.0; : コード化した記号 run; :