重回帰分析における分散分析表     Last modified: Apr 16, 2014

目的
重回帰分析の分散分析表において,lm() の第 1 引数を formula で指定したときに,返されるオブジェクトを anova() で使うと,stats:::print.anova では,個々の変数についての結果が表示される。
> ans <- lm(Sepal.Length ~ Petal.Length+Petal.Width+Sepal.Width, data=iris)
> anova(ans)
Analysis of Variance Table

Response: Sepal.Length
              Df Sum Sq Mean Sq  F value  Pr(>F)
Petal.Length   1 77.643  77.643 784.7424 < 2e-16
Petal.Width    1  0.644   0.644   6.5124 0.01174
Sepal.Width    1  9.435   9.435  95.3627 < 2e-16
Residuals    146 14.445   0.099                 
これは教科書的(一般的)な結果表とは違うので,少々困ることもある。そこで,以下に示すような一般的な表を作る。
> lm.anova(ans)
               Df Sum Sq Mean Sq F value    Pr(>F)
Regression 87.723      3 29.2410  295.54 < 2.2e-16
Residuals  14.445    146  0.0989                  

使用法

lm.anova(object)

引数

object     lm 関数が返すオブジェクト

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/lm-anova.R", encoding="euc-jp")

# 重回帰分析における分散分析表
lm.anova <- function(obj) {
    df.reg <- obj$rank - 1
    df.res <- obj$df.residual
    f <- obj$fitted.values
    ss.reg <- sum((f - mean(f))^2)
    ss.res <- sum(obj$residuals^2)
    ms.reg <- ss.reg / df.reg
    ms.res <- ss.res / df.res
    F <- ms.reg / ms.res
    p.value <- pf(F, df.reg, df.res, lower.tail=FALSE)
    result <- data.frame(df=c(df.reg, df.res), SS=c(ss.reg, ss.res),
                         MS=c(ms.reg, ms.res), F=c(F, NA),
                         P=c(p.value, NA))
    colnames(result) <- c("Df", "Sum Sq", "Mean Sq", "F value", "Pr(>F)")
    rownames(result) <- c("Regression", "Residuals")
    class(result) <- c("anova", "data.frame")
    return(result)
}


使用例

> ans <- lm(Sepal.Length ~ Petal.Length+Petal.Width+Sepal.Width, data=iris)

> lm.anova(ans)

               Df Sum Sq Mean Sq F value    Pr(>F)
Regression 87.723      3 29.2410  295.54 < 2.2e-16
Residuals  14.445    146  0.0989                  


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh