「複数の学習データから行う回帰分析」なんだけど...
コメントの押し売りをするつもりはないんだけど,コメントの受付方法法くらい用意しておく方がよいのではないかと思います。
筆者は,update という関数名からなのか,「update するたびに素晴らしい結果が約束される」というような幻想を持っているのかな?
update は,以前に行った解析の主として formula を受け継いで,再度分析するということでは?再度の分析が必要なのは,データがアップデートされた(間違いが修正された,観察が増えた)ときに,最新のデータで分析結果をアップデートするということではないか?
例えば,以下のような例。
その時点で得られているデータに基づいて,回帰分析を行う。
> (d <- data.frame(x=c(2,1,3,4,5), y=c(3,5,4,7,9)))
x y
1 2 3
2 1 5
3 3 4
4 4 7
5 5 9
> lm1 <- lm(y ~ x, data=d)
> summary(lm1)
Call:
lm(formula = y ~ x, data = d)
Residuals:
1 2 3 4 5
-1.4 1.8 -1.6 0.2 1.0
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.0000 1.7963 1.113 0.347
x 1.2000 0.5416 2.216 0.114
Residual standard error: 1.713 on 3 degrees of freedom
Multiple R-squared: 0.6207, Adjusted R-squared: 0.4943
F-statistic: 4.909 on 1 and 3 DF, p-value: 0.1135
新たにデータが加わった。(同じ名前でもよいが,データフレームの名前を付け替えた)
> (d2 <- rbind(d, c(6, 12)))
x y
1 2 3
2 1 5
3 3 4
4 4 7
5 5 9
6 6 12
新たなデータを使って,formula はそのまま(lm1 に記録されているので,そこから取り出して使う)
> summary(update(lm1, data=d2))
Call:
lm(formula = y ~ x, data = d2)
Residuals:
1 2 3 4 5 6
-1.26667 2.33333 -1.86667 -0.46667 -0.06667 1.33333
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.0667 1.6479 0.647 0.5527
x 1.6000 0.4231 3.781 0.0194
Residual standard error: 1.77 on 4 degrees of freedom
Multiple R-squared: 0.7814, Adjusted R-squared: 0.7267
F-statistic: 14.3 on 1 and 4 DF, p-value: 0.01941
しかし,その結果は,最新のデータフレームを使って,lm1 を得たときと同じ formula を使って lm 関数により解を求めたものと,全く同じなのだ。
> summary(lm(y ~ x, data=d2))
Call:
lm(formula = y ~ x, data = d2)
Residuals:
1 2 3 4 5 6
-1.26667 2.33333 -1.86667 -0.46667 -0.06667 1.33333
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.0667 1.6479 0.647 0.5527
x 1.6000 0.4231 3.781 0.0194
Residual standard error: 1.77 on 4 degrees of freedom
Multiple R-squared: 0.7814, Adjusted R-squared: 0.7267
F-statistic: 14.3 on 1 and 4 DF, p-value: 0.01941
formula が長ったらしくたって,それを記録しておいて再度使えば良いだけだし。
lm オブジェクトとして保管しておき,その中の formula を使うなどということは,あまりメリットはないように思うが????