一、R軟件簡介
R是一個有著統計分析功能及強大作圖功能的軟件系統,由Ross Ihaka和Robert Gentleman1共同創立。R語言可以看作是由ATT貝爾實驗室所創的S語言發展出的一種方言。因此R既是一種軟件也可以說是一種語言。首先,R是完全免費的自由軟件,使用者可以在上面隨意進行二次開發。它開放源代碼,具有很多功能強大的第三方開發的模塊。其次,R是一種可編程的語言,使用者可以在R中很容易的寫出自己希望執行的程序,不會受固定模塊的限制。再次,R具有很強的互動性,輸入和輸出都是在同一個窗口進行(除了圖形輸出),這點和SAS有很大的區別。最后,R具有強大的圖形輸出功能,輸出的圖形輸出的圖形不但可以存成JPG、BMP、PNG等主流圖片格式,還可以保存為PDF文件。它善于輸出各種常用的統計圖形,如餅圖、直方圖、散點圖、箱圖、QQ圖等。
相比于大家熟悉的統計軟件SPSS和SAS,R軟件以其高度的靈活自由性正受到越來越多統計學者的青睞。以易用性著稱的SPSS和功能強大的SAS軟件都包括了很多功能強大的統計分析模塊,分析人員必須在它們既定的模塊上進行各種分析。但是,隨著信息技術的飛速發展,越來越多的統計分析新方法被提出來,尤其是在證券分析領域,使用既定模塊分析的統計軟件已經不能及時地跟上發展的速度。這個時候就需要人們自己用編程來實現這些新方法,R就提供了這樣一個很好的平臺。
二、理論基礎
1.Markowitz投資組合模型
假設ri是投資在第i種證券上的收益率,它是隨機變量,ui是第i種證券的預期收益率,σij是ri和rj的協方差(σii是ri的方差),wi是投資在第i種證券上的投資比例,則投資組合的收益率∑ri×wi是隨機變量,wi是由投資者確定下來的非隨機變量,顯見∑wi=1,并且根據假設(8)有:wi≥0。則可得到投資組合的預期收益率為E=∑Ni=1wiui,方差為V=∑Ni=1∑Ni=1σijwiwj,或者用相關系數表示為V=∑Ni=1w2iσ2i+2∑1≤i<j≤Nwiwjρijσiσj。
Markowitz投資組合模型為:
min∑Ni=1∑Ni=1σijwiwj
s.t.E=∑Ni=1wiui
∑wi=1
wi≥0,i=1,2,…,N
Markowitz證券投資模型所基于的的重要假設之一是:證券的收益率ui可以視為隨機變量且服從正態分布,其性質由均值和方差來描述。
2.證券預期收益率的預測方法
在證券收益率服從正態分布的假設下,我們必須對模型中的一個重要參數——證券的預期收益率做出合理預測。在此,我們介紹預測證券預期收益率常用的兩種方法:計算證券收益率的期望值和加權期望值。
計算證券收益率的期望值,這是Markowitz在其著名的論文《投資組合選擇》中所使用的方法。他通過計算最近N周內收益率的期望值作為第N+1周收益率的預測值。而計算加權期望值的方法則有很多,如果投資者認為據目標期時間越近則關系越密切,那么就可以將歷史數據中的各時期的收益率進行加權平均,使得據目標期時間越近的收益率的權重越大。這類方法中最常見的當屬指數平滑法。指數平滑法的基本公式是:St=αYt+(1-α)St-1,其中St表示時間t的平滑值,Yt表示時間t的實際值,St-1表示時間t-1的平滑值;α表示平滑常數,其取值范圍為[0,1]。St是Yt和St-1的加權算數平均數,α的取值大小決定了Yt和St-1對St的影響程度。St具有逐期追溯性質,可探源至S1為止,包括全部數據。在此過程中,平滑常數以指數形式遞減,故稱之為指數平滑法。平滑常數的取值至關重要,它決定了平滑水平以及對預測值與實際結果之間差異的響應速度。平滑常數α越接近于1,遠期實際值對本期平滑值的下降越迅速;平滑常數α越接近于0,遠期實際值對本期平滑值影響程度的下降越緩慢。由此,當時間數列相對平穩時,可取較大的α;當時間數列波動較大時,應取較小的α,以不忽略遠期實際值的影響。
三、R軟件在證券收益率的分析與預測中的應用實例
1.驗證Markowitz模型的重要假設:證券收益率服從正態分布
(1)數據讀取
對于存儲在文本文件(ASCII)中的數據,R可以用函數read.table來創建一個數據框,這也是讀取表格形式數據的主要方法。例如若包含某證券共100周開盤和收盤指數信息的數據文件“data.txt”存放在D盤上,我們可通過以下命令格式來讀取:
mydatas<-read.table(“d:/data.txt”,col.names(“p0”,“p1”))
其中數據框名為mydatas,數據框中每個變量被依次命名為:p0,p1,(缺省值為V1,V2……)。
(2)計算證券的周收益率
假設某種證券在最近N周內的收益率分別為r1,r2,…,rN,則ri=p1i-p0ip0i×100%,其中p0i表示第i周第一天的開盤價,p1i表示第i周最后一天的收盤價。R中通過對數據框mydatas的變量p1和p0進行運算操作,可計算出用數據框wp存儲的周收益率。命令格式為:
wp=(mydatas[“p1”]-mydatas[“p0”])/mydatas[“p0”]
通過使用fix(wp)函數,可以對wp的變量名進行修改,使其具有直觀的名字,如weekprofit。
輸出結果:
〉wp
weekprofit
11.66087551
2-0.61299388
3-0.85826857
…………
98 -1.13587649
99 -0.95793858
100 -1.51198618
(3)對周收益率數據進行初步分析
運用R中的summary和fivenum函數可以得到數據組的匯總信息,并對數據組的數據結構獲得初步了解。命令格式:
summary(wp$weekprofit)
輸出結果為:
Min. 1st Qu. Median Mean 3rd Qu. Max.
-1.6070 -0.3188 0.3479 0.3854 1.0790 2.8640
命令格式:
fivenum(wp$weekprofit)
輸出結果為:
[1]-1.6066727 -0.3195476 0.3479232 1.0935828 2.8636463
(4)作出周收益率的直方圖
為了更加直觀的分析周收益率這組單變量數據的分布,我們首先作出柱形圖,命令格式為:
hist(wp$weekprofit)
(5)繪制密度圖
為了更加清晰地分析該數據組的分布特征,我們在柱形圖基礎上繪制密度圖,命令格式為:
lines(density(wp$weekprofit))。
(6)求周收益率的經驗分布函數
命令格式為:
ecdf(wp$weekprofit)
輸出結果為:
〉 ecdf(wp$weekprofit)
Empirical CDF
Call: ecdf(wp$weekprofit)
x[1:100] = -1.6067, -1.5275, -1.512, …, 2.6041, 2.8636
(7)作出經驗分布函數圖
命令格式為:
plot(ecdf(wp$weekprofit),verticals=TRUE)
(8) 擬合正態分布
從以上的分析可以看出這個數據組的分布還是與正態分布比較相似的,因此我們擬合一個正態分布,并且使擬合后的圖與經驗分布函數圖相重疊。命令格式為:
〉plot(ecdf(wp$weekprofit),verticals=TRUE)
〉x〈-seq(-1.7,3,0.1)
〉lines(x,pnorm(x,mean=mean(wp$weekprofit),sd=sqrt(var(wp$weekprofit))))
圖中的實線便是正態分布的擬和線,由上圖可以清晰地看到,擬和后的曲線與原經驗分布函數基本吻合。但要具體考察二者的吻合程度,R軟件為我們提供了更精確的工具。
(9) 做出分位比較圖(Q-Q圖)
為研究(8)中正態擬和線與經驗分布函數的吻合程度,R軟件提供了分位比較圖(Q-Q圖)來完成這個任務。命令格式為:
qqnorm(wp$weekprofit)
qqline(wp$weekprofit)
由上圖可見,二者具有優良的吻合度,未出現明顯的偏離正態期望的長尾區域。
(10) 正態性檢驗
R中提供了Shapiro-Wilk檢驗和Kolmogorov-Smirnov檢驗兩種正規的正態性檢驗方法。命令格式分別為:
shapiro.test(wp$weekprofit)
ks.test(wp$weekprofit,“pnorm”,mean=mean(wp$weekprofit),sd=sqrt(var(wp$weekprofit)))。
我們應用Kolmogorov-Smirnov檢驗可以得到以下輸出結果為:
One-sample Kolmogorov-Smirnov test
data:wp$weekprofit
D = 0.0451, p-value = 0.987
alternative hypothesis: two-sided
由于檢驗所得p值非常接近1,由上述分析可以驗證證券收益率近似服從正態分布。
2. 預測證券的預期收益率
方法一:計算這支股票的期望收益率。以最近時期內的樣本期望值來估計得到第N+1周的預期收益率為rN+1=1N∑Ni=1ri,這也是Markowitz在《投資組合選擇》中所采用的方法。命令格式為:
mean(wp$weekprofit)
輸出結果為:
[1] 0.385416
方法二:用指數平滑法計算加權期望收益率。如果投資者認為據目標期時間越近則關系越密切,這樣就可以將歷史數據中的各時期的收益率進行加權平均,據目標期時間越近則權重越大。本文以指數平滑法為例闡述期望收益率的這種估計方法。[2]假設某種證券在最近N周內的收益率分別為r1,r2,…,rN,則在估計該證券的預期收益率時,可以得到這些收益率的追溯預測值1,2,…,N
i+1=αri+(1-α)i
1,=r1+r22
R=N+1
其中,R表示預期收益率;α表示加權系數,介于0和1之間,由投資者決定。
注1:一般情況下如果收益率序列{ri}波動不大,則α應取小一點,比如:0.1-0.3;如果收益率序列{ri}波動較大,則α應取大一點,比如:0.6-0.8。
注2:在實際操作中,可取多個值進行試算,比較它們的MAE=1N∑Ni=1|ri-i|,取較小者為準估計預期收益率。
在此,我們若取α=0.1,運用R軟件提供的自由、靈活的編程環境,作者對指數平滑法預測證券收益率的方法進行了編程,命令格式為:
〉 r=NULL
〉 r[1]=(wp[1,1]+wp[2,1])/2
〉 for(i in 2:100){
r[i]=0.1*wp[i-1,1]+(1-0.1)*r[i-1]}
〉 R=NULL
〉 R=0.1*wp[100,1]+(1-0.1)*r[100]
輸出結果為:
〉 R
[1] -0.3395193
四、小結
本文簡要介紹了R統計軟件的特點,以及如何應用R軟件檢驗Markowitz模型的重要假設:證券收益率近似服從正態分布。我們先后求出了證券的周收益率,做出了柱形圖,求出了密度函數,經驗分布函數,進行了正態分布擬合,用分位比較圖驗證了吻合程度,最后應用Kolmogorov-Smirnov法進行了正態檢驗。接下來又運用R軟件,通過自由編程,結合期望值法和指數平滑法分別對證券的預期收益率進行了預測。通過分析我們看到 R軟件在證券分析中的應用非常自由、方便、有效,在進行證券分析與預測時具有廣泛的應用空間。但R并不局限于解決某一類問題,在證券的數據分析中,還可以應用于各類概率分布的擬和,如logistic分布、Poisson分布等,并進行相關的假設檢驗。此外,R除了具有可以與其他商業軟件相媲美的統計分析功能,還為廣大的用戶提供了一個強大靈活的編程平臺,這無疑為證券分析學者提供了一個靈活而自由的創新空間。
(作者單位:廈門大學數學科學學院)
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文