首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rollapply回归"envir“错误

rollapply回归"envir“错误
EN

Stack Overflow用户
提问于 2013-03-23 02:39:45
回答 2查看 821关注 0票数 0

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

我正在尝试使用zoo包中的rollapply应用滚动回归,遵循rollapply帮助中的示例,并不断得到我认为是简单错误,但我无法解决的错误。

如果我将上面的数据加载为"dat“,那么我会这样做。

代码语言:javascript
复制
    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")

我得到了一个错误

代码语言:javascript
复制
    Error in eval(predvars, data, env) : invalid 'envir' argument

dat应该是lm的适当输入,这个lmrollapply之外工作,所以错误发生在rollapply本身。我想这很简单,但我会感谢你的帮助。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-03-23 04:25:13

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

出现这个错误是因为您没有为lm提供一个良好的环境。d是一个长度为6的原子向量,或者您需要一个包含两列Temp和date的data.frame。例如,第一个d是:

代码语言:javascript
复制
d
9.5 9.5 9.5 9.5 9.5 9.5 

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

代码语言:javascript
复制
lm(Temp~Date, data=d)
Error in eval(predvars, data, env) : 
  numeric 'envir' arg not of length one

您没有当前滚动窗口的Date,只有这些值。

票数 1
EN

Stack Overflow用户

发布于 2013-03-23 05:57:55

试试这个:

代码语言:javascript
复制
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)))

添加: poster已添加到问题中,因此此处添加了额外的代码。注意,我们使用POISIXct表示日期/时间,因此无论输入格式如何,与coefs zoo对象关联的时间单位都以秒为单位。最后,我们从秒转换为天。请参阅?aggregate.zoo

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15577602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档