の続きです。
今回は、R言語のlm関数を使って線形回帰の練習をしてみようと思います。
まずはじめは、全国集計したデータだけでやってみましょう。
まず、全国だけのデータを再確認します。
被害額 = a + b x 合計 + 誤差項
という単回帰モデルで回帰分析してみます。lm関数を使います。
一番下のp-valueが0.7092と0.05よりも大きい値ですから、このモデル式は有意ではない、ということですね。散布図に回帰式の直線を重ねて確認しましょう。plot関数とabline関数を使います。
散布図を見る限り、被害者合計人数と被害額は相関しているようにはあんまり見えないですね。
それでは、関東地方、近畿地方など地方別のデータでやってみましょう。
こんどは p-value = 0.0005573 と 0.05 よりも小さな値になりましたので、有意なモデルです。係数を見ると、切片は 30974.10 で p値は2.02e-07 なので有意、合計の係数は 326.93 でp値は0.000557 で有意です。
つまり回帰式は、被害額 = 30974.10 + 326.93 x 合計 + 誤差項 という式です。R二乗は0.1575 です。そんなに当てはまりがいいとはいえないです。
plot関数とabline関数で視覚化します。
散布図を見ると右端や上端のプロットに回帰式が引っ張られている気がします。
もう一つ、都道府県別データで回帰分析しましょう。
p-value は 6.465e-15 なので 0.05 よりも小さいですから有意なモデルです。切片の値は 5056.47 でp値は4.97e-12 で有意です。合計の係数は 381.61 で p値は6.47e-15 なので有意です。従ってモデル式は 被害額 = 5056.47 + 381.61 x 合計 + 誤差項 となります。決定係数(R-squared)は0.1345です。あてはまりがいいとは言えないです。
散布図を作成しましょう。
散布図を見ると合計も被害額も大きな値の外れ値があるので、それに回帰直線が影響されているような気がします。大きな値の影響を小さくさせるために被害額、合計の平方根で回帰モデルを作成してみましょう。
sqrt(被害額) = a + b x sqrt(合計) + 誤差項 という式です。
p-value < 2.2e-16 ですからモデルは有意です。切片のp値、sqrt(合計)の係数のp値はともに < 2.2e-16 ですので有意です。そして決定係数(R-squared)が 0.2287 になっています。平方根を使わないモデルの決定係数は 0.1345 ですから改善しています。
散布図と回帰直線を視覚化します。
単純な散布図と回帰直線よりもこちらのほうが当てはまりがいいような印象を受けます。
いままでは、被害額を被害にあった人数の合計で回帰分析していました。今度は死者、行方不明者、負傷者の3つの変数で回帰分析してみましょう。重回帰分析というやつですね。被害額 = a + b1 x 死者 + b2 + 行方不明者 + b3 x 負傷者 + 誤差項 というモデル式です。都道府県別のデータでやってみましょう。
一番下の行の p-value を見ると、 < 2.2e-16 ですからこの重回帰モデル式は有意です。
切片、各変数の p値 を見ると、負傷者以外は 0.05 以下です。そして調整済み決定係数(Adjusted R-squared)は 0.3183 ですから平方根モデルよりも説明力が上がっています。
回帰残差を視覚化してみます。
やっぱり被害額が大きいほど(グラフが右にいくほど)残差が大きいですよね。
平方根モデルを調べてみましょう。負傷者は有意ではなかったので除外します。
一番したの p-value は < 2.2e-16 ですからモデル式は有意です。調整済み決定係数(Adjusted R-squared)が0.381 と上昇しました。残差をプロットします。
こちらのチャートのほうが残差が特定のパターンがなく分散しています。
今回は以上です。