統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

統計ソフトRのISLRパッケージCarseatsデータを使った重回帰モデル

ブログランキングに参加しています。
まずはぽちぽちっとお願いします。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
にほんブログ村 科学ブログ 数学へ

チャイルドシートの売り上げを予測する重回帰モデルを作成した。

統計ソフトRのISLRパッケージCarseatsデータを用いた分析。

 

 

データの確認

ISLRパッケージをはじめに一回だけインストールする。

install.packages("ISLR")

 

library()で呼び出して使えるようにする。

library(ISLR)

 

Carseatsデータは11変数、400箇所のデータで、Salesが予測したい売り上げだ。

> str(Carseats)
'data.frame':   400 obs. of  11 variables:
 $ Sales      : num  9.5 11.22 10.06 7.4 4.15 ...
 $ CompPrice  : num  138 111 113 117 141 124 115 136 132 132 ...
 $ Income     : num  73 48 35 100 64 113 105 81 110 113 ...
 $ Advertising: num  11 16 10 4 3 13 0 15 0 0 ...
 $ Population : num  276 260 269 466 340 501 45 425 108 131 ...
 $ Price      : num  120 83 80 97 128 72 108 120 124 124 ...
 $ ShelveLoc  : Factor w/ 3 levels "Bad","Good","Medium": 1 2 3 3 1 1 3 2 3 3 ...
 $ Age        : num  42 65 59 55 38 78 71 67 76 76 ...
 $ Education  : num  17 10 12 14 13 16 15 10 10 17 ...
 $ Urban      : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 2 2 1 1 ...
 $ US         : Factor w/ 2 levels "No","Yes": 2 2 2 2 1 2 1 2 1 2 ...

 

名義尺度変数を除いた全データで相関係数を計算してみる。値段(Price)が安いと売り上げ(Sales)が多い。

> round(cor.matrix,3)
             Sales CompPrice Income Advertising Population  Price    Age Education
Sales        1.000     0.064  0.152       0.270      0.050 -0.445 -0.232    -0.052
CompPrice    0.064     1.000 -0.081      -0.024     -0.095  0.585 -0.100     0.025
Income       0.152    -0.081  1.000       0.059     -0.008 -0.057 -0.005    -0.057
Advertising  0.270    -0.024  0.059       1.000      0.266  0.045 -0.005    -0.034
Population   0.050    -0.095 -0.008       0.266      1.000 -0.012 -0.043    -0.106
Price       -0.445     0.585 -0.057       0.045     -0.012  1.000 -0.102     0.012
Age         -0.232    -0.100 -0.005      -0.005     -0.043 -0.102  1.000     0.006
Education   -0.052     0.025 -0.057      -0.034     -0.106  0.012  0.006     1.000

 

VIFを計算する。10を超える多重共線性が疑われる変数はない。

> round(1/(1-cor.matrix^2),1)
            Sales CompPrice Income Advertising Population Price Age Education
Sales         Inf       1.0      1         1.1        1.0   1.2 1.1         1
CompPrice     1.0       Inf      1         1.0        1.0   1.5 1.0         1
Income        1.0       1.0    Inf         1.0        1.0   1.0 1.0         1
Advertising   1.1       1.0      1         Inf        1.1   1.0 1.0         1
Population    1.0       1.0      1         1.1        Inf   1.0 1.0         1
Price         1.2       1.5      1         1.0        1.0   Inf 1.0         1
Age           1.1       1.0      1         1.0        1.0   1.0 Inf         1
Education     1.0       1.0      1         1.0        1.0   1.0 1.0       Inf

 

重回帰分析を実施する

全変数で線形回帰を行う

結果の解釈は以下の通り。

  • Price: 1増加すると、Salesは0.058減少する。統計学的有意。
  • ShelveLoc(Good): Badに比べGoodだと、Salesは4.85増加する。統計学的有意。
  • ShelveLoc(Medium): Badに比べMediumだと、Salesは1.9増加する。統計学的有意。
  • Education: 1増加すると、Salesは0.017減少する。統計学的有意ではない。
  • Urban: Yesであると、Salesは0.24増加する。統計学的有意ではない。
  • US: Yesであると、Salesは0.995増加する。統計学的有意。
