我使用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
中某个时段内的日期?
答案 0 :(得分:11)
沿着这些方向尝试一些事情。这假设日期在第1列.dyn包可用于将lm
,glm
和许多类似的回归类型函数转换为接受动物园系列的函数。写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)