2018年4月6日金曜日

Matlab for Java : (6) Regressionの利用

Matlabを使ってJavaから重回帰分析をやってみます。
(1) データの準備
今回は80歳以上人口を予測するのに、どの年代層が影響しているかをやってみます。
データは(19歳まで、20-39歳まで、40-59歳まで、60-79歳まで、80歳以上、世帯数)です。

https://github.com/smzn/MatlabJava06/blob/master/csv/population.csv

(2) コンストラクタで散布図描画
横軸:世帯数、縦軸:80歳以上人口で散布図を描きます。

(3)線形回帰を実施(1変数)
fitlm関数を使って線形回帰をやってみます。
https://jp.mathworks.com/help/stats/fitlm.html
横軸:世帯数、縦軸:80歳以上人口
mdl = fitlm(x)


この場合、決定係数: 0.842でした。


(4) quadraticで実施 
精度を上げるために他のモデルを指定してみます。
mdl = fitlm(x,'quadratic')

モデルは、切片、線形項、交互作用、二乗項を含みます。
決定係数: 0.843であり変わりませんでした。
変数が少ないためだと思います。

(5) ロバスト近似の利用
mdl = fitlm(x,'quadratic','RobustOpts','on')
決定係数: 0.884と上昇しました。
(6) 2変数( robust近似)
0-19歳人口を入れて80歳以上人口を予測しました(0-19歳人口、世帯数)。
決定係数: 0.906と上昇しました。

(7) stepwiselmで説明変数を選択
80歳以上人口を予測するために、全ての変数を使ってstepwiselmで説明変数を選択しました。
https://jp.mathworks.com/help/stats/stepwiselm.html
mdl = stepwiselm(x)
決定係数: 0.921となり、良い値になりました。
Var2(20-39歳人口) -0.32827となり、この年代とは逆の関係にありそうです。
Var4(60-79歳人口) 0.088571となり、高齢者が多い地域には80歳以上人口も多くなっています。
Var5(世帯数) 0.29659にも大きく+の影響があります。

ソースコード

0 件のコメント:

コメントを投稿