【例項】R語言如何做銀行財務資料分析?
蒐集銀行業上市公司的財務資料分析股票價格的財務影響因素,觀測流動比率、淨資產負債比率、資產固定資產比率、每股收益、淨利潤、增長率、股價和公佈時間等資料。首先描述性分析對銀行業上市公司的財務資料進行基礎性描述,以便對整個行業形成直觀的印象,然後利用因子分析提取對銀行業上市公司股價影響較為明顯的因素,分析銀行業上市公司股價的決定因素,最後利用迴歸分析方法確定這些因素對股票價格的影響方向和強弱。
統計方法
- 描述性分析
- 因子分析
- 迴歸分析
具體分析
本案例為了研究的準確性和普遍性,一共蒐集了23家上市的金融銀行類股票一定是可的股票價格。同時為了準確反映上市公司財務報表呈現的財務資訊與股票價格的關係,我們蒐集了流動比率、淨資產負債比率、資產固定資產比率、每股收益、淨利潤、增長率等財務指標。
(源資料在資料夾內)
dataf <- read.csv("bank.csv") # 匯入資料dataf
## 流動比率 淨資產負債比率 資產固定資產比率 每股收益 淨利潤 增長率 股價 ## 1 1.0716 0.020515 27.04 0.1925 17.77 -3.942 18.56 ## 2 1.0181 0.009379 113.22 0.1300 14.77 46.914 18.86 ## 3 1.0469 0.013588 85.34 0.2230 14.30 25.433 13.65
summary(dataf)
## 流動比率 淨資產負債比率 資產固定資產比率 每股收益 ## Min. :0.774 Min. :0.00699 Min. : 27 Min. :0.0915 ## 1st Qu.:0.866 1st Qu.:0.00944 1st Qu.: 98 1st Qu.:0.1510 ## Median :0.893 Median :0.01076 Median :105 Median :0.2230 ## Mean :0.919 Mean :0.01109 Mean :111 Mean :0.2251 ## 3rd Qu.:0.956 3rd Qu.:0.01178 3rd Qu.:117 3rd Qu.:0.2943 ## Max. :1.072 Max. :0.02051 Max. :236 Max. :0.3900 ## NA's :1 ## 淨利潤 增長率 股價 ## Min. :10.3 Min. :-3.94 Min. : 5.67 ## 1st Qu.:11.5 1st Qu.:20.16 1st Qu.: 6.66 ## Median :12.8 Median :25.43 Median :10.24 ## Mean :13.0 Mean :27.43 Mean :10.34 ## 3rd Qu.:14.4 3rd Qu.:32.96 3rd Qu.:13.04 ## Max. :17.8 Max. :64.61 Max. :18.86 ##
樣本描述
由R語言自帶的summary我們能知道資料的最小值、25%分位數、中位數、均值、75%分位數、最大值以及缺失值數目。但是我們知道,僅僅通過這7個統計值我們不能很好的瞭解到資料的概貌,因此本章通過利用R語言的其他函式,製作一個樣本描述表。
d1 = c(dataf[, 1])d2 = c(dataf[, 2])d3 = c(dataf[, 3])d4 = c(dataf[, 4])d5 = c(dataf[, 5])d6 = c(dataf[, 6])d7 = c(dataf[, 7])#包括7個專案,分別為最小值,25%分位數,中位數,均值,75%分位數,最大值以及缺失值數目sum1 = summary(d1)sum2 = summary(d2)sum3 = summary(d3)sum4 = summary(d4)sum5 = summary(d5)sum6 = summary(d6)sum7 = summary(d7)#樣本數N1 = length(d1)-sum1[7]N2 = length(d2)N3 = length(d3)N4 = length(d4)N5 = length(d5)N6 = length(d6)N7 = length(d7)head = c("變數名","流動比率","淨資產負債比率","資產固定資產比率","每股收益","淨利潤","增長率","股價")row1 = c("樣本數",N1,N2,N3,N4,N5,N6,N7)row2 = c("全距",sum1[6]-sum1[1],sum2[6]-sum2[1],sum3[6]-sum3[1],sum4[6]-sum4[1],sum5[6]-sum5[1],sum6[6]-sum6[1],sum7[6]-sum7[1])row3 = c("最小值",sum1[1],sum2[1],sum3[1],sum4[1],sum5[1],sum6[1],sum7[1])row4 = c("最大值",sum1[6],sum2[6],sum3[6],sum4[6],sum5[6],sum6[6],sum7[6])row5 = c("均值",sum1[4],sum2[4],sum3[4],sum4[4],sum5[4],sum6[4],sum7[4])row6 = c("中位數",sum1[3],sum2[3],sum3[3],sum4[3],sum5[3],sum6[3],sum7[3])row7 = c("標準差",sd(d1,na.rm=T),sd(d2),sd(d3),sd(d4),sd(d5),sd(d6),sd(d7))result = matrix(c(head, row1, row2, row3, row4, row5, row6, row7),ncol=8,byrow = T)print(t(result))
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] "變數名" "樣本數" "全距" "最小值" "最大值" "均值"
## [2,] "流動比率" "22" "0.296" "0.774" "1.07" "0.919"
## [3,] "淨資產負債比率" "23" "0.01351" "0.00699" "0.0205" "0.0111"
## [4,] "資產固定資產比率" "23" "209" "27" "236" "111"
## [5,] "每股收益" "23" "0.2985" "0.0915" "0.39" "0.225"
## [6,] "淨利潤" "23" "7.5" "10.3" "17.8" "13"
## [7,] "增長率" "23" "68.54" "-3.94" "64.6" "27.4"
## [8,] "股價" "23" "13.23" "5.67" "18.9" "10.3"
## [,7] [,8]
## [1,] "中位數" "標準差"
## [2,] "0.893" "0.0768336436285581"
## [3,] "0.0108" "0.00271362995517017"
## [4,] "105" "35.8888061503178"
## [5,] "0.223" "0.0901580500060493"
## [6,] "12.8" "1.9540104480683"
## [7,] "25.4" "14.8509587755514"
## [8,] "10.2" "3.97134479070255"
由上表可知,在從2001到2008年各個季度中,我國銀行業上市公司的平均值為10.3439,最大值與最小值之間的全距為13.19元,標準差為3.97元,可見我國銀行業上市公司的股價在樣本期間波動幅度較大。另外,就淨利潤指標看,我國銀行業公司淨利潤均值為13億元,可見在樣本期間我國銀行業經營狀況良好。
因子分析
由於因子分析對缺失值非常的敏感,在進行因子分析之前我們先對資料進行缺失值的檢查。
is.na(dataf)
## 流動比率 淨資產負債比率 資產固定資產比率 每股收益 淨利潤 增長率
## [1,] FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE FALSE FALSE
## 股價
## [1,] FALSE
## [2,] FALSE
## [3,] FALSE
這時我們發現流動比率變數第23個數據缺失,因此在進行因子分析的時候,我們對缺失值進行整行刪除處理,即在因子分析時排除第23行整行的7個數據。
然後,我們對剩餘的流動比率、淨資產負債比率、資產固定資產比率、每股收益、淨利潤和增長率這些公司財務變數進行KMO檢驗,檢驗選取的財務變數是否適合進行因子分析。
library(psych) # 匯入psych程式包KMO(dataf[-23,-7]) # 排除股價變數和第23行資料
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = dataf[-23, -7])
## Overall MSA = 0.75
## MSA for each item =
## 流動比率 淨資產負債比率 資產固定資產比率 每股收益
## 0.79 0.74 0.87 0.47
## 淨利潤 增長率
## 0.73 0.74
KMO檢驗值為0.75,這說明這些財務變數適合做因子分析。
fa.parallel(dataf[-23,-7]) # 繪製碎石圖尋找合適因子個數
## Parallel analysis suggests that the number of factors = 2 and the number of components = 1
由碎石圖看出,對於因子分析,合適的因子個數為2。因此我們利用psych程式包中的fa函式對所選取的變數做因子分析,利用極大似然法(ml)提取公因子,運用最大方差旋轉法(varimax),找出其中2個因子。
fa(dataf[-23,-7], nfactors=2, fm="ml", rotate="varimax",score=T)
## Loading required package: GPArotation
## Factor Analysis using method = ml
## Call: fa(r = dataf[-23, -7], nfactors = 2, rotate = "varimax", scores = T,
## fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML1 ML2 h2 u2 com
## 流動比率 0.60 0.56 0.67 0.331 2.0
## 淨資產負債比率 0.98 0.21 1.00 0.005 1.1
## 資產固定資產比率 -0.65 -0.17 0.45 0.547 1.1
## 每股收益 0.05 -0.48 0.23 0.772 1.0
## 淨利潤 0.53 0.84 1.00 0.005 1.7
## 增長率 -0.63 0.02 0.39 0.609 1.0
##
## ML1 ML2
## SS loadings 2.41 1.32
## Proportion Var 0.40 0.22
## Cumulative Var 0.40 0.62
## Proportion Explained 0.65 0.35
## Cumulative Proportion 0.65 1.00
##
## Mean item complexity = 1.3
## Test of the hypothesis that 2 factors are sufficient.
##
## The degrees of freedom for the null model are 15 and the objective function was 3.13 with Chi Square of 56.79
## The degrees of freedom for the model are 4 and the objective function was 0.02
##
## The root mean square of the residuals (RMSR) is 0.02
## The df corrected root mean square of the residuals is 0.04
##
## The harmonic number of observations is 22 with the empirical chi square 0.22 with prob < 0.99
## The total number of observations was 22 with MLE Chi Square = 0.38 with prob < 0.98
##
## Tucker Lewis Index of factoring reliability = 1.361
## RMSEA index = 0 and the 90 % confidence intervals are NA NA
## BIC = -11.98
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy
## ML1 ML2
## Correlation of scores with factors 1.00 0.99
## Multiple R square of scores with factors 0.99 0.99
## Minimum correlation of possible factor scores 0.99 0.98
結果說明:
- 從表格可知,兩個因子的累計貢獻方差(Cumulative Var)為62%,說明得到的兩個因子能解釋所有變數62%的資訊。
- 各變數與兩個因子的關係如下:
- 流動比率 = 0.60 × 因子A + 0.56 × 因子B
- 淨資產負債比率 = 0.98 × 因子A + 0.21 × 因子B
- 資產固定資產比率 = -0.65 × 因子A - 0.17 × 因子B
- 每股收益 = 0.05 × 因子A - 0.48 × 因子B
- 淨利潤 = 0.53 × 因子A + 0.84 × 因子B
- 增長率 = -0.63 × 因子A - 0.02 × 因子B
因子A主要影響流動比率、淨資產負債比率、資產固定資產比率和增長率。其中因子A對流動比率和淨資產負債比率有正向影響而對資產固定資產比率和增長率有負向影響。我們將它稱為資產因子。
因子B主要影響每股收益、淨利潤。其中因子B對淨利潤有正向作用而對每股收益則為負向作用。我們將它稱為收益因子。
迴歸分析
現在利用所選取的財務變數,通過迴歸分析進一步發掘我國銀行業股價與其主要財務指標的關係。
lm <- lm(股價~., data=dataf)lm.aic <- step(lm, trace=FALSE) # AIC準則lm.bic <- step(lm, k=log(length(dataf[,1])), trace=FALSE) # BIC準則summary(lm.aic)
##
## Call:
## lm(formula = 股價 ~ 流動比率 + 淨利潤 + 增長率, data = dataf)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.670 -0.890 -0.365 0.808 2.953
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -27.4868 4.4273 -6.21 7.4e-06 ***
## 流動比率 22.8340 6.7784 3.37 0.00342 **
## 淨利潤 1.1980 0.2636 4.54 0.00025 ***
## 增長率 0.0522 0.0238 2.19 0.04187 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.46 on 18 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.884, Adjusted R-squared: 0.865
## F-statistic: 45.8 on 3 and 18 DF, p-value: 1.26e-08
summary(lm.bic)
##
## Call:
## lm(formula = 股價 ~ 流動比率 + 淨利潤 + 增長率, data = dataf)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.670 -0.890 -0.365 0.808 2.953
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -27.4868 4.4273 -6.21 7.4e-06 ***
## 流動比率 22.8340 6.7784 3.37 0.00342 **
## 淨利潤 1.1980 0.2636 4.54 0.00025 ***
## 增長率 0.0522 0.0238 2.19 0.04187 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.46 on 18 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.884, Adjusted R-squared: 0.865
## F-statistic: 45.8 on 3 and 18 DF, p-value: 1.26e-08
通過AIC和BIC準則的檢驗,我們能得到所選取的財務變數中,流動比率、淨利潤和增長率對股價有顯著的影響。為了保證線性模型的準確率,我們還需要考察該模型中是否存在自相關關係。以下通過lmtest程式包中的dwtest函式,對模型進行Durbin-Watson檢驗。
#install.packages("lmtest")#install.packages("zoo")library(lmtest) # 匯入程式包lmtestdwtest(lm.aic)
##
## Durbin-Watson test
##
## data: lm.aic
## DW = 2.202, p-value = 0.5286
## alternative hypothesis: true autocorrelation is greater than 0
由檢驗得到,DW統計量為2,202,p值為0.5286,說明模型中不存在自相關關係。
則股價與流動比率、淨利潤和增長率的關係為: 股價 = -27.4868 + 22.8340 × 流動比率 + 1.1980 × 淨利潤 + 0.0522 × 增長率
其中三個變數的係數均在0.01的顯著性水平下顯著。
研究結論
根據以上所做的分析,我們可以比較有把握地得出以下結論:
(1)通過銀行業上市公司股價及財務指標的描述統計分析發現,一般而言,我國銀行業上市公司的股價在樣本期間波動幅度較大,但相對其他行業較小。另外,就淨利潤指標看,我國銀行業上市公司淨利潤均值為13億元,可見我國銀行業經營狀況良好。
(2)通過銀行業上市的各個財務指標的因子分析發現: 在銀行業資料中,可以用兩個主因子(收益因子、資產因子)來代替解釋所有六個財務指標提供的62%的資訊。
(3)通過對銀行業股票價格與財務指標的迴歸分析發現: 銀行業股價高度受流動比率、淨利潤和增長率這三個指標影響。其中流動比率1個單位的增加會帶動銀行業上市公司股價21個單位的增長。
總結:
- 銀行業股票價格總體波動性相對較小,盈利水平較高
- 銀行業財務資訊中主要的變數是流動性比率、淨利潤和增長率
- 影響銀行業股價的最主要因素是銀行資產的流動性水平