在R中处理时间序列的最佳做法是什么?

时间:2011-02-11 02:30:59

标签: r time-series

我使用R进行时间序列的统计分析。我试过谷歌搜索,但我似乎无法找到任何明确的答案。任何了解更多的人都可以指出我正确的方向吗?

示例:

假设我想对两个时间序列进行线性回归。时间序列包含每日数据,但这里可能存在差距,因此时间序列不是常规的。当然,我只想比较两个时间序列都有数据的数据点。这就是我目前要将csv文件读入数据框的内容:

library(zoo)
apples <- read.csv('/Data/apples.csv', as.is=TRUE)
oranges <- read.csv('/Data/oranges.csv', as.is=TRUE)
apples$date <- as.Date(apples$date, "%d/%m/%Y")
oranges$date <- as.Date(oranges$date, "%d/%m/%Y")
zapples <- zoo(apples$close,apples$date)
zoranges <- zoo(oranges$close,oranges$date)
zdata <- merge(zapples, zoranges, all=FALSE)
data <- as.data.frame(zdata)

有没有更明智的方法呢?

另外,我如何切片数据,例如,选择data中某个时段内的日期?

2 个答案:

答案 0 :(得分:11)

沿着这些方向尝试一些事情。这假设日期在第1列.dyn包可用于将lmglm和许多类似的回归类型函数转换为接受动物园系列的函数。写dyn$lm代替lm,如下所示:

library(dyn) # also loads zoo
fmt <- "%d/%m/%Y"
zapples <- read.zoo('apples.csv', header = TRUE, sep = ",", format = fmt)
zoranges <- read.zoo('oranges.csv', header = TRUE, sep = ",", format = fmt)
zdata <- merge(zapples, zoranges)
dyn$lm(..whatever.., zdata)

您不需要all = FALSE,因为lm会在其na.action参数的默认设置下忽略具有NAs的行。

window.zoo函数可用于切片数据。

根据您的想法,您可能还需要查看xts和quantmod包。

答案 1 :(得分:6)

为什么要将两个数据帧都转换为zoo然后合并并转换回数据帧?如果您需要数据框,只需在read.csv()

之后运行此行
data <- merge(apples, oranges, by = "date")

以下是如何进行子集化。

subset(data, date < slicemax & date > slicemin)