在 R 中处理时间序列的最佳实践是啥?

Posted

技术标签:

【中文标题】在 R 中处理时间序列的最佳实践是啥?【英文标题】:What is the best practice of handling time series in R?在 R 中处理时间序列的最佳实践是什么? 【发布时间】:2011-02-11 02:30:58 【问题描述】:

我正在使用 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中日期在一定时期内的条目?

【问题讨论】:

代码不完全正确,我们没有你的 csv 文件……也许是一些虚拟数据? 我修正了代码中的错别字。但我真的看不出虚拟数据的意义。只需获取任何随机数据并将其放入两列 csv 文件中,一列命名为日期,另一列关闭。 原因是您的问题不会被认为是低质量的,因此响应者可以轻松运行代码,并且多个响应者都使用相同的输入运行它。由于这是您可以在不知道问题答案的情况下自己做的事情,因此通常认为您有责任提供此内容。 是的。但由于我要求最佳实践(我没有任何特殊问题要处理,我只是想知道是否有更直接的方法来实现相同的结果),我真的认为没有必要。任何习惯在 R 中使用时间序列的人都可以了解代码的要点,然后加上他的 0.02 美元。不过还是感谢您的回答。 【参考方案1】:

尝试这些方法。这假设日期在第 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 参数的默认设置下忽略具有NA 的行。

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

根据您想要做什么,您可能还想查看 xts 和 quantmod 包。

【讨论】:

我不知道 dyn 包,确实很好。【参考方案2】:

为什么将两个数据框都转换为zoo,然后合并并转换回数据框?如果你想要一个数据框,只需在 read.csv() 之后运行这一行。

data <- merge(apples, oranges, by = "date")

这是子集化的方法。

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

【讨论】:

以上是关于在 R 中处理时间序列的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中处理时间的最佳做法是啥?

在固定的 UILabel 中处理长文本的最佳实践是啥

在 git 存储库中处理密码的最佳实践是啥?

在 Web 服务中处理 id 的最佳实践是啥?

处理 javascript 和 css 文件的最佳实践是啥

JavaScript 错误处理的最佳实践是啥?