Up

重回帰分析

Visual C++ プログラム

 

重回帰分析では、p個の変数の組で与えられるデータ、、・・・、、に対して次式

による関係を設定する。は互いに独立で、

である。なお、本ウェブサイトにおける式番号は、拙著「心理学データ分析と測定」におけるものである。

このモデルの下で、以下の式が計算される。

ここで、

である。は予測値の変動量(2乗和)を、はデータの変動量を表し、はデータの変動量に占める予測値の変動量の割合を表す。は多重決定係数(coefficient of multiple determination)と呼ばれている。

 の平方根

は、の相関係数に等しく、重相関係数(multiple correlation coefficient)と呼ばれている。

 

モデル(2.4.1)のもとで、の推定値は次式で表される分布に従う。

したがって、帰無仮説「」の検定は、

の値(統計量)が有意水準に対する棄却域

に入っているかどうかを調べることによって行うことができる。は、自由度のt分布に従う確率変数に対して

を満たす値である。

 

信頼区間は、次式で与えられる。

 

上の重回帰分析を行うプログラムMultipleRegression.exeを作成した。ファイル名MultipleRegression.exeをクリックして、ダウンロード実行することができる。実行時に「xxxxxx.dllがインストールされていません」というようなエラーメッセージが表示されるときは、Visual Studio Express 2013 for Windows Desktop

http://www.visualstudio.com/downloads/download-visual-studio-vs

からダウンロードインストールすれば、必要なファイルがインストールされてプログラムMultipleRegression.exeが実行できるようになる。

ソースコードファイルなどは圧縮ファイルMultipleRegression.zipにまとめたので、圧縮ファイル名MultipleRegression.zipをクリックしてダウンロード・解凍すれば、Visual Studio 2013で開くことができる。

プログラムを実行すると、図1のフォームが表示される。

図1

 

GO」ボタンのクリックで、入力データファイル名の設定を求めるダイアログウィンドウが表示される(図2)。

図2

 

入力データファイルは、表2.1.1(表番号は、拙著「心理学データ分析と測定」におけるものである)のデータの場合

2.1.1 (物理、数学、身長)の50人分のデータ

(53, 73, 167)   (65, 53, 152)   (54, 50, 145)

(59, 58, 153)   (58, 49, 176)   (51, 52, 148)

(52, 49, 159)   (63, 69, 153)   (64, 63, 158)

(75, 83, 161)   (66, 58, 171)   (59, 57, 154)

(75, 90, 172)   (65, 76, 167)   (70, 61, 160)

(62, 60, 152)   (58, 44, 166)   (79, 98, 160)

(65, 65, 161)   (63, 54, 161)   (60, 47, 173)

(64, 67, 165)   (67, 71, 168)   (52, 53, 165)

(60, 70, 162)   (63, 70, 171)   (69, 72, 173)

(57, 58, 159)   (58, 65, 165)   (51, 51, 157)

(60, 63, 163)   (50, 42, 151)   (52, 43, 177)

(67, 69, 149)   (59, 67, 167)   (44, 35, 168)

(79, 85, 157)   (54, 66, 180)   (75, 82, 150)

(60, 74, 156)   (62, 63, 165)   (54, 48, 164)

(69, 73, 166)   (74, 87, 163)   (72, 81, 160)

(56, 66, 165)   (70, 77, 174)   (64, 60, 166)

(71, 72, 145)   (70, 69, 151)  

 

以下のように用意する(DataTable211.txt)。

 

/

   3

   Physics     Const      Math    Height

        53         1        73       167

        65         1        53       152

        54         1        50       145

        59         1        58       153

        58         1        49       176

        51         1        52       148

                                         

                                         

                                         

        70         1        77       174

        64         1        60       166

        71         1        72       145

        70         1        69       151

/

 

/

              0

             

/

              1

                            1

                           

/

              1

                            2

 

/

              -1

 

 

まず、最初のスラッシュ / で始まる行の次の行に、定数1を含めた独立変数の個数を書く。上の例では、「Const」、「Math」、「Height」の3個である。

続けて次の行に、従属変数と独立変数のラベルを並べて書く。

その次の行から、1行に1組ずつのデータを書いていく。

最後のデータの次の行は、スラッシュ / で始まる行を置いて、データの終わりを示す。

その後は、フルモデルとの階層的比較を行うものである。

スラッシュ / で始まる行の次の行に、制約モデルの独立変数の数(定数を除く)を書く。

次の行に、何番目の独立変数が使われるのかを、1行にまとめて並べて書く。

 

スラッシュで始まる行の次の行に負の数が書かれておれば、そこで入力ファイルからの読み込みが終了となり、プログラムの実行終了となる。

 

図2の入力ファイル名の設定ダイアログウィンドウにおいて、ファイル名を設定して「開く」ボタンをクリックすると、次に計算結果の出力用ファイル名の設定を求めるダイアログウィンドウが表示される(図3)。

図3

 

テキストファイル用の適当な名前を設定して「保存」ボタンをクリックすると、計算が始まる。計算が終了すると、計算結果を出力したファイルが保存されたことを示すメッセージボックスが表示される(図4)。

図4

 

OK」ボタンのクリックでプログラムの実行終了となる。実行終了後、出力ファイルを開くと、上の入力データの場合、以下の内容となっている。

 

Input File = D:\yasuharu\www\LaCoocan\booksetc\pm2010\mregression\MultipleRegression\MultipleRegression\DataTable211.txt

 

