Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の1人当りの県民所得と賃貸住宅の家賃のデータ分析6 - R言語のlm関数を使わないで回帰分析をする。

 

www.crosshyou.infoの続きです。

今回は、rent_ko: 公営賃貸住宅の家賃をrent_mi: 民間賃貸住宅の家賃で回帰分析をしてみようと思います。R言語のlm関数で簡単に回帰分析ができますが、今回はlm関数を使わないでやってみます。

 

平均・分散から始める一般化線形モデル入門

平均・分散から始める一般化線形モデル入門

  • 作者:馬場 真哉
  • 発売日: 2015/07/14
  • メディア: 単行本
 

 こちらの書籍を参考にしてやってみます。

まずは、散布図を描いてみます。

f:id:cross_hyou:20201226090835p:plain

f:id:cross_hyou:20201226090852p:plain

こんな感じです。

回帰直線は、(4000, 1000)の点と(8000, 3500)の線を結んだ感じでしょうか?

傾きは、(3500 - 1000) / (8000 - 4000) = 2500 / 4000 = 0.625

切片は、1000 - 0.625 * 3500 = -1187.5

ぐらいですかね?lines関数で線を追加してみます。

f:id:cross_hyou:20201226091804p:plain

f:id:cross_hyou:20201226091819p:plain

こんな感じになります。

このとき、実際のデータと回帰直線の残差は、

実際の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)を計算してみます。

f:id:cross_hyou:20201226092648p:plain

傾きが0.625, 切片が-1187.5のときの残差平方和は6498054になります。

 

この残差平方和が最小になる傾きと切片を求めるのは、optim関数を使います。

まず、残差平方和を計算する関数を作り、optim関数でこの関数を引数にして実行する、という流れです。

まずは残差を計算する関数を作ります。

f:id:cross_hyou:20201226093934p:plain

こんな関数です。

yosoku <- のところでパラメータをもとに予測値を計算し、

zansa <- のところで実際のrent_koとの残差を計算し、

RSS <- のところで残差平方和を計算して、

return(RSS)で結果を返しています。

この関数がきちんと動いているか、傾き0.625, 切片-1187.5で実行してみます。

f:id:cross_hyou:20201226093953p:plain

6948054となりました。これは先ほどの計算結果と一致しますね。

 

関数はできたので、optim関数でこのcalc_RSS関数の結果を最小にするパラメータを求めることができます。

f:id:cross_hyou:20201226094406p:plain

$parの0.5332256が傾きで、-875.729730が切片です。

$valueの5712572が残差です。

最小2乗法で求めた回帰直線は、

rent_ko = 0.5332256 * rent_mi - 875.729730

ということです。

この回帰直線をさきほどの散布図に追加しましょう。

f:id:cross_hyou:20201226095220p:plain

f:id:cross_hyou:20201226095233p:plain

lm関数での結果も確認しておきましょう。

f:id:cross_hyou:20201226101121p:plain

Interceptが-875.72272で、rent_miの係数が0.53321とほぼ一致しています。

RSSも確認しておきましょう。

f:id:cross_hyou:20201226101428p:plain

ResidualsのSum Sqの値が5712572でoptim関数での計算結果と一致していることがわかります。

今回は以上です。

初回から見るには、

 

www.crosshyou.info

 です。