2

データのサブセットに対してddply実行するために使用しています。glm推定 Y 値にアクセスするのが困難です。以下のコードを使用してモデル パラメーターの推定値を取得できますが、適合値を取得しようとしたすべてのバリエーションが不足しています。モデルの従属変数と独立変数は、操作で使用される変数glmと同様に列ベクトルです。"Dmsa"ddply

モデルを定義します。

Model <- function(df){coef(glm(Y~D+O+B+A+log(M), family=poisson(link="log"), data=df))}

サブセットでモデルを実行します。

Modrpt <- ddply(msadata, "Dmsa", Model)

PrintModrptはモデル係数を提供しますが、Y 推定値は提供しません。

を使用していない場合は、次のコードを使用して推定 Y 値にddplyアクセスできます。glm

Model <- glm(Y~D+O+B+A+log(M), family=poisson(link="log"), data=msadata)

fits <- Model$fitted.values

サブセットの適合値を取得するために次の両方を試しましたが、うまくいきませんでした:

fits <- fitted.values(ddply(msadata, "Dmsa", Model))

fits <- ddply(msadata, "Dmsa", fitted.values(Model))

これはコーディングが非常に簡単だと確信しています...残念ながら、私はちょうどRを学んでいます.誰かが私が間違っている場所を知っていますか?

4

2 に答える 2

3

ddplyたとえば、呼び出しで匿名関数を使用できます

require(plyr)
data(iris)
model <- function(df){
    lm( Petal.Length ~ Sepal.Length + Sepal.Width , data = df )
    }

ddply( iris , "Species" , function(x) fitted.values( model(x) ) ) 

modelこれには、関数を書き直すことなく、次のようにしてcoef値を取得できるという利点があります。

    ddply( iris , "Species" , function(x) coef( model(x) ) ) 

@Jamesが指摘しているように、サイズが異なる分割がある場合、これは失敗しますdlply。各サブセットの結果を独自のリスト要素に入れる方が適切です。

(モデル例の統計的関連性や正確性については主張しません。これは単なる例です)

于 2013-08-06T14:04:52.817 に答える
0

これを次の 2 つの手順で行うことをお勧めします。

library(plyr)

# First first the models
models <- dlply(iris, "Species", lm, 
  formula = Petal.Length ~ Sepal.Length + Sepal.Width )

# Next, extract the fitted values
ldply(models, fitted.values)

# Or maybe
ldply(models, as.data.frame(fitted.values))
于 2013-08-07T01:39:10.213 に答える