0

我在弄清楚如何解决这个问题时遇到了一些困难。我有一个数据框,我将其拆分为不同的站点(link5)。一旦拆分,我基本上想对子集运行线性回归模型。这是我正在使用的代码,但它绝对不正确。此外,如果我可以将模型结果输出到一个新的数据框,这样每个站点都会有一行带有模型参数估计值,那就太好了——这只是一个愿望,而不是现在的必需品。感谢您的任何帮助!

 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方法,请使用plyrdata.table

数据表

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

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

plyr

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 回答