y <- c(8,13,12,11,9,8,7,13,11,13)
x1 <- c(-1,-1,-1,-1,1,1,1,1,0,0)
x2 <- c(-1,1,1,1,-1,-1,-1,1,0,0)
m.f <- lm(y~x1+x2)
m.r <- lm(y~factor(x1):factor(x2))
anova(m.f, m.r)
最後一列即為所求。
重點就在於 m.r 的自變項是一個「所有 x1 與 x2 的組合」。
在 R 中的 formula 採取「:」字符有相同功能。
如果不夠直白的話,可以看看以下的操作,結果是一樣的。
x12 <- paste(x1, x2, sep="&")
m.r1 <- lm(y~factor(x12))
anova(m.f, m.r1)
※ 引述《DrRd (就這樣吧)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 用R來執行多元迴歸的lack of fit test
: 在網路上找到的方法是單迴歸用的,多元迴歸不知道怎麼做
: [程式範例]:
: reduce.mod = lm(y ~ x)
: full.mod = lm(y ~ 0 + as.factor(x))
: anova(reduce.mod, full.mod)
: 但多元迴歸不能把full.mod寫成 lm(y ~ 0 + as.factor(x1) + as.factor(x2))
: 這樣出來的自由度是錯的
: [關鍵字]:
:
: lack of fit
: