lm.wfit
(и .lm.fit
) имеет значительные преимущества в скорости перед lm
, если мы можем обойтись без дополнительных вычислений последнего.
fo <- mpg ~ hp
X <- model.matrix(fo, mtcars)
microbenchmark::microbenchmark(flm=lm <-
lm(fo, mtcars[mtcars$am == 1, ],
weights=rep(1, 13)),
flmw=lmw <-
lm.wfit(X[mtcars$am == 1, ], mtcars$mpg[mtcars$am == 1],
w=rep(1, 13)))
# Unit: microseconds
# expr min lq mean median uq max neval cld
# flm 935.328 951.2735 994.7719 957.2695 1006.128 1333.339 100 b
# flmw 56.895 60.3400 66.2028 64.2940 66.463 186.250 100 a
stopifnot(lm$coefficients == lmw$coefficients)
Часто все идет хорошо, но теперь мне нужно применить predict
со всеми данными, как в этом примере.
predict(lm, mtcars)
# [...]
predict(lmw, mtcars)
# Error in UseMethod("predict") :
# no applicable method for 'predict' applied to an object of class "list"
Возможно ли это даже после использования этого ограниченного lm.wfit
? Если так, то как?