使用R語言基於新浪股票資料分析金融資料的 統計常識
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
使用 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 軟體包,主要有兩個:quantmod
和fBasics
軟體包.
首先,需要進入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
命令來訪問網路上的資料,對於金融資料我們可以直接從 Yahoo
、google
等網站上直接下載。( 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
函式,其中 from
和 to
表示所畫圖形的起始和終止時間,也可不寫表示將下載的全部資料都畫在圖形上。
>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 語言的 quantmod
和 fBasics
軟體包下載股票資料,實現資料的視覺化,包括直觀的 K 線圖、收益率的時序圖,以及密度函式圖,最終從圖形、統計結果以及 JB 檢驗三個方面來證明了該股票收益資料程非正態分佈。整個實驗讓我們鞏固了 R 語言基礎,熟悉瞭如何使用 R 語言分析股票資料,為使用 R 語言做金融資料分析打下基礎。