6

私はlm()、Rの複数(約100万)の応答変数に対して、複数の回帰モデルを近似するために使用しました。

allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)

これにより、クラス「mlm」のオブジェクトが返されます。これは、すべてのモデルを含む巨大なオブジェクトのようなものです。各モデルの残差平方和を取得したいのですが、これは次を使用して実行できます。

summaries <- summary(allModels)
rss1s <- sapply(summaries, function(a) return(a$sigma))

私の問題は、「summary」関数が他の多くのものも計算するため、非常に遅いと思うことです。モデルの残差平方和だけを抽出するより速い方法があるかどうか疑問に思っていますか?

ありがとう!

4

2 に答える 2

5

オブジェクトの出力には成分の残差があるlmため、残差平方和は。で得られsum(output$residuals^2)ます。

編集:あなたは実際に要約からシグマを取り出しています、それは sqrt(sum(output$residuals^2)/output$df.residuals)

すべてのモデルで使用

sapply(allModels, function(a) sqrt(sum(a$residuals^2)/a$df.residuals)))

于 2013-03-06T18:24:06.297 に答える
0

多くの人にはめったに知られていませんが、ジェネリック関数devianceは「lm」モデルと「mlm」モデルの残差平方和を計算できます。fitあなたのフィットモデルになりましょう、あなたはすることができます

sqrt(deviance(fit) / fit$df.residual)

ここには2つの利点があります。

  1. colSumsジェネリック関数は、ループベース(を介したソリューションのように)ではなく、完全に「ベクトル化」されています(を使用sapply)。
  2. ジェネリック関数は、加重回帰の場合を処理する方法を知っています。
于 2016-10-07T17:57:02.867 に答える