首先,如果这个问题已经得到回答,我深表歉意。这是我在 stackoverflow 上的第一篇文章。
我有一个股票市场数据面板,其结构如本工作示例所示:
d <- data.frame(Time = rep(seq.Date( Sys.Date(), length=10, by="day" )),
Stock = rep(LETTERS[1:3], each=10 ),
x1 = rep(sample(10:30, 10), 3),
x2 = rep(sample(10:30, 10), 3),
x3 = rep(sample(10:30, 10), 3))
基本上我想用 x1 作为因变量和回归量 x3 以及 x2 的滞后和领先来估计时间序列回归。我想使用 Newey West 标准误差对样本中的每只股票执行此操作。
在这里看了几个帖子之后,我设法提出了以下几点:
因为我正在使用时间序列并且想要使用滞后和领先运算符,所以我读到我应该使用zoo
orxts
格式(我选择了格式,因为这与我想要使用zoo
的函数兼容):dyn$lm
d.z <- zoo(data.matrix(d[-1]), d$Time)
请注意,我将 Stock 列转换为数字,因为该zoo
包需要所有数字变量。
但是,这会带来一条错误消息:
Warning message:
In zoo(data.matrix(d[-1]), d$Time):some methods for “zoo” objects do not work
if the index entries in ‘order.by’ are not unique.
我认为这没有问题,因为最终我想分别估计每只股票的回归,这将解决问题。
对于这个对象,我想估计每只股票在 myLm 中的回归。
myLm <- function(formula,df) {
temp.lm <- dyn$lm(formula,data=df)
temp.summ <- summary(temp.lm)
temp.summ$coefficients <- unclass(coeftest(temp.lm, vcov. = NeweyWest))
lmOut<-data.frame(t(temp.summ$coefficients))
return(lmOut)}
使用plyr
包我尝试按库存拆分功能:
outDf <- ddply(d.z, "Stock", function(df) myLm(x1 ~ lag(x2, -1) + lag(x2, +1) + x3, df))
不幸的是,这带来了另一个错误:
Error in eval.quoted(.variables, data) :
envir must be either NULL, a list, or an environment.
我在这里做错了什么?