Chap3 回帰分析
コンテンツ
3.1 回帰分析の目的3.2 単回帰分析3.3 S-PLUSを用いた単回帰分析3.1 回帰分析の目的
回帰分析とは,変数間の相関を利用し, 1つあるいは,複数の変数の値を用いて,目的の変数の値を予測する分析である. 以降,予測するために用いる変数を説明変数,予測する変数を目的変数と呼ぶ.
3.2 単回帰分析
話を分かりやすくするために,説明変数が一つの単回帰分析を説明した後に, 説明変数が複数の重回帰分析について説明する.
3.2.1 単回帰分析の概要
次のようなシチュエーションを考える. ある,酒屋で主人は,その日の気温によって, ビールの売れ行きに違いがあることに気がついた. そこで,ビールの販売ケース数と最高気温のデータを5日分取ってみた. 酒屋のオーナーはこのデータを用いて, 今後の販売計画を立てられないかを考えたとする.
次に示すのが,酒屋のオーナーが収集した,ビールの販売ケース数と最高気温のデータである.(データが欲しい方は「こちら(beerdata.csv)」からどうぞ)
No. | 最高気温(℃) | 販売ケース数(ケース) |
1 | 18 | 24 |
2 | 20 | 27 |
3 | 22 | 29 |
4 | 25 | 30 |
5 | 28 | 36 |
表から関係は読取りにくいので,散布図を作成してみる.

図xを見てみると,どうやら最高気温と販売ケース数の間には強い正の相関があるように見える. 実際に相関係数を計算してみると,相関係数は0.97でやはりかなり強い正の相関があった. 正の相関が強いということは, 片方の変数が増加(減少)すれば,もう一方の変数も増加(減少)する関係があるということである. このような相関を利用して,一方の変数からもう一方の変数を予測するのが単回帰分析である.
この相関関係に着目した酒屋のオーナーは,最高気温を説明変数として,ビールの販売ケース数を目的変数とする, 単回帰分析をすることとした.
3.2.2 回帰直線と残差
単回帰分析は具体的にどのように行うかといえば,
単回帰モデルというものを想定して,単回帰モデルに基づいて,分析を進めていくのである.
単回帰モデルについて説明する前に,用語と記号を確認しておく.
なお以降,単回帰モデルのことを単にモデルと表現する.
まず,説明変数を,
目的変数を
とおく.
また目的変数を予測した値は ^ をつけて
と表現する.
このように記号を定義したうえで, 説明変数によって目的変数を説明するモデル式を次のように定義する.

ここで,
,
はそれぞれ,
番目のデータの説明変数,目的変数,誤差である.
また
は定数項,
は係数である.
このモデル式は,目的変数が,定数項に係数と説明変数を掛け合わせたものを足した部分と,
誤差で表現できることを示している.
では,目的変数を説明変数のみを用いて予測するには,どうしたらよいか.
そのためには,目的変数と目的変数の予測値の差の合計ができるだけ小さくなるように,
定数項と係数を推定したものと
を用いて,
モデル式において誤差を除いた次の部分に着目する.

この式を回帰式と呼ぶ. この式は直線を示しており,回帰式によって引かれた直線を回帰直線と呼ぶ.
回帰式を用いるには,定数項の値と係数を推定すればよいことになる. では,この2つの値を求めるにはどうすればよいだろうか. そのためには残差という考え方を導入する. 残差は目的変数の実測値と予測値の差として次のように計算できる.

残差をわかりやすくするために図xのような例を考える.

この3点を最もよく説明する回帰直線は,下の2点を通ると仮定して, 図xのような回帰直線を引いたとする. すると,この回帰直線は通っている2点を完璧に説明することができるが, 直線上に乗っていない残りの1点はうまく説明できないことになる. このうまく説明できなかった部分, つまり点と直線の垂直方向の距離が残差である.

たとえば,回帰直線を3点の間を通るように上にシフトしてみると, 今度はそれぞれの点に関して残差が生じるようになる. この残差の大きさの合計が一番小さくなるような回帰直線が採用されることになる. ちなみに,回帰直線の傾きが回帰直線の係数,切片が回帰直線の定数項ということになる.

3.2.3 単回帰分析の最小2乗法を用いた回帰式の推定
最終的にすべての残差の大きさを合わせたとき最も小さいように回帰式を求めるのだが,
その際には最小2乗法という考え方を用いる.
最小2乗法とは,
残差平方和というものを最小化することを考える方法である.
残差平方和とはデータがn個あるとき次のように計算される.

