線形モデルをデータのサブセットに適合させたいシミュレーションを実行しています。
library(reshape2)
library(plyr)
all <- mutate(iris, mean_width = ave(Petal.Width, Petal.Length))
str(all)
## want to minimise sum(|y*polynomial(x) - z|^2) for each id
## in the region where x != exclude
weighted_difference <- function(d, n=4, exclude = c(2.5, 3), ...){
sub <- subset(d, !(Sepal.Width > exclude[1] &
Sepal.Width < exclude[2]))
fit <- lm(mean_width ~ I(poly(Petal.Length, n, raw=TRUE)*Petal.Width) + Petal.Width - 1, data = sub)
mutate(d, predict = predict(fit, d),
difference = Petal.Width - predict )
}
results <- ddply(all, "Species", weighted_difference)
これは機能しますが、最初にフィットのために新しい data.frame を作成する、より単純なアプローチを使用したいと思います。
exclude <- c(3, 6)
sub <- subset(all, !(x > exclude[1] & x < exclude[2]))
すべてのケースに適合し、
fits <- lm(z ~ I(poly(x, n, raw=TRUE)*y) + y - 1 | id, data = sub)
(これ... | id
は明らかに無効な構文です)
一度に完全なデータに対して予測を使用し、
all <- mutate(all, predict = predict(fits, all), difference = y - predict )
lm()
こういう使い方のコツってありますか?それともより良い解決策ですか?ありがとう。