《量化金融R语言初级教程》一1.1 使用时间序列数据

简介:

本节书摘来异步社区《量化金融R语言初级教程》一书中的第1章,第1.1节,作者: 【匈牙利】Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.1 使用时间序列数据

用于存储时间序列数据的基本R类有vector、matrix、data.frame以及ts对象。但是,它们可以存储在这些对象中的数据类型相当有限。并且,这些表达方式提供的方法范围也很有限。不过幸运的是,同名的包中的特定对象,zoo、xts或timeSeries对象,对时间序列数据提供了更一般的表达形式。

对每个时间序列分析问题都创建时间序列对象是不必要的,但是复杂程度较高的分析则需要创建时间序列对象。你可以先将时间序列数据存储成向量形式,再计算数据的均值和方差,但如果你想用decompose对数据做季节分解,那就必须将数据存储在时间序列对象中。

下面的例子假定你使用了zoo对象,因为zoo对象是使用最广泛的包之一。在使用zoo对象之前,需要使用下面的命令安装并载入zoo包(如果你已经安装,那只需要载入它)。

>install.packages("zoo")
>library("zoo")

为了熟悉可用方法,我们使用苹果公司股票的日收盘价,创建一个名为appl的zoo对象,存储在CSV文件aapl.csv中。表格的每一行包括一个日期和一个价格,两项通过逗号分隔。第一行包含了列名(Date和Close)。日期格式符合ISO8601推荐的基本标准符号(YYYY-MM-DD)。收盘价根据股票的拆分、股利以及相关改变进行调整。

小提示 下载示例代码
你对于在http://www.packtpub.com网站购买的所有Packt图书,都可以用自己在的账户从网站下载示例代码。如果你从其他途径购买了书籍,则可以访问http://www.packtpub.com/support并注册账号,示例代码会直接通过电子邮件发送给你。

使用下面的命令,可以从当前工作目录载入数据。

> aapl<-read.zoo("aapl.csv",
+  sep=",", header = TRUE, format  = "%Y-%m-%d")

为了初步了解数据,我们画出股票价格图形,并为整个图形设定一个标题(使用main参数)和对x轴和y轴标注了名称(分别使用xlab和ylab)。

> plot(aapl, main = "APPLE Closing Prices on NASDAQ",
+  ylab = "Price (USD)", xlab = "Date")

使用下面的命令,我们可以提取时间序列开头部分或结尾部分。

> head(aapl)
2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-10
   27.58   25.25   25.62   23.40   24.51   24.08
> tail(aapl)
2013-04-17 2013-04-18 2013-04-19 2013-04-22 2013-04-23 2013-04-24
   402.80   392.05   390.53   398.67   406.13   405.46

使用下面的命令,可以找出苹果股价在所有时间中的高点,和这个高点发生的日期。

> aapl[which.max(aapl)]
2012-09-19
  694.86

当处理时间序列时,通常收益率更受关注,价格却不会。其原因是收益率通常平稳。因此我们会计算简单收益率或连续复合收益率(按百分比的形式)。

> ret_simple <- diff(aapl) / lag(aapl, k = -1) * 100
> ret_cont  <- diff(log(aapl)) * 100

同时,我们也可以得到简单收益率的概括统计。在这里,我们使用coredata方法来表明我们仅仅关注股票价格,而非索引(日期)。

> summary(coredata(ret_simple))
   Min. 1st Qu. Median  Mean 3rd Qu.   Max.
-51.86000 -1.32500 0.07901 0.12530 1.55300 13.91000

可以看出,最大的单日损失是−51.86%。我们还可以使用下面的命令获得这个损失发生的日期。

> ret_simple[which.min(ret_simple)]
2000-09-29
 -51.85888

上网快速搜索可以发现,这个股价的剧烈变动缘于一个盈利预警的发布。我们可以画出直方图来加深理解日收益率的相关频率。对收益率数据进行分组时,我们可以使用break参数来指定每组的元素个数。

> hist(ret_simple, breaks=100, main = "Histogram of Simple  Returns",
+ xlab="%")

我们也可以把分析限定于时间序列的一个子集(window)中。比如,苹果股价在2013年的最高点可以通过运行下面的命令的找到。

> aapl_2013 <- window(aapl, start = '2013-01-01', end = '2013-
12-31')
> aapl_2013[which.max(aapl_2013)]
2013-01-02
  545.85

从风险管理的角度看,收益率分布的分位数很有意义。比如,我们使用简单的历史模拟法,可以很容易确定一天中置信水平为99%的在险价值(Value-at-Risk)。

> quantile(ret_simple, probs = 0.01)
    1%
-7.042678

因此,在任意给定的一天中,收益率低于−7%的概率只有1%。但是如果这一天发生了这样的情形(每年大约会发生2.5次),7%将是最小的损失量。

线性时间序列的建模与预测
线性时间序列的一类重要模型是自回归单整移动平均(Autoregressive Integrated Moving Average,ARIMA)模型族,它由Box 和 Jenkins(1976年)提出。ARIMA模型假定了时间序列的当前值只依赖于自身的过去值和某些误差项的过去值。

根据Box和Jenkins的研究,建立ARIMA模型包含了以下3个阶段。

1.模型识别。

2.模型估计。

3.模型诊断检验。

模型识别的阶段包括了使用图方法或信息准则来确定试验模型的阶数(包含的过去值个数和过去误差项个数)。模型阶数确定之后需要估计模型参数,通常会使用最小二乘方法或者极大似然方法。最后,为了检查模型可能存在的缺陷,必须仔细检查拟合的模型。这个目的可以通过保证模型残差的行为符合白噪声的特点来实现,换句话说,残差不存在线性依赖。

相关文章
|
7天前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
10天前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
7天前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
10天前
|
数据采集 机器学习/深度学习 数据挖掘
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
|
8天前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
4月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
4月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
8天前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
8天前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
23天前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
35 3

热门文章

最新文章

下一篇
DDNS