2008-06-26

多変量回帰

レポートの回答例

Sub report()
i = 2
Do While Cells(i, 5) <> ""
  i = i + 1
Loop
last = i - 1

For i = 2 To last - 1
  Cells(i, 7) = Log(Cells(i, 5)) - Log(Cells(i + 1, 5))
Next i

wa = 0
For i = 2 To last - 1
  wa = wa + Cells(i, 7)
Next i
heikin = wa / (i - 2)
Cells(1, 8) = heikin

wa = 0
For i = 2 To last - 1
  wa = wa + (Cells(i, 7) - heikin) ^ 2
Next i
bunsan = wa / (i - 2)
Cells(2, 8) = bunsan

wa = 0
For i = 2 To last - 2
  wa = wa + (Cells(i, 7) - heikin) * (Cells(i + 1, 7) - heikin)
Next i
kyoubunsan = wa / (i - 2)
Cells(3, 8) = kyoubunsan

a = kyoubunsan / bunsan
b = heikin - a * heikin
c = heikin
Cells(4, 8) = a
Cells(5, 8) = b

r1 = 0
For i = 2 To last - 2
  r1 = r1 + (Cells(i, 7) - heikin) ^ 2
Next i

r2 = 0
For i = 2 To last - 2
  r2 = r2 + (Cells(i, 7) - (a * Cells(i + 1, 7) + b)) ^ 2
Next i

Cells(6, 8) = (r1 - r2) / r1

End Sub

多変量回帰

高次の自己回帰モデルを考える前に、多変量回帰を考えて見ましょう。 次のようなデータがあります。
indexcityyx1x2x3
1稚内-8.0 45.42 141.68 2.8
2旭川-13.6 43.77 142.37 111.9
3札幌-9.5 43.05 141.33 17.2
4青森-5.4 40.82 140.78 3.0
5盛岡-6.7 39.70 141.17 155.2
6仙台-3.2 38.27 140.90 38.9
7金沢-0.1 36.55 136.65 26.1
8長野-5.5 36.67 138.20 418.2
9高山-7.6 36.15 137.25 560.2
10軽井沢-10.0 36.33 138.55 999.1
11名古屋-0.9 35.17 136.97 51.1
12飯田-4.7 35.52 137.83 481.8
13東京-0.4 35.68 139.77 5.3
14鳥取0.5 35.48 134.23 7.1
15京都-0.6 35.02 135.73 41.4
16広島0.2 34.37 132.43 29.3
17福岡1.5 33.58 130.38 2.5
18鹿児島2.0 31.57 130.55 4.3
19高知0.1 33.55 133.53 1.9
20那覇13.5 26.23 127.68 34.9
このデータは、20地点の1月の日最低気温の月平均値y, 緯度x1, 経度x2, 標高x3のデータです。この緯度、経度、標高と気温の関係を数式で表したいと思います。 また神戸の緯度は34.68、経度は135.18、標高は59.30です。神戸の気温を推定しましょう。

緯度、経度、標高と気温の関係は色々考えることが出来ますが、今回は緯度、経度、標高の3変量を使う最も簡単なものとして

y=β01x12x23x3+誤差

という形を考えます。
β0123はどうやって決めましょうか。
本当の気温yと、緯度、経度、標高から推定した気温β01x12x23x3 との差が小さくなるように決めましょう。

データの
1番目の都市の気温をy1、緯度をx11、経度をx12、標高をx13
2番目の都市の気温をy2、緯度をx21、経度をx22、標高をx23
・・・・・
20番目の都市の気温をy20、緯度をx20,1、経度をx20,2、標高をx20,3
と書きます。すると、本当の気温と推定した気温の差は

y1-(β01x112x123x13)
y2-(β01x212x223x23)
・・・・・
y20-(β01x20,12x20,23x20,3)
です。これらはプラスになったりマイナスになったりするので、そのまま足すと打ち消しますから、二乗して足して
i=120 {yi-(β01xi12xi23xi3)}2
が最小になるようなβ0123を求めることにします。
一見、求めるのは難しそうに見えます。でもこれはβ0123に関する二次式で、しかもは二乗して足していますから0以上です。だからグラフは下に凸になっていて、どこかで最小値を取ります。

公式の導出は書きにくいので講義のときに板書しますが、実は最小にするβ0123は次の連立一次方程式を解くことで求めることが出来ます。

まず未知数β0123を縦に並べたベクトル

β0
β1
β2
β3
をΒとおき、
ベクトル
y1
y2
y20
をYとおき、
最後に行列
1x11x12x13
1x21x22x23
1x20,1x20,2x20,3
をXとおきます。
1が縦に並んでいるのはβ0の係数だからです。この時、最小にするβ0123は 連立一次方程式
(Xt・X)Β=(Xt・Y)
を解くことで得られます。Xの右上のtは転置を表します。
この連立一次方程式を解いて、β0123を求めてみましょう。 連立一次方程式の解き方は、前回の最後の部分を見てください。

0 件のコメント: