为什么使用Zoo对象进行回归会产生无法识别的结果

时间:2014-03-20 12:42:25

标签: r regression zoo

我的同事和我有两个数据集,每个数据集每天有1次观察,但是天数 在每个数据集中不是连续的,并且在两个数据集之间不一致。

我们将每个转换为动物园对象并合并,从时间索引中删除那些日子 在第二个数据集中有观察但在第一个和相反的情况下没有, 用先前的观察(使用locf)填充第二个缺失的观测值

当我们运行回归时,我们没有得到每个自变量的预期的一个系数。 因为我们是动物园的新手(而且我还是R的新手),我们在这里找到了有关SO的相关主题: Error when doing linear regression using zoo objects ... Error in `$<-.zoo`(`*tmp*` 在这里:regressions with xts in R,但是 似乎没有什么是相同的,尽管我们尝试了各自提出的各种建议,包括使用dyn包。

当我们运行summary(regression_model)时,我们会继续获得无法识别的结果。我们的主要问题是如何使用典型的汇总统计数据进行回归。第二个问题是回归中的每个自变量是否必须表示为滞后(k = 0),这似乎是dyn文档所建议的。

从更大的两组数据中抽取的示例如下:

按日期排列的XYZ股票的价格数据

Date <- c("1/2/13", "1/3/13", "1/4/13", "1/7/13", "1/8/13", "1/9/13", "1/10/13", "1/11/13", "1/14/13", "1/15/13")
XYZ <- c(65.73, 66.85, 66.92, 66.60, 66.07, 65.90, 66.06, 66.11, 65.12, 65.06)

按日期排列的Nx数据,但日期与股票价格数据略有不同

N.Date <- c("1/2/13", "1/3/13", "1/4/13", "1/6/13", "1/7/13", "1/8/13", "1/10/13", "1/11/13", "1/12/13", "1/14/13")
ACR <- c(50.2, NA, 35.2, 67.9, NA, NA, 42.5, 45.1, 34.0, 61.9)
BCR <- c(14.3, NA, 16.5, 22.1, NA, NA, 18.4, 24.2, 19.8, 15.4)
CCR <- c(00.0, NA, 33.6, 41.2, NA, NA, 25.6, 00.0, 11.3, 32.0)

创建data.frames

stock <- data.frame (Date, XYZ)
Nx <- data.frame (N.Date, ACR, BCR, CCR)

从data.frames

创建zoo对象
z.stock <- zoo(stock, as.Date(stock[, 1], format = "%m/%d/%y"))
z.Nx <- zoo(Nx, as.Date(Nx[, 1], format = "%m/%d/%y"))

合并zoo对象,消除Nx zoo对象中的任何缺失数据

z.merge <- merge(z.stock, z.Nx, all = c(TRUE, FALSE))

用最后一次观察结果替换丢失的数据

nmd <- na.locf(z.merge, maxgap = Inf)

运行回归

mdl <- dyn$lm(nmd$XYZ ~ lag(nmd$XYZ, -1) + lag(nmd$ACR, 0) + lag(nmd$BCR, 0) +lag(nmd$CCR, 0)))
summary(mdl)

1 个答案:

答案 0 :(得分:1)

问题中的代码是将日期放在数据和索引中,而不仅仅放在索引中。

试试这个:

fmt <- "%m/%d/%y"
z.stock <- zoo(cbind(XYZ), as.Date(Date, fmt))
z.Nx <- zoo(cbind(ACR, BCR, CCR), as.Date(N.Date, fmt))

z.merge <- merge(z.stock, z.Nx, all = c(TRUE, FALSE))
nmd <- na.locf(z.merge)

dyn$lm(XYZ ~ lag(XYZ, -1) + ACR + BCR + CCR, nmd)