使用R语言基于新浪股票数据分析金融数据的“统计常识”

来源:互联网 发布:乡镇 网络舆情引导员 编辑:程序博客网 时间:2024/04/27 20:34

使用 R 语言基于新浪股票数据分析金融数据的“统计常识”

一、实验介绍

1.1 实验内容

本实验课程以网络上的新浪股票数据为代表,研究金融数据的一些简单的统计性质。首先介绍相关的理论基础,然后在 R 上进行相关的操作,这些主要包括加载所需要的 R 包,在网络上直接载入股票数据,绘制股票数据的一些典型图形以及最终对股票的收益进行一些简单的分析,为简单的金融数据分析打下一些基础。

1.2 实验知识点

  • 金融数据的统计性质介绍
  • 添加 quantmod 、fBasics包
  • 访问和下载网络上的股票数据
  • 股票数据的K线图、时序、密度函数图
  • 股票收益率的正态性检验

1.3 实验环境

  • R version 3.4.1
  • Xfce 终端

1.4 适合人群

本课程难度为一般,属于初级级别课程,适合具有 R 语言基础的用户,熟悉 R 语言基础知识并加深巩固,逐渐学会用 R 语言分析金融数据。

二、理论介绍

2.1 统计指标

均值(mean):是表示一组数据集中趋势的统计指标,是指在一组数据中所有数据之和再除以这组数据的个数。

方差(variance):是衡量随机变量或一组数据时离散程度的度量。在统计学中是标准的二阶中心距,在许多实际问题中,研究方差即偏离程度有着重要意义。

偏度(skewness):是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。在统计学中是标准的三阶中心距,度量关于其均值的对称性。

峰度(kurtosis):又称峰态系数,是反映概率密度分布曲线在平均值处峰值高低的特征数。在统计学中是标准的四阶中心距,峰度反映了峰部尖度和尾部厚度。

2.2 正态性检验原理

在此处所用的检验为 JB 正态性检验,是 Jarque 和 Bera 两个人将单独的偏度 t 检验和峰度 t 检验融合在一起而建立的正态性检验原理。

此处输入图片的描述

若在规定的显著性水平下(通常为 5% ),拒绝原假设,则不满足正态分布。

三、实验步骤

3.1 下载安装所需的 R 包

要对金融数据进行分析,需要运用 R 的一些分析工具--R 软件包,本次实验主要所需要用到的 R 软件包,主要有两个:quantmodfBasics 软件包.

首先,需要进入R环境。

sudo R

此处输入图片的描述

然后下载安装我们所需要的程序包。

>install.packages("quantmod")

执行这条命令以后界面会弹出一个选择镜像的窗口,自己可以选择合适的镜像,在此处我们选择 China。

此处输入图片的描述

选择完之后界面会出现一系列的加载结果,我们下载的 quantmod 软件包保存在了'/tmp/RtmpdJgrrH/downloaded_packages'里了。

此处输入图片的描述

同理,下载安装 fBasics 软件包也是同样的操作,在此处不在细讲。

3.2 访问和下载网络上的股票数据

由于R语言是开源的软件,通过互联网可以比较容易的从网络上下载各种数据。下面我们就从网络上导入新浪股票的数据。

3.2.1 调用 quantmod 软件包

在导入数据之前需要调用已下载的 quantmod 软件包,需要用到 library() 函数。

>library(quantmod)

此处输入图片的描述

载入依赖的包

>library(zoo)>library(xts)>library(TTR)

3.2.2 访问网站上的股票数据

我们需要使用 getSymbols 命令来访问网络上的数据,对于金融数据我们可以直接从 Yahoogoogle 等网站上直接下载。( SINA 是新浪股票的代码,如果要读取其他股票,需要先查询相应股票的代码)

