目的重回帰分析の分散分析表において,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