レポートの回答例
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
多変量回帰
高次の自己回帰モデルを考える前に、多変量回帰を考えて見ましょう。 次のようなデータがあります。index | city | y | x1 | x2 | x3 |
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 |
緯度、経度、標高と気温の関係は色々考えることが出来ますが、今回は緯度、経度、標高の3変量を使う最も簡単なものとして
y=β0+β1x1+β2x2+β3x3+誤差
という形を考えます。
β0,β1,β2,β3はどうやって決めましょうか。
本当の気温yと、緯度、経度、標高から推定した気温β0+β1x1+β2x2+β3x3
との差が小さくなるように決めましょう。
データの
1番目の都市の気温をy1、緯度をx11、経度をx12、標高をx13
2番目の都市の気温をy2、緯度をx21、経度をx22、標高をx23
・・・・・
20番目の都市の気温をy20、緯度をx20,1、経度をx20,2、標高をx20,3
と書きます。すると、本当の気温と推定した気温の差は
y1-(β0+β1x11+β2x12+β3x13)
y2-(β0+β1x21+β2x22+β3x23)
・・・・・
y20-(β0+β1x20,1+β2x20,2+β3x20,3)
です。これらはプラスになったりマイナスになったりするので、そのまま足すと打ち消しますから、二乗して足して
∑i=120 {yi-(β0+β1xi1+β2xi2+β3xi3)}2
が最小になるようなβ0,β1,β2,β3を求めることにします。
一見、求めるのは難しそうに見えます。でもこれはβ0,β1,β2,β3に関する二次式で、しかもは二乗して足していますから0以上です。だからグラフは下に凸になっていて、どこかで最小値を取ります。
公式の導出は書きにくいので講義のときに板書しますが、実は最小にするβ0,β1,β2,β3は次の連立一次方程式を解くことで求めることが出来ます。
まず未知数β0,β1,β2,β3を縦に並べたベクトル
β0 |
β1 |
β2 |
β3 |
ベクトル
y1 |
y2 |
・ |
・ |
y20 |
最後に行列
1 | x11 | x12 | x13 |
1 | x21 | x22 | x23 |
・ | ・ | ・ | ・ |
・ | ・ | ・ | ・ |
1 | x20,1 | x20,2 | x20,3 |
1が縦に並んでいるのはβ0の係数だからです。この時、最小にするβ0,β1,β2,β3は 連立一次方程式
(Xt・X)Β=(Xt・Y)
を解くことで得られます。Xの右上のtは転置を表します。
この連立一次方程式を解いて、β0,β1,β2,β3を求めてみましょう。 連立一次方程式の解き方は、前回の最後の部分を見てください。
0 件のコメント:
コメントを投稿