>getSymbols("SINA"

此处输入图片的描述

注意,此处默认的是从 Yahoo 上访问数据,如果我们需要从其他网站上访问数据,需要用到 src 命令 来读取其他网站的数据,例如:

>getSymbols("SINA",src="google"

3.2.3 查看数据

由于数据量太大,不便查看全部数据,但可以查看该股票数据前后一小部分数据。这需要用到 head (查看前 6 行数据) tail (查看后 6 行数据)函数。

>head(SINA)

此处输入图片的描述

>tail(SINA)

此处输入图片的描述

也可以运用 dim 函数来查看数据的规模。

>dim(SINA)

此处输入图片的描述

其中,第一列 2650 表示变量中包含的数据的行数,第二列 6 表示变量的维数。

3.3 股票数据的图形绘制

3.3.1 股票数据的时序图

一般来说,要对股票数据做一个直观的了解直接看 K 线图(时序图)。画K线图需要用到 chartSeries 函数,其中 fromto 表示所画图形的起始和终止时间,也可不写表示将下载的全部数据都画在图形上。

>getSymbols("SINA",from="2017-01-03",to="2017-07-12")   #下载部分数据>chartSeries(SINA,from="2017-01-03",to="2017-07-12")

此处输入图片的描述

此处输入图片的描述

注意,K线图里仅表示了新浪股票数据的日收盘价和成交量的时序图。

我们还可以更换图形的背景颜色:

>chartSeries(SINA,theme="white",from="2017-01-03",to="2017-07-12") #背景为白色

3.3.2 股票收益率的时序图

我们下载的股票数据的 6 个维度包含:开盘价、最高价、最低价、收盘价、成交量、调整的收盘价。研究股票收益率是股票投资分析最基本的操作,股票收益率通常简化为股票价格对数变化来表示,股票价格使用调整后的收盘价。

计算股票收益率通常需要用到 log(求对数) diff(求差分) 函数。

>SINA.Profit=diff(log(SINA$SINA.Adjusted))>chartSeries(SINA.Profit,theme="white")   #绘制图形

其中,SINA$SINA.Adjusted 表示从 SINA 数据中提取 Adjusted 这一列。

此处输入图片的描述

新浪股票收益率的时序图:

此处输入图片的描述

3.3.2 股票收益率的密度函数图

在画密度函数图之前我们要先下载 fBasics 软件包。操作同下载 quantmod 软件包一致。

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

载入依赖

>library(timeDate)>library(timeSeries)

但在画图之前,由于我们的 SINA.Profit 是通过一阶差分得来的数据, 在第一行有一个空值(NA),需要先删除掉第一行才能继续画图。

>SINA.Pro=na.omit(SINA.Profit)

然后,开始画密度函数图。

>de=density(SINA.Pro)   #获取密度函数>range(SINA.Pro)        #查看数据的取值范围,相当于 c(min(x),max(x))>x=seq(-.17,.17,.001)   #生成一个下界是 -0.17,上界是 0.17,时间间隔是 0.001 的数据,取值范围主要由 range 的结果决定>plot(de$x,de$y,xlab='x',ylab='density',type='l') #画密度函数图>ys=dnorm(x,mean(SINA.Pro),stdev(SINA.Pro))  #新建一个与 SINA.Pro 均值和标准差一致的正态分布函数 >lines(x,ys,lty=2) #在密度函数图上增加正态分布曲线(图中虚线)

此处输入图片的描述

此处输入图片的描述

我们可以看到新浪股票数据的密度函数有明显的高峰厚尾现象,与正态分布有明显的差别,显然不是正态分布的。下面我们就用数学的方法来检验一下是否符合正态分布的假设。

3.4 股票收益率的正态性检验

3.4.1 股票收益率的基本统计量

要获得股票收益数据的基本统计量的值,我们需要使用 fBasics 软件包中的 basicStats 函数。

>basicStats(SINA.Pro)

此处输入图片的描述

根据上图结果,我们可以得到新浪股票收益率的各种基本统计结果:

nobs(数据个数)、Mean(均值)、Median(中位数)、Sum(总和)、Variance(方差)、Stdev(标准差)、Skewness(偏度)、Kurtosis(峰度)。

mean=0.003,接近于0,也就是说新浪股票收益率具有比较明显的向0集中的趋势。

Variance=0.001,接近于0,也就是说新浪股票收益率的离散程度较小,不分散。

Skewness=0.462, 明显不等于0,也就是说新浪股票收益率是非对称分布的。

Kurtosis=14.101 ,明显大于3,也就是说新浪股票收益率存在明显的高峰厚尾现象。

3.4.1 股票收益率的正态性检验

要进行正态性检验,我们需要用到 normalTest 函数。

>normalTest(SINA.Pro,method='jb')  # `jb`代表JB正态性检验

此处输入图片的描述

检验统计量 JB=1122.8358,p<2.2e-16<0.05,也就是说在5%的显著性水平上拒绝新浪股票收益率服从正态分布函数的原假设,即新浪股票收益率不服从正态分布。

当然,我们也可以直接利用基本统计结果和相关公式自己计算 JB 统计量的值,再计算相应的 P 值也可得出同样的结论,这里就作为课后练习自己去练习。

四、实验总结

本次试验基于网络上现有的股票数据,结合 R 语言的 quantmodfBasics 软件包下载股票数据,实现数据的可视化,包括直观的 K 线图、收益率的时序图,以及密度函数图,最终从图形、统计结果以及 JB 检验三个方面来证明了该股票收益数据程非正态分布。整个实验让我们巩固了 R 语言基础,熟悉了如何使用 R 语言分析股票数据,为使用 R 语言做金融数据分析打下基础。

原创粉丝点击