0

この問題にアプローチする方法を理解するのに苦労しています。個別のサイト (リンク 5) に分割しているデータ フレームがあります。分割したら、基本的にサブセットで線形回帰モデルを実行したいと思います。ここに私が取り組んでいるコードがありますが、それは間違いなく正しくありません。また、モデルの結果を新しいデータ フレームに出力して、各サイトにモデル パラメーターの推定値を含む 1 つの行が含まれるようにできれば素晴らしいと思います。これは単なる希望であり、現時点では必要ではありません。助けてくれてありがとう!

 les_events <- split(les, les$link5)

 result <- lapply(les_events) {

   lm1 <-lm(cpe~K,data=les_events)
   coef <- coef(lm1)
   q.hat <- -coef(lm1)[2] 
   les_events$N0.hat <- coef(lm1[1]/q.hat)
}
4

1 に答える 1

3

いくつかの問題があります。

  • 関数 (FUN引数) を渡していないlapply
  • あなたの閉鎖(内部のビット{}はほとんどですが、機能に必要な本体ではありません)

次のようなものは、モデルから係数を返します

 result <- lapply(les_events, function(DD){
   lm1 <-lm(cpe~K,data=DD)
   coef <- coef(lm1)

   data.frame(as.list(coef))
  })

これにより、各係数の列を含む data.frames のリストが返されます。

lapply(les_events, lm, formula = 'cpe~K')

は線形モデル オブジェクトのリストを返しますが、これはより便利な場合があります。

より一般的なsplit / apply / combineアプローチの場合はplyr、またはdata.table

データ表

library(data.table)
DT <- data.table(les)

result <- les[, {lm1 <- lm(cpe ~ K, data = .SD)
                 as.list(lm1)}, by = link5]

プライヤー

library(plyr)


result <- ddply(les, .(link5), function(DD){
   lm1 <-lm(cpe~K,data=DD)
   coef <- coef(lm1)

   data.frame(as.list(coef))
  })

# or to return a list of linear model objects
dlply(les, link5, function(DD){ lm(cpe ~K, data =DD)})
于 2013-04-16T00:03:25.370 に答える