Y -> Physics

X[0] -> Const

X[1] -> Math

X[2] -> Height

 

n = 50

Data...

                Y      X[0]      X[1]      X[2]

 

b[0] = 43.06346

b[1] = 0.49441

b[2] = -0.07666

 

R2 = 0.68029

r  = 0.82480

 

t[0] = 3.26206  df = 47     p = 0.00206

t[1] = 9.94997  df = 47     p = 0.00000

t[2] = -0.97043  df = 47     p = 0.33680

 

95% 信頼区間

b[0] -> (16.50587, 69.62105)

b[1] -> (0.39445, 0.59437)

b[2] -> (-0.23557, 0.08226)

 

 

Vars -> <0>

R2 = 0.00000

r  = 0.00000

F = 50.00429   df1 = 2  df2 = 47   p = 0.00000

     b(0) = 62.38000

 

 

Vars - >                            1

R2 = 0.67388

r  = 0.82090

F = 0.94174   df1 = 1  df2 = 47   p = 0.33680

     b(0) = 30.64834

     b(1) = 0.49457

 

 

Vars - >                            2

R2 = 0.00685

r  = 0.08275

F = 99.00183   df1 = 1  df2 = 47   p = 0.00000

     b(0) = 75.20585

     b(2) = -0.07926

 

上の出力において、R2を表す。出力の意味は、拙著の「2.1 分析例1」における説明を参照して欲しい。

 

次に、拙著の表2.2.1のデータの場合について説明する。

2.2.1 2要因データ

 

 

A

 

 

A1

A2

B

B1

54  54  37  48  46

58  47  63  43  49

59  56  60  56  68

63  57  54  55  56

B2

60  57  63  56  59

61  59  63  68  60

64  59  66  67  59

57  60  50  70  66

 

この場合のデータは、

とおき、表2.2.1のデータをで表して、次の重回帰モデルを設定する。

 

このとき、入力データファイル(DataTable221.txt)は

 

/

   4

      data     const         A         B        AB

        54         1         0         0         0

        54         1         0         0         0

        37         1         0         0         0

        48         1         0         0         0

        46         1         0         0         0

        58         1         0         0         0

        47         1         0         0         0

        63         1         0         0         0

        43         1         0         0         0

        49         1         0         0         0

        59         1         1         0         0

        56         1         1         0         0

        60         1         1         0         0

        56         1         1         0         0

        68         1         1         0         0

        63         1         1         0         0

        57         1         1         0         0

        54         1         1         0         0

        55         1         1         0         0

        56         1         1         0         0

        60         1         0         1         0

        57         1         0         1         0

        63         1         0         1         0

        56         1         0         1         0

        59         1         0         1         0

        61         1         0         1         0

        59         1         0         1         0

        63         1         0         1         0

        68         1         0         1         0

        60         1         0         1         0

        64         1         1         1         1

        59         1         1         1         1

        66         1         1         1         1

        67         1         1         1         1

        59         1         1         1         1

        57         1         1         1         1

        60         1         1         1         1

        50         1         1         1         1

        70         1         1         1         1

        66         1         1         1         1

/

 

/

              0

             

/

              2

              2            3

             

/

              2

              1            3

             

/

              2

              1            2

 

             

/

              -1

             

 

と用意する。この入力データに対して、出力ファイルは以下のようになる。

 

Input File = D:\yasuharu\www\LaCoocan\booksetc\pm2010\mregression\MultipleRegression\MultipleRegression\DataTable221.txt

 

Y -> data

X[0] -> const

X[1] -> A

X[2] -> B

X[3] -> AB

 

n = 40

Data...

                Y      X[0]      X[1]      X[2]      X[3]

 

b[0] = 49.90000

b[1] = 8.50000

b[2] = 10.70000

b[3] = -7.30000

 

R2 = 0.44005

r  = 0.66336

 

t[0] = 28.52982  df = 36     p = 0.00000

t[1] = 3.43639  df = 36     p = 0.00150

t[2] = 4.32581  df = 36     p = 0.00012

t[3] = -2.08685  df = 36     p = 0.04404

 

95% 信頼区間

b[0] -> (46.35277, 53.44723)

b[1] -> (3.48346, 13.51654)

b[2] -> (5.68346, 15.71654)

b[3] -> (-14.39446, -0.20554)

 

 

Vars -> <0>

R2 = 0.00000

r  = 0.00000

F = 9.43040   df1 = 3  df2 = 36   p = 0.00010

     b(0) = 57.67500

 

 

Vars - >              2            3

R2 = 0.25637

r  = 0.50633

F = 11.80877   df1 = 1  df2 = 36   p = 0.00150

     b(0) = 54.15000

     b(2) = 6.45000

     b(3) = 1.20000

 

 

Vars - >              1            3

R2 = 0.14899

r  = 0.38599

F = 18.71261   df1 = 1  df2 = 36   p = 0.00012

     b(0) = 55.25000

     b(1) = 3.15000

     b(3) = 3.40000

 

 

Vars - >              1            2

R2 = 0.37231

r  = 0.61017

F = 4.35494   df1 = 1  df2 = 36   p = 0.04404

     b(0) = 51.72500

     b(1) = 4.85000

     b(2) = 7.05000

 

上の出力結果の見方は、拙著の「2.2 分析例2」における説明を参考にしてほしい。

 

 

Up