岡本@金沢大学文学部です。 南風原さんは、さきに、分散分析における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; ==========================
ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。