www.crosshyou.infoの続きです。
今回は、rent_ko: 公営賃貸住宅の家賃をrent_mi: 民間賃貸住宅の家賃で回帰分析をしてみようと思います。R言語のlm関数で簡単に回帰分析ができますが、今回はlm関数を使わないでやってみます。
こちらの書籍を参考にしてやってみます。
まずは、散布図を描いてみます。
こんな感じです。
回帰直線は、(4000, 1000)の点と(8000, 3500)の線を結んだ感じでしょうか?
傾きは、(3500 - 1000) / (8000 - 4000) = 2500 / 4000 = 0.625
切片は、1000 - 0.625 * 3500 = -1187.5
ぐらいですかね?lines関数で線を追加してみます。
こんな感じになります。
このとき、実際のデータと回帰直線の残差は、
実際のrent_ko - 予測のrent_ko
になりますが、予測のrent_koが回帰直線上にありますから、
予測のrent_ko = 0.625 * rent_mi - 1187.5 です。
なので、
残差 = rent_ko - ( 0.625 * rent_mi - 1187.5) です。
回帰直線は、「残差の2乗の合計値」が一番小さくい、傾きと切片の直線です。
傾き0.625, 切片-1187.5のときの「残差の2乗の合計値」、残差平方和(RSS)を計算してみます。
傾きが0.625, 切片が-1187.5のときの残差平方和は6498054になります。
この残差平方和が最小になる傾きと切片を求めるのは、optim関数を使います。
まず、残差平方和を計算する関数を作り、optim関数でこの関数を引数にして実行する、という流れです。
まずは残差を計算する関数を作ります。
こんな関数です。
yosoku <- のところでパラメータをもとに予測値を計算し、
zansa <- のところで実際のrent_koとの残差を計算し、
RSS <- のところで残差平方和を計算して、
return(RSS)で結果を返しています。
この関数がきちんと動いているか、傾き0.625, 切片-1187.5で実行してみます。
6948054となりました。これは先ほどの計算結果と一致しますね。
関数はできたので、optim関数でこのcalc_RSS関数の結果を最小にするパラメータを求めることができます。
$parの0.5332256が傾きで、-875.729730が切片です。
$valueの5712572が残差です。
最小2乗法で求めた回帰直線は、
rent_ko = 0.5332256 * rent_mi - 875.729730
ということです。
この回帰直線をさきほどの散布図に追加しましょう。
lm関数での結果も確認しておきましょう。
Interceptが-875.72272で、rent_miの係数が0.53321とほぼ一致しています。
RSSも確認しておきましょう。
ResidualsのSum Sqの値が5712572でoptim関数での計算結果と一致していることがわかります。
今回は以上です。
初回から見るには、
です。