上記の式に実際にデータを入れて,残差平方和が最小になるような推定値と
を素直に計算することもできるが非常に煩雑である.
そこで,2つの推定値を偏微分という方法を用いて求めることを考える.
(微分なんて聞いたこともないという方は,
素直に計算をして求める方法にリンクします「→素直に推定」)
残差平方和を最小にするためには,推定したい係数と
で
を偏微分したものを0とおく.
そうすると,
と
について
次のような連立方程式が出来上がる.

上の連立方程式に残差平方和を代入して整理すると次の連立方程式になる.

整理の前に平均,分散,共分散の定義を確認しておく.




これらの定義を意識して,連立方程式を解くとと
は,次のように解ける.


以上の手順で,先の酒屋のデータを用いてと
を推定すると,次の回帰式を得た.

3.2.4 回帰式の評価
回帰式を用いて予測をする上で,回帰式がどの程度の予測精度を持つのかを把握するのは重要である. いくつかの評価方法があるが,今回は次の方法を紹介する.
- 重相関係数から計算される寄与率
- 平方和の比から計算される寄与率
寄与率とは,0から1の間をとり,
その値が1に近いほど予測精度のよい回帰式であるといえる.
明確な定義があるわけではないが,予測精度の判定の目安を示す.


寄与率は2通りの方法で求めることができる.
重相関係数
から計算される寄与率
重相関係数とは,説明変数と説明変数の予測値の相関のことである. この重相関係数の2乗が寄与率である.酒屋の例は以下のとおりである.
No. | 目的変数の実測値 | 目的変数の予測値 |
1 | 24 | 24.22152 |
2 | 27 | 26.38608 |
3 | 29 | 28.55063 |
4 | 30 | 31.79747 |
5 | 36 | 35.04430 |
ここから,重相関係数を求めると,

さらに,重相関係数を2乗して寄与率を求める.

平方和の比から計算される寄与率
まず,3つの平方和を定義しておく.
1つ目に目的変数の変動の大きさを表す,
目的変数による平方和
は,次の式で定義される.

2つ目に予測値の変動の大きさを表す,
回帰による平方和
は,次の式で表現される.

3つ目に残差の変動の大きさを表す,
残差平方和
は次の式で表現される.

ここで酒屋のデータを用いて,3つの平方和をそれぞれ計算してみる.

3つの平方和には次の関係がある.

実際に酒屋のデータで計算してみると, 3つの平方和の関係が成立していることが確かめられる. この関係を図に示すと次の通りである.

3つの平方和の関係を考えてみると,目的変数による平方和のうち, どのくらい,回帰による平方和が占めているかが, 回帰式の予測精度の評価に使えそうである. 実は,寄与率は3つの平方和を用いて次のように計算できる.

上式を用いて,寄与率を計算した結果は, 先に重相関係数の2乗から計算したものと等しくなる.

3.2.5 酒屋の話
以上の単回帰分析の結果,酒屋のオーナーは1℃気温が上がるごとに, 1ケースビールが多く売れるという知見を得た. 酒屋のオーナーは,次の日の天気予報や,長期予報に敏感になり, 気温が低いと予測される日には,ビールの安売りを打ち出して,売り上げの減少を避け, 気温が高いと予測される日には,ビールの売り場を入り口やレジ付近に近づけるなどし, ビールの売り上げ増加を図った. また,夏季の平均気温が高いと予測されたら,入荷量を増やし, 逆に平均気温が低いと予測されたら,入荷量を減らすなどした.
このように,単回帰分析は用いられることがある.
3.3 S-PLUSを用いた単回帰分析
3.3.1 回帰分析の設定
単回帰分析の理論を説明し終えたところで, 実際にS-PLUSを用いて単回帰分析をする方法を説明する.
この節では例として,年齢から年収を予測することを考える. この場合,予測したい変数である年収は目的関数, 年齢から年収を予測するので,年齢は説明変数となる.
次に示すのが,年齢と年収のデータ(一部)である. このデータにはある仮想企業に勤める100人の年齢と年収のデータが含まれている.(データが欲しい方は「こちら(salarydata.csv)」からどうぞ)
No. | 年齢(才) | 年収(万円) |
1 | 21 | 315 |
2 | 33 | 493 |
3 | 38 | 556 |
4 | 32 | 527 |
5 | 44 | 664 |
6 | 20 | 269 |
7 | 43 | 630 |
8 | 35 | 533 |
9 | 43 | 672 |
10 | 38 | 555 |
データをS-PLUSにインポートしなくてはなりませんが, データのインポート・エクスポートをご参照ください. なお,その際データセット名を"salarydata"にしていただきますと, 今後データセット名を気にすることなく進めていくことができます.
データをインポートしたら, ARIMAモデルを用いた単回帰分析を行うメニューを呼び出す. メニューバーから,[統計]→[回帰]→[線形]の順番で選択する.

