15

data.table パッケージは、速度の点で非常に役立ちます。しかし、線形回帰からの出力を実際に使用するのに問題があります。data.table 出力を plyr パッケージの出力と同じくらいきれい/便利にする簡単な方法はありますか? 以下は例です。ありがとうございました!

library('data.table');
library('plyr');

REG <- data.table(ID=c(rep('Frank',5),rep('Tony',5),rep('Ed',5)), y=rnorm(15), x=rnorm(15), z=rnorm(15));
REG;

ddply(REG, .(ID), function(x) coef(lm(y ~ x + z, data=x)));

REG[, coef(lm(y ~ x + z)), by=ID];

data.table 係数推定値は 1 つの列に出力されますが、plyr/ddply 係数推定値は適切にラベル付けされた複数の列に出力されます。

data.table を使用して回帰を 3 回実行できることはわかっていますが、それは非常に非効率的です。でも、私は間違っているかもしれません。

REG[, Intercept=coef(lm(y ~ x + z))[1],
      x        =coef(lm(y ~ x + z))[2],
      z        =coef(lm(y ~ x + z))[3], by=ID];
4

1 に答える 1

14

これを試して:

> REG[, as.list(coef(lm(y ~ x + z))), by=ID];
        ID (Intercept)           x         z
[1,] Frank  -0.2928611  0.07215896  1.835106
[2,]  Tony   0.9120795 -1.11153056  2.041260
[3,]    Ed   1.0498359  5.77131778 -1.253741

この質問が1週間も経たないうちに尋ねられたというしつこい感じがありますが、試してみたときにこのアプローチにたどり着いたとは思いません。答えがこれほどコンパクトだったので覚えていません。

ああ、それは.. r-helpにあります。マシューは、必要に応じて、これの正当性についてコメントできます。メッセージは、リストを返す関数では次元が削除されないということだと思います。興味深いのは、使用list(coef(lm(...))が期待どおりに成功しなかったことです。

于 2012-06-29T18:33:21.147 に答える