1

関数を使用しlmeて、約 470K の観測値と約 40 の変数を持つ大規模なデータ セットにモデルを当てはめました。このフィットのサイズ ( object.size(fit)) は 300 Mb に近く、サーバーに格納するのは現実的ではありません。目標は、ユーザーがnewdata(最大 500 の観測値を持つ) を対話的に定義し、呼び出しpredict(fit, newdata, level = 0, na.action = na.omit)て予測値を出力できるようにすることです。fit問題は、サーバー内の限られたストレージ スペース のサイズをどのように縮小できるかということです。

この投稿ですでにいくつかの方法を試しましたが、実際に必要なサイズまで縮小されません。

何か考えはありますか?ありがとう!


4

1 に答える 1

3

オブジェクトは、他のlmeクラスと同様に、呼び出されるように記述された関数に必要なすべてを含むように設計されています。必要最小限のものだけを使用したい場合は、必要なものだけを取り出してクラスを再割り当てし、正しい 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
于 2015-02-16T16:16:55.310 に答える