重回帰分析における分散分析表 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