すると,以下のようなダイアログが現れる. まず[Model]タブをクリックする. ここでどのような単回帰分析をするかを設定する.

このウィンドウはどのような単回帰分析をするかを決定するメニューである. これから,次のような設定を行う.
- "salarydata"というデータを使用する(Data,Data Set)
- "salary"を目的変数とする(Variables,Dependent)
- "age"(Variables,Independent)
- モデルを保存する(Save Model Object,Save As)
はじめに,[Data Set]には使用するデータセットを入力(選択)する. 例では,"salarydata"と入力する.
次に目的変数と,説明変数を入力(選択)する. [Dependent]には,目的変数を入力し, [Independent]には,説明変数を入力する. 例では,[Dependent]に"salary",[Independent]に"age"を入力(選択)している. [Dependent]と[Independent]を入力(選択)すると, 自動的に[Formula]が形成される. この[Formula]はS-PLUSが背後で回帰分析をする際に必要な式である. ~の前が目的変数,後が説明変数である.
さらに後で結果を再現しやすいように,モデルをObjectとして保存しておく. [Save As]に入力した名前でlmというクラスのObjectを得ることができる. 例では"salarydata.lm"と入力している.
どのような分析をするかを決定した後に,[Result]のタブをクリックし, どのような結果の出力を行うかを決定する.

このウィンドウは結果の出力を設定するためのメニューである. これから次のような設定を行う.
- 結果のレポートを出力する(Printed Results,Long Output)
- 回帰式による予測値と残差を保存する(Saved Results,Save In/Fitted Values/Residuals)
まず,[Long Output]チェックボックスをオンにすると,結果をレポートとして出力する. 例では,チェックボックスをオンにしている.
次に,回帰式による予測値を出力するためには[Fitted Values]のチェックボックスをオンにする. 残差を出力するためには[Residuals]のチェックボックスをオンにする. 例では,両方ともチェックボックスをオンにしている. また,予測値と残差をObjectとして保存する時には, [Save In]に入力した名前でdata.frameというクラスのObjectを得ることができる. 例では,"salarydata.result"と入力している.
これで設定はすべて終了である.画面左下の[OK]をクリックする.
3.3.2 結果の読み方
設定終了後,[OK]をクリックすると,2つのウィンドウが新しく立ち上がる.
- 単回帰分析の結果に関するレポート
- 予測値と残差に関してのデータ
単回帰分析の結果に関するレポートの読み方
まず,結果に関するレポートについて説明する.以下のように記述されているウィンドウをクリックする.
*** Linear Model ***
ここからレポートの内容を順に説明していく.
Call: lm(formula = salary ~ age, data = salarydata, na.action = na.exclude)
Callはどのような単回帰分析を行ったかを表している. この部分をコピーして,コマンドラインにペーストして実行すると, GUIを用いて実行した場合と同じ結果を得られる.
Residuals: Min 1Q Median 3Q Max -91.48 -21.64 0.4467 28.65 98.62
Residualsは残差の分布を表している. Minは残差の最小値,1Qは残差の第1四分位点,Medianは残差の中央値, 3Qは残差の第3四分位点,Maxは残差の最大値をそれぞれ表している.
Coefficients: Value Std. Error t value Pr(>|t|) (Intercept) 109.0303 16.7084 6.5255 0.0000 age 12.0499 0.4609 26.1421 0.0000
Coefficientsは単回帰分析の回帰式の係数を表している.
(Intercept)はに関して,
ageは
に関しての情報である.
Valueが
と
の値である. Std.Errorは係数の標準偏差,t valueとPr(>|t|)は係数のt検定に用いる値である. 具体的な説明はChap9 検定・推定を参照していただきたいが, 本当に簡単に説明すると,Pr(>|t|)の値が0.05以下であれば,係数に意味があることになる. Coefficientsから給料の単回帰分析について,次の回帰式が得られた.

Residual standard error: 39.14 on 98 degrees of freedom Multiple R-Squared: 0.8746 F-statistic: 683.4 on 1 and 98 degrees of freedom, the p-value is 0
この部分は得られた回帰式の評価を表している.Maltiple R-Squaredが寄与率の値で, 今回得られた回帰式の寄与率は87.46%である. また具体的な説明はChap9 検定・推定を参照していただきたいが, Residual standard errorは回帰式の標準誤差と自由度を表しており, F-statisticはF検定の結果を表している. 本当に簡単に説明するとp-valueの値が0.05以下であれば, この回帰式を用いて予測をすることに意味があることを表している.
予測値と残差に関してのデータの読み方
次の図は予測値と残差に関してのデータ("salarydata.result")の一部である.

行の順番は入力したデータ"salarydata"と同じで, 1列目のfitが推定した回帰式を用いた予測値であり, 2列目のresidualsが残差の値である.