岡本@金沢大学文学部です。
南風原さんは、さきに、分散分析におけるScale Typeの問題例を
示されました。データ値を逆数変換すると単調変換であるのに分析
結果が変わる、差が有意になったり非有意になったりするという
ものでした。
心理学でよく用いられる分析法として、分散分析の他に因子分析
があります。このモデルも、線形モデルですのでデータ値は間隔
尺度の水準でなければなりません。以下に、3乗による変換を
行った場合の影響をシミュレーションで調べたものを報告します。
3乗変換では、1より大きい値がより強調されます。
まず、次の直交2因子モデルでデータを生成します。
x1 = f1 + 0.1*e1
x2 = f1 + 0.1*e2
x3 = f1 + 0.1*e3
x4 = 0.7*f1 + 0.7*f2 + 0.1*e4
x5 = 0.7*f1 + 0.7*f2 + 0.1*e5
x6 = 0.7*f1 + 0.7*f2 + 0.1*e6
x7 = f2 + 0.1*e7
x8 = f2 + 0.1*e8
x9 = f2 + 0.1*e9
ここで、
f1、f2 : 2つの独立な因子
e1 〜 e9 : f1、f2と独立で、かつ、
互いに独立な因子(誤差)
因子は全て標準正規分布に従うものとします。
まず、上のモデルで1000個のデータを生成しました。
1000個のデータを生成するプログラムリストはこのメールの後ろに
リスト1として付けてあります。
このデータに主因子法(柳井ら「因子分析」,1990、3.1節)を
適用すると以下のようになります。
固有値...
1 5.83907
2 3.06593
3 0.00095
4 0.00076
5 0.00036
6 0.00017
7 -0.00040
8 -0.00090
9 -0.00093
Communality...
1 0.99020
2 0.98950
3 0.98890
4 0.98914
5 0.98907
6 0.98845
7 0.99010
8 0.99003
9 0.98962
Varimax回転後の因子パターン
因子1 因子2
x1 -0.00839 -0.99505
x2 -0.01040 -0.99468
x3 -0.01645 -0.99430
x4 0.71253 -0.69386
x5 0.71381 -0.69249
x6 0.71016 -0.69579
x7 0.99485 0.01937
x8 0.99469 0.02483
x9 0.99464 0.01784
因子1がf2、因子2が−f1に対応する解が得られています。
次に、x3、x6、x9の値を3乗したものに対して主因子法を
適用してみます。3乗することによって1より大きい値が
より強調されます。この3乗したものを含むデータを生成
するプログラムはこのメールの後ろにリスト2として付け
ました。
このデータに対する解は以下のようになりました。
固有値...
1 5.09912
2 2.65472
3 0.17740
4 0.02004
5 -0.00870
6 -0.01109
7 -0.01243
8 -0.01602
9 -0.14919
Communality...
1 0.98198
2 0.98035
3 0.63671 <<==
4 0.97238
5 0.97475
6 0.60845 <<==
7 0.97718
8 0.98033
9 0.64173 <<==
Varimax回転後の因子パターン
因子1 因子2
x1 -0.00461 0.99094
x2 -0.00241 0.99012
x3 -0.00092 0.79794 <<==
x4 -0.71692 0.67706
x5 -0.71853 0.67710
x6 -0.57230 0.53002 <<==
x7 -0.98792 -0.03470
x8 -0.98927 -0.04092
x9 -0.80095 0.01448 <<==
3乗変換が行われた変数のcommunalityの減少、因子パターン
における因子負荷量の減少が認められます。
因子分析の結果を解釈するとき、因子負荷量、communalityに
減少が認められる場合、Scale Typeのことも考慮する必要が
あるようです。
岡本安晴@金沢大学文学部
C00279 (at) simail.ne.jp
===============================
リスト1 1000個のデータを生成するプログラム
procedure TForm1.OKButtonClick(Sender: TObject);
const N = 1000;
type TArray = array[1..9] of Extended;
var f : TextFile;
i, j : Longint;
x : TArray;
procedure GenData( var x : TArray );
var f1, f2 : Extended;
begin
with NormalRN do
begin
f1 :=Normal;
f2 :=Normal;
x[1]:=f1+0.1*Normal;
x[2]:=f1+0.1*Normal;
x[3]:=f1+0.1*Normal;
x[4]:=0.7*f1+0.7*f2+0.1*Normal;
x[5]:=0.7*f1+0.7*f2+0.1*Normal;
x[6]:=0.7*f1+0.7*f2+0.1*Normal;
x[7]:=f2+0.1*Normal;
x[8]:=f2+0.1*Normal;
x[9]:=f2+0.1*Normal;
end;
end;
begin
NormalRN:=TNormalRN.Create;
NormalRN.Init;
OKButton.Enabled:=false;
MsgLabel.Caption:='Calculation Started';
UpDate;
Assignfile(f, OutFlNmEdit.Text);
Rewrite(f);
writeln(f,'*/');
writeln(f, ' 9');
for i:=1 to N do
begin
write(f, i:7,' ');
GenData( x );
for j:=1 to 9 do
write(f,' ',x[j]:10:5);
writeln(f);
end;
writeln(f, ' -1');
CloseFile(f);
MsgLabel.Caption:='Calculation Ended';
ExitButton.SetFocus;
NormalRN.Free;
end;
=============================
=============================
リスト2 3乗による強調がある変数を含むデータの生成
procedure TForm1.OKButtonClick(Sender: TObject);
const N = 1000;
type TArray = array[1..9] of Extended;
var f : TextFile;
i, j : Longint;
x : TArray;
procedure GenData( var x : TArray );
var f1, f2 : Extended;
function p3( a : Extended ) : Extended;
begin
p3 := a * sqr(a);
end;
begin
with NormalRN do
begin
f1 :=Normal;
f2 :=Normal;
x[1]:=f1+0.1*Normal;
x[2]:=f1+0.1*Normal;
x[3]:=p3(f1+0.1*Normal);
x[4]:=0.7*f1+0.7*f2+0.1*Normal;
x[5]:=0.7*f1+0.7*f2+0.1*Normal;
x[6]:=p3(0.7*f1+0.7*f2+0.1*Normal);
x[7]:=f2+0.1*Normal;
x[8]:=f2+0.1*Normal;
x[9]:=p3(f2+0.1*Normal);
end;
end;
begin
NormalRN:=TNormalRN.Create;
NormalRN.Init;
OKButton.Enabled:=false;
MsgLabel.Caption:='Calculation Started';
UpDate;
Assignfile(f, OutFlNmEdit.Text);
Rewrite(f);
writeln(f,'*/');
writeln(f, ' 9');
for i:=1 to N do
begin
write(f, i:7,' ');
GenData( x );
for j:=1 to 9 do
write(f,' ',x[j]:10:5);
writeln(f);
end;
writeln(f, ' -1');
CloseFile(f);
MsgLabel.Caption:='Calculation Ended';
ExitButton.SetFocus;
NormalRN.Free;
end;
==========================
ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。