第4章 重回帰分析

最終更新日 2013 09 14

    説明変数を複数用意する

  • お弁当の売上を,「気温」と「曜日」という2つの変数を使って説明します.

    単回帰分析の場合と同様 lm() 関数を使います.この場合,説明変数を + 記号で並べていきます.この例では説明変数は2つですが,それ以上でもかまいません.

    > bento.lm <- lm (売上 ~  気温 +  曜日, data = bentoC)
    > summary (bento.lm)
    
    Call:
    lm(formula = 売上 ~ 気温 + 曜日, data = bentoC)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -20.421  -5.336   1.137   7.799  19.534 
    
    Coefficients:
                Estimate    Std. Error  t value   Pr(>|t|)    
    (Intercept)   37.530     19.026     1.973     0.06124 .  
    気温           9.542      1.412     6.759     8.59e-07 ***
    曜日2火        5.444      7.847     0.694     0.49506    
    曜日3水       12.704      7.589     1.674     0.10830    
    曜日4木        7.539      7.402     1.019     0.31946    
    曜日5金       29.614      8.782     3.372     0.00275 ** 
    曜日6土       36.498     10.186     3.583     0.00166 ** 
    曜日7日       44.806     12.634     3.546     0.00181 ** 
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 11.42 on 22 degrees of freedom
    Multiple R-squared:  0.9357,	Adjusted R-squared:  0.9152 
    F-statistic:  45.7 on 7 and 22 DF,  p-value: 1.17e-11
    
    

    summary()関数の出力は大きく4つにわかれます.

    まずCall:の部分は,この出力を出すための命令の確認です.

    Residuals:は,実際のデータ(入力データ)と,回帰モデルが予測する消費量とのズレについて,その最小値,第1四分位数,中央値,第3四分位数,最大値を求めた結果です.回帰式の精度などを検討する際に参照します.

    Coefficients:は,説明変数のそれぞれについて計算された係数の推定値 ( Estimate ) です. (Intercept)は切片,「曜日2火」は,曜日が2つ目の火曜日についての推定値です.
    となりの「Std. Error」は推定値の誤差,「t value」はt値,「Pr(>|t|)」はt値の確率です.

    出力の最後にあるのは,この回帰モデルの妥当性を表す「決定係数 (Multiple R-squared)」,「自由度調整済み決定係数(Adjusted R-squared)」,「F統計検定量(F-statistic)」です.


  • 予測

    回帰モデルから,予測値を計算してみます.上記の出力にある係数を使います.

    > 9.542 * 16.0 + 5.444 * 0 + 12.704 * 0 + 7.539 * 0 + 29.614 * 1 + 36.498 * 0 + 44.806 * 0 + 37.53
    [1] 219.816
    


  • predict()関数

    あるいは,predict()関数を使って予測することも可能です.この場合,data.frame()関数で仮のデータを作成します.

    >  predict (bento.lm, newdata = data.frame (気温 = 16, 曜日 = "5金"))
           1 
    219.8226 
    

    「newdata = 」の右に予測したい情報を指定します.このさいdata.frame()という関数を使います."5金"というのは,週の五日目である金曜日という意味です.