1
1

More than 3 years have passed since last update.

R で Real estate valuation の線形重回帰分析

Last updated at Posted at 2021-02-24

はじめに

こちらの記事で基礎分析を行った、UCI 機械学習リポジトリのReal estate valuationデータについて回帰分析を行った。まずは重回帰を行い結果を見てみた。

※2021/02/25 改訂:コメントを受けse.seed、predictを使用したコードに追記した。

データの読み込みとデータの分割

データを読み込み列名を変更、さらに train dataset と test dataset を分ける。

コード
library(openxlsx)
df <- read.xlsx("./Real_estate_valuation_data_set.xlsx")

coln <- colnames(df) #列名を保存しておく
colnames(df) <- c("No","X1","X2","X3","X4","X5","X6","Y") #新しい名前を付けておく

library(rsample)
set.seed(1234) #値の再現を確認するときは乱数シードを設定
df_split <- initial_split(df, prop = 0.8) #train:test = 8:2 の割合で分ける
df_train <- training(df_split)
df_test <- testing(df_split)

線形重回帰分析(全変数使用)

重回帰分析をlm関数によって行う。

コード
df_train.lm <- lm(Y~X1+X2+X3+X4+X5+X6, df_train)
summary(df_train.lm)
出力
Call:
lm(formula = Y ~ X1 + X2 + X3 + X4 + X5 + X6, data = df_train)

Residuals:
    Min      1Q  Median      3Q     Max 
-35.039  -4.967  -0.893   4.069  74.441 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.301e+04  7.142e+03  -1.821   0.0695 .  
X1           4.310e+00  1.692e+00   2.547   0.0113 *  
X2          -2.904e-01  4.298e-02  -6.756 6.58e-11 ***
X3          -4.679e-03  7.677e-04  -6.094 3.11e-09 ***
X4           9.980e-01  2.111e-01   4.727 3.41e-06 ***
X5           2.675e+02  4.899e+01   5.460 9.45e-08 ***
X6          -1.898e+01  5.126e+01  -0.370   0.7115    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.769 on 325 degrees of freedom
Multiple R-squared:  0.5978,    Adjusted R-squared:  0.5904 
F-statistic:  80.5 on 6 and 325 DF,  p-value: < 2.2e-16

調整済みの決定係数が 0.5904 であった。特別良くもないが悪くもない結果だった。分析結果からテストデータを予測する関数を定義する。

また、評価用としてRMSEを計算する関数を定義する。

コード
RMSE = function(m, o) {
  tmp <- sqrt(mean((m-o)^2))
  return(tmp)
}

以上を用いてテストデータの RMSE を評価する。

コード
df_test.y <- predict(df_train.lm, newdata = df_test)
df_test.rmse <- RMSE(df_test.y, df_test$Y)
df_test.rmse
出力
[1] 9.312081

線形重回帰分析(一部変数使用)

step関数を使って AIC を計算しながら最適な線形モデルを予測する。

コード
air.lm <- step(df_train.lm)
出力
Start:  AIC=1448.63
Y ~ X1 + X2 + X3 + X4 + X5 + X6

       Df Sum of Sq   RSS    AIC
- X6    1      10.5 25002 1446.8
<none>              24992 1448.6
- X1    1     498.9 25491 1453.2
- X4    1    1718.0 26710 1468.7
- X5    1    2292.8 27285 1475.8
- X3    1    2855.8 27848 1482.5
- X2    1    3509.4 28501 1490.2

Step:  AIC=1446.77
Y ~ X1 + X2 + X3 + X4 + X5

       Df Sum of Sq   RSS    AIC
<none>              25002 1446.8
- X1    1     493.7 25496 1451.3
- X4    1    1744.1 26746 1467.2
- X5    1    2353.7 27356 1474.6
- X2    1    3499.2 28501 1488.2
- X3    1    5357.0 30359 1509.2

変数X6を抜かしたモデルの方が AIC の値としては改善されるよう。なので、X6(longitude)を抜かして再度回帰分析を行う。

コード
df_train.lm2 <- lm(Y~X1+X2+X3+X4+X5, df_train)
summary(df_train.lm2)
出力
Call:
lm(formula = Y ~ X1 + X2 + X3 + X4 + X5, data = df_train)

Residuals:
    Min      1Q  Median      3Q     Max 
-34.976  -5.064  -0.884   4.128  74.681 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.531e+04  3.507e+03  -4.365 1.71e-05 ***
X1           4.284e+00  1.688e+00   2.537   0.0116 *  
X2          -2.896e-01  4.288e-02  -6.755 6.59e-11 ***
X3          -4.475e-03  5.355e-04  -8.358 1.87e-15 ***
X4           1.003e+00  2.104e-01   4.769 2.80e-06 ***
X5           2.694e+02  4.864e+01   5.540 6.25e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.758 on 326 degrees of freedom
Multiple R-squared:  0.5976,    Adjusted R-squared:  0.5914 
F-statistic: 96.83 on 5 and 326 DF,  p-value: < 2.2e-16

調整済みの決定係数が 0.5914 なので、モデルとしては少し改善された。RMSEを調べてみると、

コード
df_test.y2 <- predict(df_train.lm2, newdata = df_test)
df_test.rmse2 <- RMSE(df_test.y2, df_test$Y)
df_test.rmse2
出力
[1] 9.307187

となり、こちらの値も微量ながら改善される。

おわりに

Real estate valuation の住宅価格を予測する重回帰分析を行ってみた。次回は回帰木などの分析を行ってみようと思う。

@dfghdfdjftyfghvgjhk さん、コメントありがとうございました。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1