如何在不调用整个 'object' 的情况下使用 nlme::predict.lme 进行预测
How to predict with with nlme::predict.lme without calling the whole 'object'
使用 lme
函数,我在具有近 470K 个观测值和大约 40 个变量的大型数据集上拟合了一个模型。此拟合 (object.size(fit)
) 的大小接近 300 Mb,无法存储在服务器中。目标是让用户交互式地定义一个 newdata
(最多有 500 个观察值),然后调用 predict(fit, newdata, level = 0, na.action = na.omit)
来输出预测值。问题是如何在服务器中有限的存储 space 的情况下减小 fit
的大小?
已经在 this post 中尝试了几种方法,但它并没有将大小缩小到我真正需要的大小。
有什么想法吗?谢谢!
lme
对象,与任何 class 对象一样,旨在包含它们可能需要的所有内容,以便调用已编写的任何函数。如果你只想使用裸机,你只需要拉出你需要的东西并重新分配 class 以便调用正确的 S3 方法。要查看您需要哪些组件,您必须查看源代码 nlme:::predict.lme
。这是 Orthodont
数据集的示例。
library(nlme)
data(Orthodont)
# Just fit a model
fm1 <- lme(distance ~ age, data = Orthodont)
# pull out the minimal components needed for prediction
min_fm1 <- list(modelStruct = fm1$modelStruct,
dims = fm1$dims,
contrasts = fm1$contrasts,
coefficients = fm1$coefficients,
groups = fm1$groups,
call = fm1$call,
terms = fm1$terms)
# assign class otherwise the default predict method would be called
class(min_fm1) <- "lme"
# By dropping this like fm1$data you trim it down quite a bit
object.size(fm1)
63880 bytes
object.size(min_fm1)
22992 bytes
# make sure output identical
identical(predict(min_fm1, Orthodont, level = 0, na.action = na.omit),
predict(fm1, Orthodont, level = 0, na.action = na.omit))
[1] TRUE
使用 lme
函数,我在具有近 470K 个观测值和大约 40 个变量的大型数据集上拟合了一个模型。此拟合 (object.size(fit)
) 的大小接近 300 Mb,无法存储在服务器中。目标是让用户交互式地定义一个 newdata
(最多有 500 个观察值),然后调用 predict(fit, newdata, level = 0, na.action = na.omit)
来输出预测值。问题是如何在服务器中有限的存储 space 的情况下减小 fit
的大小?
已经在 this post 中尝试了几种方法,但它并没有将大小缩小到我真正需要的大小。
有什么想法吗?谢谢!
lme
对象,与任何 class 对象一样,旨在包含它们可能需要的所有内容,以便调用已编写的任何函数。如果你只想使用裸机,你只需要拉出你需要的东西并重新分配 class 以便调用正确的 S3 方法。要查看您需要哪些组件,您必须查看源代码 nlme:::predict.lme
。这是 Orthodont
数据集的示例。
library(nlme)
data(Orthodont)
# Just fit a model
fm1 <- lme(distance ~ age, data = Orthodont)
# pull out the minimal components needed for prediction
min_fm1 <- list(modelStruct = fm1$modelStruct,
dims = fm1$dims,
contrasts = fm1$contrasts,
coefficients = fm1$coefficients,
groups = fm1$groups,
call = fm1$call,
terms = fm1$terms)
# assign class otherwise the default predict method would be called
class(min_fm1) <- "lme"
# By dropping this like fm1$data you trim it down quite a bit
object.size(fm1)
63880 bytes
object.size(min_fm1)
22992 bytes
# make sure output identical
identical(predict(min_fm1, Orthodont, level = 0, na.action = na.omit),
predict(fm1, Orthodont, level = 0, na.action = na.omit))
[1] TRUE