2016-09-14 8 views
-3

Y、X1、X2、Vの列を持つデータセットがあります.Y、X1とX2は連続していますが、Vはカテゴリ変数です。 Vが10個のカテゴリを持つと仮定して、10個の線形回帰モデルを作成し、その結果(係数、p値、R-Sqなど)を別のテーブルに保存したいと考えています。 forループを使わずにdata.tableで処理する方法はありますか?ありがとう。ループなしで回帰モデルの配列を生成

+3

nlmeパッケージの 'lmList'を参照してください。 SOに関する質問をするときに再現可能な例を提供する方法については、[mcve]を参照してください。 –

+0

ありがとうございます。私はlmListを試してみました。私はcoeffsだけを取得しましたが、私はR-Sq、p値などを得る方法を理解することができると確信しています – mlg

+0

http://stackoverflow.com/questions/23501852/print-r-squared-for-all- of-the-the-models-fit-with-lmlist –

答えて

0

broom packageは、このタイプの問題のために正確に存在します。簡単な保管と比較のために、モデルの出力をきちんとしたデータフレームに「整理」します。ほぼ同じ問題を解決するためにbroomdplyrを使用するexampleがここにあります。これはdplyrを使用してデータをカテゴリ変数でグループ化し、モデルを各グループに適合させ、わずか数行のコードで係数をdata.frameに抽出します。私はdata.tableのグループ化された操作に慣れていませんが、パッケージと同様のことを実行することは可能かもしれません。

さらに、broomは、適合度メトリックおよび他のサマリー統計を計算するために使用できるaugment関数を持っています。あなたが追加パッケージをインストールせずにそれをしたい場合は

あるいは、あなたはおそらく別のlapplyて(結果を抽出し、リストにlapply、(split機能を使用して)リストにモデリングプロセスを、あなたのデータフレームを分割することができることlmオブジェクトから情報を抽出します)、次にrbindすべてをまとめます。

3

ベースR関数byはあなたが望むものです。 by機能で

# make up some sample data 
dataSet <- data.frame(Y = iris$Sepal.Length, 
         X1 = iris$Sepal.Width, 
         X2 = iris$Petal.Length, 
         V = iris$Species) 
# apply the `lm` function by the value of `V` 
by(data = dataSet[c("Y","X1","X2")], 
    INDICES = dataSet$V, 
    FUN = lm, 
    formula = Y ~ .) 

dataはあなたに関数を適用するデータです。 INDICESは、どのようにデータを分割するかを示すdataの各行に対応する1つの値を持つファクタまたはファクタのベクトルです。 FUNは、データのサブセットに適用する関数です。この場合、lm()は、データをモデル化する方法を示す特別なパラメータformulaを必要とします。したがって、ファンクションでは、そのままformulaパラメータとして渡すことができます。

関連する問題