利用R语言中的quantmod包和fBasics对股票数据的获取和简要的分析,
通过获取的数据进行典型图像绘制,使用JB正态性检验来检验是否服从于正态分布。
前提概要:
quantmod 包默认是访问 yahoo finance 的数据,其中包括上证和深证的股票数据,还有港股数据。
上证代码是 ss,深证代码是 sz,港股代码是 hk
比如茅台:6000519.ss,万科 000002.sz,长江实业 0001.hk
在R的控制台里使用如下命令:
> library(quantmod)
> setSymbolLookup(WK=list(name="000002.sz",src="yahoo"))
> getSymbols("WK")
[1] "WK"
> chartSeries(WK)
head(WK)#查看头部数据
tail(WK)#查看尾部数据
dim(WK)#查看数据的规模
实例:利用公司BSOFT的股票数据分析
> install.packages("quantmod",destdir = "D:/soft/R/R_download")#载入quantmod包
> library(quantmod)
> library(zoo)
> library(xts)
> library(TTR)
> setSymbolLookup(BSOFT=list(name="300451.sz",src="yahoo"))#查询某股票数据
> getSymbols("BSOFT")
[1] "BSOFT"
> chartSeries(BSOFT)
> View(BSOFT)
> tail(BSOFT,10)
> dim(BSOFT)
> getSymbols("BSOFT",from="2019-01-01",to="2019-07-01")#获取1-7月份的股票数据
> chartSeries(BSOFT)
#计算股票收益率通常需要用到 log(求对数) diff(求差分) 函数
> BSOFT.Profit= diff(log(BSOFT$`300451.SZ.Adjusted`))
> chartSeries(BSOFT.Profit,theme = "white") #时序图(K线)
#股票收益率的密度函数图
> install.packages("fBasics")
> install.packages("fBasics",destdir = "D:/soft/R/R_download")
> library(fBasics)
> library(timeDate)
> library(timeSeries)
#由于 BSOFT.Profit 是通过一阶差分得来的数据, 在第一行有一个空值(NA),需要先删除掉第一行才能继续画图。
> BSOFT.Pro=na.omit(BSOFT.Profit)
> de=density(BSOFT.Pro) #获取密度函数
> range(BSOFT.Pro) #查看数据的取值范围,相当于 c(min(x),max(x))
[1] -0.11568179 0.06698923
> x=seq(-.12,.07,.001) #生成一个下界是 -0.12,上界是 .07,时间间隔是 0.001 的数据,取值范围主要由 range 的结果决定
> plot(de$x,de$y,xlab="x",ylab="density",type="l") #画密度函数图
> ys=dnorm(x,mean(BSOFT.Pro),stdev(BSOFT.Pro)) #新建一个与 BSOFT.Pro 均值和标准差一致的正态分布函数
> lines(x,ys,lty=2) #在密度函数图上增加正态分布曲线(图中虚线)
结论:可以看到某公司股票数据的密度函数有明显的高峰厚尾现象,
与正态分布有明显的差别,因此用JB检验来检验SINA股票是否符合正态分布的假设。
---正态性检验----
(1)股票收益率的基本统计量
> basicStats(BSOFT.Pro)
X300451.SZ.Adjusted
nobs 114.000000
NAs 0.000000
Minimum -0.115682
Maximum 0.066989
1. Quartile -0.016940
3. Quartile 0.017947
Mean 0.001556
Median 0.000541
Sum 0.177419
SE Mean 0.002750
LCL Mean -0.003891
UCL Mean 0.007004
Variance 0.000862
Stdev 0.029357
Skewness -0.356699
Kurtosis 1.350244
mean=0.001556,接近于0,也就是说新浪股票收益率具有比较明显的向0集中的趋势。
Variance=0.000862,接近于0,也就是说新浪股票收益率的离散程度较小,不分散。
Skewness=0.166731, 明显不等于0,也就是说新浪股票收益率是非对称分布的。
Kurtosis=1.350244,
(2)股票收益率的正态性检验
> normalTest(BSOFT.Pro,method = "jb")
Title:
Jarque - Bera Normalality Test
Test Results:
STATISTIC:
X-squared: 12.1626
P VALUE:
Asymptotic p Value: 0.002285
检验统计量 JB=12.1626,p<0.002285<0.05,
也就是说在5%的显著性水平上拒绝该公司股票收益率服
从正态分布函数的原假设,即改公司股票收益率不服从正态分布。
结合 :
R 语言的 quantmod 和 fBasics 软件包下载股票数据,实现数据的可视化,包括直观的 K 线图、收益率的时序图,以及密度函数图,最终从图形、统计结果以及 JB 检验三个方面来证明了该股票收益数据程非正态分布。
从数据获取,包的选用和图像绘制,实践中想通过列表来批量获取所有数据失败了,所以做了单股票的分析,面对批量获取数据还需要进一步来实践,检验方法的话借用现成的分析方法,在统计学和金融知识方面还有很大的欠缺。