> result1 <- lm(Sales ~ Price + factor(ShelveLoc) + Education + factor(Urban) + factor(US), data=Carseats)
> summary(result1)

Call:
lm(formula = Sales ~ Price + factor(ShelveLoc) + Education + 
    factor(Urban) + factor(US), data = Carseats)

Residuals:
   Min     1Q Median     3Q    Max 
-4.943 -1.282 -0.018  1.248  4.655 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept)             11.558797   0.720310  16.047  < 2e-16 ***
Price                   -0.058017   0.003945 -14.705  < 2e-16 ***
factor(ShelveLoc)Good    4.849956   0.278368  17.423  < 2e-16 ***
factor(ShelveLoc)Medium  1.912354   0.228203   8.380 9.51e-16 ***
Education               -0.016888   0.035640  -0.474    0.636    
factor(Urban)Yes         0.242264   0.205006   1.182    0.238    
factor(US)Yes            0.995282   0.195887   5.081 5.82e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.858 on 393 degrees of freedom
Multiple R-squared:  0.5736,    Adjusted R-squared:  0.5671 
F-statistic: 88.12 on 6 and 393 DF,  p-value: < 2.2e-16

 

残差プロットを見てみる。

左に2枚はほぼ均一に広がっていて、残差に一定の傾向がないことがわかる。

右側のQQプロットはほぼ対角線上で一直線でよい傾向。

右下のてこ比のグラフでも大きく影響を与えているデータはないことが言える。

layout(t(matrix(c(1:4),nr=2)))
plot(result1)

f:id:toukeier:20190908215254p:plain

参考:

 

残差プロットの解説(英語)

strata.uga.edu

 

HeteroscedasticityとかNon-linearがよくわかる(英語)

stats.stackexchange.com

 

HeteroscedasticityとかNon-linearとかOutliersがよくわかる(英語)

docs.statwing.com

統計学的有意な変数に絞ってモデル再構築

> result2 <- lm(Sales ~ Price + factor(ShelveLoc) + factor(US), data=Carseats)
> summary(result2)

Call:
lm(formula = Sales ~ Price + factor(ShelveLoc) + factor(US), 
    data = Carseats)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.1720 -1.2587 -0.0056  1.2815  4.7462 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept)             11.476347   0.498083  23.041  < 2e-16 ***
Price                   -0.057825   0.003938 -14.683  < 2e-16 ***
factor(ShelveLoc)Good    4.827167   0.277294  17.408  < 2e-16 ***
factor(ShelveLoc)Medium  1.893360   0.227486   8.323 1.42e-15 ***
factor(US)Yes            1.013071   0.195034   5.194 3.30e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.857 on 395 degrees of freedom
Multiple R-squared:  0.5718,    Adjusted R-squared:  0.5675 
F-statistic: 131.9 on 4 and 395 DF,  p-value: < 2.2e-16

 

AIC, BICでモデルの当てはまりを比較する

AIC, BICの結果から、統計学的有意な変数のみに絞ったモデルのほうがあてはまりがよくなると言える。

> AIC(result1, result2)
        df      AIC
result1  8 1639.731
result2  6 1637.416
> BIC(result1, result2)
        df      BIC
result1  8 1671.663
result2  6 1661.364



まとめ

ISLRパッケージのCarseatsデータをもとに、売り上げを予測する重回帰モデルを作成する過程を紹介した。

利用可能なデータを全部利用した場合よりも、その中で売り上げに統計学的有意に関連した要因だけでモデルを作った場合のほうが、特にBICで見ると当てはまりがよくなっていた。

最終的なモデルは、目的・思惑によって変わる。

  • 当てはまりだけで考えればよいのか。
  • 単純なほうがよいと考えるか。
  • 他のデータにも応用できたほうが良いと考えるか。
  • ある特定の要因の売り上げに対する影響を考えたいのか。
  • どうしても考慮しなければならない要因があるか。

最終的なモデルは、データ解析者が決めることだ。