0

我有这个数据集 https://gist.github.com/natemiller/42eaf45747f31a6ccf9a

我正在尝试使用rollapplyzoo 包中的滚动回归,按照rollapply帮助中的示例,并继续得到我想象的一个简单错误,但我无法解决这个错误。

如果我将上述数据加载为“dat”,那么我会这样做..

    dat$Date<-as.POSIXct(dat$Date, format="%m/%d/%y %H:%M")

    library(zoo)

    roll<-rollapply(dat, width = 6, FUN = function(d) coef(lm(Temp~Date, data=d)),  align="right")

我得到了错误

    Error in eval(predvars, data, env) : invalid 'envir' argument

dat应该是 的适当输入lm,这lm在 之外有效rollapply,因此错误rollapply本身就出现了。我认为它很简单,但我会很感激帮助。谢谢

4

2 回答 2

1

尝试这个:

library(zoo)
dat <- read.zoo("sampleTempData.csv", header = TRUE, sep = ",", 
    index = 2, tz = "", format = "%m/%d/%y %H:%S")

Seq <- zoo(seq_along(dat), time(dat))
coefs <- rollapply(Seq, 6, function(ix) coef(lm(dat ~ time(dat), subset = ix)))

已添加:海报已添加到问题中,因此此处有附加代码。请注意,我们使用POISIXct日期/时间,因此与coefs动物园对象关联的时间单位以秒为单位,无论输入格式如何。最后,我们将秒数转换为天数。看?aggregate.zoo

colnames(coefs) <- c("Intercept", "slope")
Seq.coefs <- zoo(1:nrow(coefs), time(coefs))
max.coefs <- function(ix) coefs[which.max(coefs[ix, 2]), ]
ag <- aggregate(Seq.coefs, as.Date, max.coefs)
transform(ag, slope = slope * 24 * 3600)
于 2013-03-22T21:57:55.443 回答
1

首先,我认为你所做的没有意义。 您尝试使用 6 个值进行回归

发生错误是因为您没有为lm. d是一个长度为 6 的原子向量,或者您需要一个包含 2 列 Temp 和 date 的 data.frame 。例如,第一个 d 是:

d
9.5 9.5 9.5 9.5 9.5 9.5 

应用lm此 d ,您会重现错误:

lm(Temp~Date, data=d)
Error in eval(predvars, data, env) : 
  numeric 'envir' arg not of length one

你没有Date当前滚动窗口的,你只有值。

于 2013-03-22T20:25:12.573 回答