我把蘋果公司的股價報酬(連續型態的變數),當成反應變數,並找了一些合適的解釋變數,來找出股價報酬率的關聯性,我一共挑選了三家公司和三個美股的指數,分別是台積電(ADR)、超微半導體、英特爾、道瓊工業指數、納斯達克綜合指數、標普500。
ADR:美國存託憑證,又稱美國預託證券,是大多數的外商公司在美國的股票市場交易股票的方式。藉由美國存託憑證,美國的投資者可以間接投資外商公司的股票。
・台積電,是全球最大的晶圓代工廠商,是蘋果產品生產線重要的一環,也是人家說的蘋果概念股,常常看到新聞寫道,台積電又吃下多少蘋果的單,樂觀估計今年營收成長多少的報導,可見他們的關係很不尋常。
・AMD,是蘋果向來愛用的GPU供應商,雖然以前CPU市場都被英特爾吊起來打,但近年市佔率有進步的趨勢。
・英特爾,蘋果2006年開始合作的廠商,常常幫蘋果設計特殊規格的CPU,但最近聽說太愛擠牙膏,牽連蘋果產品的更新速度,所以蘋果Mac系列產品處理器要換成自製的ARM處理器。
・美股三大指數,這三個是投資人判斷「美股」市場強弱的指標,日前,納斯達克指數受到科技巨頭股價的上漲帶動,其中包括蘋果宣布用自家處理器,就上漲4%創新高,蘋果貴為科技業之龍頭,應該跟這三個指數很有關係。
・共線性有何意義
・挑選出較少、較重要的解釋變數
・虛擬變數的應用之解決影響點
主要做法,判斷計算出來的VIF值,一次剔除一個,再檢視剩餘的解釋變數,共線性狀況如何,直到VIF值都小於10。
・共線性(collinarity):當2個(或以上)的自變數互不獨立(即彼此相關),就是具有「共線性」。「共線性」會使迴歸模型中存在著重複的解釋變數,提高某一解釋變數的解釋力與預測力,使得理論的建構不正確。
・變異膨脹因子(VIF):判斷多元線性迴歸模型的自變數之間是否獨立,VIF值越小越好,若VIF值>10,表示自變數存在共線性,則應刪除該自變數。
Stepwise 的中文叫「逐步回歸法」,往往都跟 Best Subsets Regression 一起拿出來討論。
這兩者的核心概念很簡單,都是想說能不能用比較簡單的模型,就能達成跟原模型差不多的表現與效果。
舉個例子,假設現在資料中有 x1 ~ x5 五個變數,那線性迴歸就能寫成:
y = a + b1 * x1 + b2 * x2 + b3 * x3 + b4 * x4 + b5 * x5
這時候,如果是 Best Subsets 的手法,就會開始列出所有的排列組合:
模型只有一個變數(共5個模型):
y = a + b1 * x1 、 y = a + b2 * x2 …以此類推
模型只有兩個變數(共10個模型):
y = a + b1 * x1 + b2 * x2 、y = a + b1 * x1 + b3 * x3 …以此類推
模型只有三個變數(共10個模型)
模型只有四個變數(共5個模型)
模型只有五個變數(共1個模型 = 原模型)
此時就會有31個模型,然後根據 AIC 或BIC指標,選取一個表現最佳的模型!
但可以想見的,這樣的做法是會耗費大量的時間, n 個變數就會需要建 2^n -1 個模型,效率上面很不讓人喜愛。
所以 Stepwise Regression 改善了這種情況:
只需要建構「一個模型」,然後在上面直接新增(或減少)變數。
一般有兩種方法:向前選取法(Forward)跟向後選取法(Backward):
Forward Stepwise:在一個空的迴歸中,逐一添加變數,直到任何一個變數的額外貢獻度(AIC值)已經沒有統計意義了,那就停止。(p >> n 可以使用)
Backward Stepwise:在一個完整的迴歸中,逐一移除變數,直到移除任何一個變數時,模型都會損失過多的解釋力,那就停止。(只有 n > p 才可以使用)
Both:以上兩種方法的結合, 同時考量新增/移除變數對模型的影響,缺點是運算效率會比較慢。
要注意的是,Forward 在新增變數後就不會再取出,並以現狀為基準,來衡量後續添加變數的貢獻,因此有時候會因為添加順序而產生問題(例如,一開始先選 x1,那接下來就會選 x2;可是如果先選 x2,卻不保證接下來一定會選 x1)。Backward 跟 Both 也同理。
把類別資料轉成數字資料。
rm(list=ls(all=TRUE))
library(quantmod)
library(car)
library(MASS)
# car Package: Functions and Datasets to Accompany J. Fox and S. Weisberg (2011).
# An R Companion to Applied Regression. Second Edition, Sage.
# MASS Package: Functions and datasets to accompany W.N. Venables and B.D. Ripley (2002).
# Modern Applied Statistics with S. Fourth Edition, Wiley.
start = "2019-01-01"
end = "2019-12-31"
# end = Sys.Date()
# google => r current date
APPLE = getSymbols("AAPL", from=start, to=end, auto.assign=FALSE)
# 我的反應變數
# AAPL:蘋果公司
TSMC = getSymbols("TSM", from=start, to=end, auto.assign=FALSE)
AMD = getSymbols("AMD", from=start, to=end, auto.assign=FALSE)
INTEL = getSymbols("INTC", from=start, to=end, auto.assign=FALSE)
DJI = getSymbols("^DJI", from=start, to=end, auto.assign=FALSE)
NASDAQ= getSymbols("^IXIC", from=start, to=end, auto.assign=FALSE)
SNP = getSymbols("^GSPC", from=start, to=end, auto.assign=FALSE)
# auto.assign=FALSE => 改變儲存資料集的名稱為宣告名稱。
# auto.assign=TRUE => 不改變儲存資料集的名稱為宣告名稱。
# 代碼部分是依據雅虎網站上的搜尋代碼
# TSM:台積電ADR
# AMD:超微
# INTEL:英特爾
# DJI:道瓊工業指數
# NASDAQ:納斯達克指數
# SNP:標普500
par(mfrow=c(3,2))
plot(Cl(APPLE))
plot(Cl(TSMC))
plot(Cl(AMD))
plot(Cl(INTEL))
plot(Cl(DJI))
plot(Cl(NASDAQ))
plot(Cl(SNP))
# 畫出收盤價的圖
# Cl 是收盤價 (美金)
從走勢圖發現,道瓊、納斯達克、標普三者十分相近
chartSeries(APPLE, theme='white')
chartSeries(TSMC, theme='white')
chartSeries(AMD, theme='white')
chartSeries(INTEL, theme='white')
chartSeries(DJI, theme='white')
chartSeries(NASDAQ, theme='white')
chartSeries(SNP, theme='white')
APPLE$APPLE.Return = dailyReturn(Ad(APPLE), type='log')
TSMC$TSMC.Return = dailyReturn(Ad(TSMC), type='log')
AMD$AMD.Return = dailyReturn(Ad(AMD), type='log')
INTEL$INTEL.Return = dailyReturn(Ad(INTEL), type='log')
DJI$DJI.Return = dailyReturn(Ad(DJI), type='log')
NASDAQ$NASDAQ.Return = dailyReturn(Ad(NASDAQ), type='log')
SNP$SNP.Return = dailyReturn(Ad(SNP), type='log')
# daily log return
# Ad 是調整後收盤價(美金
# 每日的報酬率
# 第 1 筆 Return 為 0.000000000。
APPLE$APPLE.ReturnLag = lag(APPLE$APPLE.Return)
TSMC$TSMC.ReturnLag = lag(TSMC$TSMC.Return)
AMD$AMD.ReturnLag = lag(AMD$AMD.Return)
INTEL$INTEL.ReturnLag = lag(INTEL$INTEL.Return)
DJI$DJI.ReturnLag = lag(DJI$DJI.Return)
NASDAQ$NASDAQ.ReturnLag = lag(NASDAQ$NASDAQ.Return)
SNP$SNP.ReturnLag = lag(SNP$SNP.Return)
# 前一期的 log return
# 舉例:TSMC$TSMC.ReturnLag = lag(TSMC$TSMC.Return ,k=2 )就是抓前兩期的資料
# 這裡多做出七個解釋變數
Return1 = merge(APPLE$APPLE.Return, APPLE$APPLE.ReturnLag,
TSMC$TSMC.Return, TSMC$TSMC.ReturnLag,
AMD$AMD.Return, AMD$AMD.ReturnLag,
INTEL$INTEL.Return, INTEL$INTEL.ReturnLag,
DJI$DJI.Return, DJI$DJI.ReturnLag,
NASDAQ$NASDAQ.Return, NASDAQ$NASDAQ.ReturnLag,
SNP$SNP.Return, SNP$SNP.ReturnLag)
# 十四個merge在一起
Return2 = na.omit(Return1)
# 有些日子會除權,會沒有資料,所以我們要將資料合併
# 刪除 Return1 中 NA 的資料 => Return2 資料集
Return3 = Return2[-1,]
# 刪除 Return1 中 第 1 筆資料 (因為 return=0) => Return3 資料集
# 這部分是在整理資料
par(mfrow=c(3,2))
plot(Return3$APPLE.Return)
plot(Return3$TSMC.Return)
plot(Return3$AMD.Return)
plot(Return3$INTEL.Return)
plot(Return3$DJI.Return)
plot(Return3$NASDAQ.Return)
plot(Return3$SNP.Return)
# 畫出log return 圖
pairs(APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
DJI.Return + NASDAQ.Return + SNP.Return + APPLE.ReturnLag +
TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag +
DJI.ReturnLag + NASDAQ.ReturnLag + SNP.ReturnLag,
data=Return3)
#配對,注意大小寫還有,p-value值,看變數之間的關聯性
out = lm(APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
DJI.Return + NASDAQ.Return + SNP.Return + APPLE.ReturnLag +
TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag +
DJI.ReturnLag + NASDAQ.ReturnLag + SNP.ReturnLag,
data=Return3)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
## DJI.Return + NASDAQ.Return + SNP.Return + APPLE.ReturnLag +
## TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag + DJI.ReturnLag +
## NASDAQ.ReturnLag + SNP.ReturnLag, data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.021933 -0.004606 -0.000618 0.004604 0.041667
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0012176 0.0005882 2.070 0.03954 *
## TSMC.Return 0.1630448 0.0501563 3.251 0.00132 **
## AMD.Return -0.0367414 0.0227356 -1.616 0.10743
## INTEL.Return 0.0023532 0.0449011 0.052 0.95825
## DJI.Return 0.7229407 0.2920044 2.476 0.01400 *
## NASDAQ.Return 1.8575583 0.2599787 7.145 1.12e-11 ***
## SNP.Return -1.5768776 0.4859376 -3.245 0.00135 **
## APPLE.ReturnLag -0.0034629 0.0610112 -0.057 0.95479
## TSMC.ReturnLag 0.0060751 0.0514110 0.118 0.90604
## AMD.ReturnLag 0.0164466 0.0231387 0.711 0.47792
## INTEL.ReturnLag 0.0419627 0.0454915 0.922 0.35725
## DJI.ReturnLag -0.4723379 0.2890861 -1.634 0.10362
## NASDAQ.ReturnLag -0.7898668 0.2791140 -2.830 0.00506 **
## SNP.ReturnLag 1.3516362 0.4857586 2.783 0.00583 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.008907 on 235 degrees of freedom
## Multiple R-squared: 0.6744, Adjusted R-squared: 0.6564
## F-statistic: 37.44 on 13 and 235 DF, p-value: < 2.2e-16
plot(out)
#解釋變數負相關,可能有共線性(結論不是用這個分析)
#解釋變數越多相對少的,r-squa越大,正常的現象
#改良版:adjsut r-squa
vif(out)
## TSMC.Return AMD.Return INTEL.Return DJI.Return
## 1.784108 1.727300 1.778402 15.671103
## NASDAQ.Return SNP.Return APPLE.ReturnLag TSMC.ReturnLag
## 19.968371 44.200035 3.229867 2.001969
## AMD.ReturnLag INTEL.ReturnLag DJI.ReturnLag NASDAQ.ReturnLag
## 1.858558 1.910449 16.223040 23.964594
## SNP.ReturnLag
## 46.058427
# 檢查解釋變數是否存在共線性; vif require car package
# 刪除 vif 最大的解釋變數,重複檢查檢查解釋變數是否存在共線性
# 重複這個動作直到所有解釋變數之 vif < 10。
# 超過10表示這個解釋變數跟其他解釋變數有共線性
從變數之間兩兩比較的Pairs Plot,可以發現,三個美股指數的相關性很高(前一期的數據也是)
# 我們刪除了SNP.ReturnLag,因為他最大
out = lm(APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
DJI.Return + NASDAQ.Return + SNP.Return + APPLE.ReturnLag +
TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag +
DJI.ReturnLag + NASDAQ.ReturnLag ,
data=Return3)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
## DJI.Return + NASDAQ.Return + SNP.Return + APPLE.ReturnLag +
## TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag + DJI.ReturnLag +
## NASDAQ.ReturnLag, data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.022951 -0.005378 -0.001046 0.004222 0.046454
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0014097 0.0005924 2.380 0.01812 *
## TSMC.Return 0.1541792 0.0507650 3.037 0.00266 **
## AMD.Return -0.0350701 0.0230500 -1.521 0.12948
## INTEL.Return 0.0031999 0.0455369 0.070 0.94404
## DJI.Return 0.7522048 0.2959541 2.542 0.01167 *
## NASDAQ.Return 1.8387489 0.2635771 6.976 3.03e-11 ***
## SNP.Return -1.5746406 0.4928296 -3.195 0.00159 **
## APPLE.ReturnLag -0.0390000 0.0605057 -0.645 0.51983
## TSMC.ReturnLag 0.0040490 0.0521350 0.078 0.93816
## AMD.ReturnLag 0.0160528 0.0234664 0.684 0.49460
## INTEL.ReturnLag 0.0258116 0.0457596 0.564 0.57324
## DJI.ReturnLag 0.1873010 0.1677888 1.116 0.26543
## NASDAQ.ReturnLag -0.1515642 0.1612577 -0.940 0.34824
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.009034 on 236 degrees of freedom
## Multiple R-squared: 0.6637, Adjusted R-squared: 0.6466
## F-statistic: 38.81 on 12 and 236 DF, p-value: < 2.2e-16
vif(out)
## TSMC.Return AMD.Return INTEL.Return DJI.Return
## 1.776909 1.726094 1.778320 15.650775
## NASDAQ.Return SNP.Return APPLE.ReturnLag TSMC.ReturnLag
## 19.954870 44.199914 3.088336 2.001568
## AMD.ReturnLag INTEL.ReturnLag DJI.ReturnLag NASDAQ.ReturnLag
## 1.858489 1.879346 5.313366 7.777032
# 第二次做vif,發現SNP.Return是最大的要刪掉它
out = lm(APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
DJI.Return + NASDAQ.Return + APPLE.ReturnLag +
TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag +
DJI.ReturnLag + NASDAQ.ReturnLag ,
data=Return3)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return +
## DJI.Return + NASDAQ.Return + APPLE.ReturnLag + TSMC.ReturnLag +
## AMD.ReturnLag + INTEL.ReturnLag + DJI.ReturnLag + NASDAQ.ReturnLag,
## data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.022344 -0.005380 -0.000605 0.004954 0.049177
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0012610 0.0006019 2.095 0.03725 *
## TSMC.Return 0.1627666 0.0516692 3.150 0.00184 **
## AMD.Return -0.0364306 0.0234896 -1.551 0.12225
## INTEL.Return 0.0210649 0.0460620 0.457 0.64786
## DJI.Return -0.0153927 0.1761628 -0.087 0.93045
## NASDAQ.Return 1.1441042 0.1518846 7.533 1.04e-12 ***
## APPLE.ReturnLag -0.0420780 0.0616621 -0.682 0.49565
## TSMC.ReturnLag 0.0063164 0.0531333 0.119 0.90547
## AMD.ReturnLag 0.0108246 0.0238598 0.454 0.65048
## INTEL.ReturnLag 0.0484322 0.0460786 1.051 0.29429
## DJI.ReturnLag 0.2599864 0.1694383 1.534 0.12626
## NASDAQ.ReturnLag -0.2183737 0.1629731 -1.340 0.18155
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.009207 on 237 degrees of freedom
## Multiple R-squared: 0.6491, Adjusted R-squared: 0.6329
## F-statistic: 39.86 on 11 and 237 DF, p-value: < 2.2e-16
vif(out)
## TSMC.Return AMD.Return INTEL.Return DJI.Return
## 1.771928 1.725505 1.751509 5.337778
## NASDAQ.Return APPLE.ReturnLag TSMC.ReturnLag AMD.ReturnLag
## 6.378313 3.087553 2.001197 1.849452
## INTEL.ReturnLag DJI.ReturnLag NASDAQ.ReturnLag
## 1.834359 5.215694 7.646271
# 第三次做vif,刪除了SNP.Return之後,剩餘的vif值都小於10
第一次刪除了SNP.ReturnLag,第二次刪除了SNP.Return,第三次的結果,所有的VIF值都小於10了
# Stepwise regression selection by AIC; require MASS package
# 利用 AIC 指標做逐步迴歸,選擇重要解釋變數。
stepAICout = stepAIC(out, direction="both")
stepAICout$anova
# results='hide'
# Step regression selection by BIC; require MASS package
# 利用 BIC 指標做逐步迴歸,選擇重要解釋變數。
stepBICout = stepAIC(out, direction="both", k=log(nrow(Return3)))
## Start: AIC=-2280.58
## APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return + DJI.Return +
## NASDAQ.Return + APPLE.ReturnLag + TSMC.ReturnLag + AMD.ReturnLag +
## INTEL.ReturnLag + DJI.ReturnLag + NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - DJI.Return 1 0.0000006 0.020093 -2286.1
## - TSMC.ReturnLag 1 0.0000012 0.020093 -2286.1
## - AMD.ReturnLag 1 0.0000174 0.020110 -2285.9
## - INTEL.Return 1 0.0000177 0.020110 -2285.9
## - APPLE.ReturnLag 1 0.0000395 0.020132 -2285.6
## - INTEL.ReturnLag 1 0.0000937 0.020186 -2284.9
## - NASDAQ.ReturnLag 1 0.0001522 0.020244 -2284.2
## - DJI.ReturnLag 1 0.0001996 0.020292 -2283.6
## - AMD.Return 1 0.0002039 0.020296 -2283.6
## <none> 0.020092 -2280.6
## - TSMC.Return 1 0.0008413 0.020934 -2275.9
## - NASDAQ.Return 1 0.0048104 0.024903 -2232.7
##
## Step: AIC=-2286.09
## APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return + NASDAQ.Return +
## APPLE.ReturnLag + TSMC.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag +
## DJI.ReturnLag + NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - TSMC.ReturnLag 1 0.0000010 0.020094 -2291.6
## - INTEL.Return 1 0.0000172 0.020110 -2291.4
## - AMD.ReturnLag 1 0.0000192 0.020112 -2291.4
## - APPLE.ReturnLag 1 0.0000392 0.020132 -2291.1
## - INTEL.ReturnLag 1 0.0000934 0.020186 -2290.5
## - NASDAQ.ReturnLag 1 0.0001618 0.020255 -2289.6
## - AMD.Return 1 0.0002038 0.020297 -2289.1
## - DJI.ReturnLag 1 0.0002061 0.020299 -2289.1
## <none> 0.020093 -2286.1
## - TSMC.Return 1 0.0008415 0.020934 -2281.4
## + DJI.Return 1 0.0000006 0.020092 -2280.6
## - NASDAQ.Return 1 0.0116696 0.031762 -2177.6
##
## Step: AIC=-2291.6
## APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return + NASDAQ.Return +
## APPLE.ReturnLag + AMD.ReturnLag + INTEL.ReturnLag + DJI.ReturnLag +
## NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - INTEL.Return 1 0.0000177 0.020112 -2296.9
## - AMD.ReturnLag 1 0.0000214 0.020115 -2296.8
## - APPLE.ReturnLag 1 0.0000384 0.020132 -2296.6
## - INTEL.ReturnLag 1 0.0001045 0.020198 -2295.8
## - NASDAQ.ReturnLag 1 0.0001609 0.020255 -2295.1
## - DJI.ReturnLag 1 0.0002063 0.020300 -2294.6
## - AMD.Return 1 0.0002070 0.020301 -2294.6
## <none> 0.020094 -2291.6
## - TSMC.Return 1 0.0008468 0.020941 -2286.8
## + TSMC.ReturnLag 1 0.0000010 0.020093 -2286.1
## + DJI.Return 1 0.0000004 0.020093 -2286.1
## - NASDAQ.Return 1 0.0117453 0.031839 -2182.5
##
## Step: AIC=-2296.9
## APPLE.Return ~ TSMC.Return + AMD.Return + NASDAQ.Return + APPLE.ReturnLag +
## AMD.ReturnLag + INTEL.ReturnLag + DJI.ReturnLag + NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - AMD.ReturnLag 1 0.0000181 0.020130 -2302.2
## - APPLE.ReturnLag 1 0.0000428 0.020154 -2301.9
## - INTEL.ReturnLag 1 0.0001056 0.020217 -2301.1
## - NASDAQ.ReturnLag 1 0.0001578 0.020269 -2300.5
## - DJI.ReturnLag 1 0.0002141 0.020326 -2299.8
## - AMD.Return 1 0.0002192 0.020331 -2299.7
## <none> 0.020112 -2296.9
## + INTEL.Return 1 0.0000177 0.020094 -2291.6
## + TSMC.ReturnLag 1 0.0000015 0.020110 -2291.4
## + DJI.Return 1 0.0000000 0.020112 -2291.4
## - TSMC.Return 1 0.0009770 0.021089 -2290.6
## - NASDAQ.Return 1 0.0145313 0.034643 -2167.0
##
## Step: AIC=-2302.19
## APPLE.Return ~ TSMC.Return + AMD.Return + NASDAQ.Return + APPLE.ReturnLag +
## INTEL.ReturnLag + DJI.ReturnLag + NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - APPLE.ReturnLag 1 0.0000436 0.020173 -2307.2
## - INTEL.ReturnLag 1 0.0001031 0.020233 -2306.4
## - NASDAQ.ReturnLag 1 0.0001398 0.020269 -2306.0
## - DJI.ReturnLag 1 0.0002113 0.020341 -2305.1
## - AMD.Return 1 0.0002166 0.020346 -2305.0
## <none> 0.020130 -2302.2
## + AMD.ReturnLag 1 0.0000181 0.020112 -2296.9
## + INTEL.Return 1 0.0000144 0.020115 -2296.8
## + TSMC.ReturnLag 1 0.0000038 0.020126 -2296.7
## + DJI.Return 1 0.0000006 0.020129 -2296.7
## - TSMC.Return 1 0.0009672 0.021097 -2296.0
## - NASDAQ.Return 1 0.0145411 0.034671 -2172.3
##
## Step: AIC=-2307.17
## APPLE.Return ~ TSMC.Return + AMD.Return + NASDAQ.Return + INTEL.ReturnLag +
## DJI.ReturnLag + NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - INTEL.ReturnLag 1 0.0000892 0.020262 -2311.6
## - DJI.ReturnLag 1 0.0002041 0.020377 -2310.2
## - AMD.Return 1 0.0002211 0.020394 -2310.0
## - NASDAQ.ReturnLag 1 0.0002734 0.020447 -2309.3
## <none> 0.020173 -2307.2
## + APPLE.ReturnLag 1 0.0000436 0.020130 -2302.2
## + AMD.ReturnLag 1 0.0000189 0.020154 -2301.9
## + INTEL.Return 1 0.0000183 0.020155 -2301.9
## + DJI.Return 1 0.0000003 0.020173 -2301.7
## + TSMC.ReturnLag 1 0.0000002 0.020173 -2301.7
## - TSMC.Return 1 0.0009364 0.021110 -2301.4
## - NASDAQ.Return 1 0.0149911 0.035164 -2174.3
##
## Step: AIC=-2311.59
## APPLE.Return ~ TSMC.Return + AMD.Return + NASDAQ.Return + DJI.ReturnLag +
## NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - AMD.Return 1 0.0002139 0.020476 -2314.5
## - NASDAQ.ReturnLag 1 0.0002214 0.020484 -2314.4
## - DJI.ReturnLag 1 0.0002598 0.020522 -2313.9
## <none> 0.020262 -2311.6
## + INTEL.ReturnLag 1 0.0000892 0.020173 -2307.2
## + APPLE.ReturnLag 1 0.0000298 0.020233 -2306.4
## + INTEL.Return 1 0.0000188 0.020244 -2306.3
## + AMD.ReturnLag 1 0.0000164 0.020246 -2306.3
## + TSMC.ReturnLag 1 0.0000084 0.020254 -2306.2
## + DJI.Return 1 0.0000008 0.020262 -2306.1
## - TSMC.Return 1 0.0009992 0.021262 -2305.1
## - NASDAQ.Return 1 0.0149524 0.035215 -2179.5
##
## Step: AIC=-2314.49
## APPLE.Return ~ TSMC.Return + NASDAQ.Return + DJI.ReturnLag +
## NASDAQ.ReturnLag
##
## Df Sum of Sq RSS AIC
## - NASDAQ.ReturnLag 1 0.0001970 0.020673 -2317.6
## - DJI.ReturnLag 1 0.0002306 0.020707 -2317.2
## <none> 0.020476 -2314.5
## + AMD.Return 1 0.0002139 0.020262 -2311.6
## + INTEL.ReturnLag 1 0.0000819 0.020394 -2310.0
## + APPLE.ReturnLag 1 0.0000340 0.020442 -2309.4
## - TSMC.Return 1 0.0008946 0.021371 -2309.4
## + INTEL.Return 1 0.0000316 0.020445 -2309.4
## + AMD.ReturnLag 1 0.0000141 0.020462 -2309.1
## + TSMC.ReturnLag 1 0.0000140 0.020462 -2309.1
## + DJI.Return 1 0.0000020 0.020474 -2309.0
## - NASDAQ.Return 1 0.0175929 0.038069 -2165.6
##
## Step: AIC=-2317.62
## APPLE.Return ~ TSMC.Return + NASDAQ.Return + DJI.ReturnLag
##
## Df Sum of Sq RSS AIC
## - DJI.ReturnLag 1 0.0000348 0.020708 -2322.7
## <none> 0.020673 -2317.6
## + NASDAQ.ReturnLag 1 0.0001970 0.020476 -2314.5
## + AMD.Return 1 0.0001894 0.020484 -2314.4
## + APPLE.ReturnLag 1 0.0001381 0.020535 -2313.8
## - TSMC.Return 1 0.0008686 0.021542 -2312.9
## + INTEL.Return 1 0.0000373 0.020636 -2312.6
## + INTEL.ReturnLag 1 0.0000350 0.020638 -2312.5
## + AMD.ReturnLag 1 0.0000033 0.020670 -2312.2
## + TSMC.ReturnLag 1 0.0000004 0.020673 -2312.1
## + DJI.Return 1 0.0000000 0.020673 -2312.1
## - NASDAQ.Return 1 0.0176814 0.038355 -2169.2
##
## Step: AIC=-2322.72
## APPLE.Return ~ TSMC.Return + NASDAQ.Return
##
## Df Sum of Sq RSS AIC
## <none> 0.020708 -2322.7
## + AMD.Return 1 0.0001846 0.020523 -2319.4
## - TSMC.Return 1 0.0008488 0.021557 -2318.2
## + INTEL.ReturnLag 1 0.0000688 0.020639 -2318.0
## + INTEL.Return 1 0.0000407 0.020667 -2317.7
## + DJI.ReturnLag 1 0.0000348 0.020673 -2317.6
## + APPLE.ReturnLag 1 0.0000149 0.020693 -2317.4
## + TSMC.ReturnLag 1 0.0000084 0.020700 -2317.3
## + AMD.ReturnLag 1 0.0000033 0.020705 -2317.2
## + NASDAQ.ReturnLag 1 0.0000012 0.020707 -2317.2
## + DJI.Return 1 0.0000001 0.020708 -2317.2
## - NASDAQ.Return 1 0.0176519 0.038360 -2174.7
stepBICout$anova
## Stepwise Model Path
## Analysis of Deviance Table
##
## Initial Model:
## APPLE.Return ~ TSMC.Return + AMD.Return + INTEL.Return + DJI.Return +
## NASDAQ.Return + APPLE.ReturnLag + TSMC.ReturnLag + AMD.ReturnLag +
## INTEL.ReturnLag + DJI.ReturnLag + NASDAQ.ReturnLag
##
## Final Model:
## APPLE.Return ~ TSMC.Return + NASDAQ.Return
##
##
## Step Df Deviance Resid. Df Resid. Dev AIC
## 1 237 0.02009225 -2280.584
## 2 - DJI.Return 1 6.472596e-07 238 0.02009290 -2286.094
## 3 - TSMC.ReturnLag 1 9.666900e-07 239 0.02009386 -2291.599
## 4 - INTEL.Return 1 1.769116e-05 240 0.02011155 -2296.897
## 5 - AMD.ReturnLag 1 1.808405e-05 241 0.02012964 -2302.191
## 6 - APPLE.ReturnLag 1 4.364988e-05 242 0.02017329 -2307.169
## 7 - INTEL.ReturnLag 1 8.917579e-05 243 0.02026246 -2311.588
## 8 - AMD.Return 1 2.138863e-04 244 0.02047635 -2314.491
## 9 - NASDAQ.ReturnLag 1 1.970068e-04 245 0.02067336 -2317.624
## 10 - DJI.ReturnLag 1 3.476295e-05 246 0.02070812 -2322.724
# display results
# Final model
# 依據 BIC 得到的 Final model
out = lm(APPLE.Return ~ TSMC.Return + NASDAQ.Return,
data=Return3)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + NASDAQ.Return, data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.021285 -0.005978 -0.000335 0.004540 0.052925
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0011694 0.0005889 1.986 0.04818 *
## TSMC.Return 0.1542288 0.0485706 3.175 0.00169 **
## NASDAQ.Return 1.0897279 0.0752532 14.481 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.009175 on 246 degrees of freedom
## Multiple R-squared: 0.6384, Adjusted R-squared: 0.6354
## F-statistic: 217.1 on 2 and 246 DF, p-value: < 2.2e-16
vif(out)
## TSMC.Return NASDAQ.Return
## 1.576897 1.576897
# 檢查共線性; vif require car package
# 事實上,此處可以不再檢查 vif,當解釋變數變少時,vif 不會增加。
最後留下了這兩個重要的解釋變數 TSMC.Return & NASDAQ.Return,做VIF檢驗也都<10
CookDistance = cooks.distance(out)
# Cook's distance
plot(CookDistance, ylab="Cook's distance")
#算出影響點的指標
#移除(不推薦)或是用虛擬變數
Cook_condition = CookDistance > 4/(nrow(Return3)-length(out$coefficients))
#滿足這個條件的觀察值可視為影響點
Cook_out = CookDistance[Cook_condition]
# Rule of thumb (課本建議的經驗法則)
influenceIndexPlot(out, vars="Cook", id=list(n=length(Cook_out)))
influenceIndexPlot(out, vars="Cook")
#需要car套件,有預期
#有些特別日子,是除息除權或是股東會
# influenceIndexPlot() require car package
# Cook's distance 圖可以看影響點 (influence point),
# Influence plot 會標示出 length(Cook_out) 個影響點 (influence point) 的日期。
SepcificDate = as.Date(c("2019-01-30", "2019-05-13"))
#有幾個點寫幾個
Return4 = Return3[!(index(Return3) %in% SepcificDate),]
# 把文字字串轉成時間格式
# !是否定
# 刪除 "2019-01-30, "2019-05-13" 的資料 => Return4 資料集
# 但統計思維是不建議任意刪除資料,
# 之後會利用虛擬變數作法 (dummy variable) 處理影響點 (influence point)。
out = lm(APPLE.Return ~ TSMC.Return + NASDAQ.Return,
data=Return4)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + NASDAQ.Return, data = Return4)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.020690 -0.005513 -0.000339 0.004590 0.052629
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0011875 0.0005697 2.085 0.03815 *
## TSMC.Return 0.1401335 0.0468483 2.991 0.00306 **
## NASDAQ.Return 1.0406285 0.0734818 14.162 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.008822 on 244 degrees of freedom
## Multiple R-squared: 0.615, Adjusted R-squared: 0.6119
## F-statistic: 194.9 on 2 and 244 DF, p-value: < 2.2e-16
plot(out)
vif(out)
## TSMC.Return NASDAQ.Return
## 1.507132 1.507132
這裡就是用課本說的 Rule of thumb,滿足特定條件可視為影響點, 這些日子有可能是除息除權,或是股東會
# Residual plots from the final model
plot(out)
# 畫一些殘差分析的圖
StandardizedResidual = rstandard(out)
# standardized residual
plot(StandardizedResidual, ylab="Standardized Residuals")
plot(abs(StandardizedResidual), ylab="|Standardized Residuals|")
qqnorm(StandardizedResidual, ylab="Standardized Residuals")
qqline(StandardizedResidual, lty=2, col=2)
qqPlot(StandardizedResidual, ylab="Standardized Residuals")
# QQ plot for standardized residual; require car package
shapiro.test(StandardizedResidual)
# Shapiro-Wilks normality test
residualPlots(out)
# require car package
fittedvalue = fitted(out)
# fitted value
plot(fittedvalue, StandardizedResidual,
xlab="fitted value", ylab="Studentized Residuals")
# 標準化殘差對預測值的圖
hatvalue = hatvalues(out)
# leverage value
plot(hatvalue)
StudentizedResiduals = rstudent(out)
plot(StudentizedResiduals, ylab="Studentized Residuals")
# 利用虛擬變數 (dummy variable) 技巧解決 influence point 問題:
SepcificDate1 = as.Date(c("2019-01-30"))
SepcificDate2 = as.Date(c("2019-05-13"))
SepcificDate = as.Date(c("2019-01-30", "2019-05-13"))
Return3$influence1 = (index(Return3) %in% SepcificDate1)
Return3$influence2 = (index(Return3) %in% SepcificDate2)
# "2019-01-30" => Return3$influence1=1; 其餘資料 => Return3$influence1=0
# "2019-05-13" => Return3$influence2=1; 其餘資料 => Return3$influence2=0
out = lm(APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence1 + influence2, data=Return3)
#都在return3底下的變數,要一致
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence1 +
## influence2, data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.020690 -0.005475 -0.000287 0.004568 0.052629
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0011875 0.0005697 2.085 0.03815 *
## TSMC.Return 0.1401335 0.0468483 2.991 0.00306 **
## NASDAQ.Return 1.0406285 0.0734818 14.162 < 2e-16 ***
## influence1 0.0382510 0.0089311 4.283 2.65e-05 ***
## influence2 -0.0188129 0.0091215 -2.062 0.04022 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.008822 on 244 degrees of freedom
## Multiple R-squared: 0.6684, Adjusted R-squared: 0.6629
## F-statistic: 122.9 on 4 and 244 DF, p-value: < 2.2e-16
# 注意觀察 influence1, influence2 之係數與檢定結果
# 比較 "2019-01-30", "2019-05-13" 合併為 1 個 dummy variable:
# Return3$influence=1; 其餘資料 => Return3$influence=0
Return3$influence = (index(Return3) %in% SepcificDate)
out = lm(APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence,
data=Return3)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence,
## data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.026427 -0.005945 -0.000300 0.004681 0.053049
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0010761 0.0005901 1.824 0.06942 .
## TSMC.Return 0.1557981 0.0484331 3.217 0.00147 **
## NASDAQ.Return 1.0950764 0.0751006 14.581 < 2e-16 ***
## influence 0.0103026 0.0065123 1.582 0.11494
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.009147 on 245 degrees of freedom
## Multiple R-squared: 0.642, Adjusted R-squared: 0.6377
## F-statistic: 146.5 on 3 and 245 DF, p-value: < 2.2e-16
我們可以看到,第一個summary(out),兩個影響點的係數不同號,P-value值都小於0.05,有顯著水準,所以其實可以保留
# Residual plots from the final model (加入 influence point 之虛擬變數)
plot(out)
StandardizedResidual = rstandard(out)
# standardized residual
plot(StandardizedResidual, ylab="Standardized Residuals")
plot(abs(StandardizedResidual), ylab="|Standardized Residuals|")
qqnorm(StandardizedResidual, ylab="Standardized Residuals")
qqline(StandardizedResidual, lty=2, col=2)
qqPlot(StandardizedResidual, ylab="Standardized Residuals")
## 2019-05-01 2019-01-30
## 81 18
# QQ plot for standardized residual; require car package
shapiro.test(StandardizedResidual)
##
## Shapiro-Wilk normality test
##
## data: StandardizedResidual
## W = 0.93475, p-value = 4.746e-09
# Shapiro-Wilks normality test
residualPlots(out)
## Test stat Pr(>|Test stat|)
## TSMC.Return -1.9393 0.05362 .
## NASDAQ.Return -1.1556 0.24898
## influence -0.7419 0.45887
## Tukey test -0.3684 0.71259
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# require car package
fittedvalue = fitted(out)
# fitted value
plot(fittedvalue, StandardizedResidual,
xlab="fitted value", ylab="Studentized Residuals")
# 標準化殘差對預測值的圖
hatvalue = hatvalues(out)
# leverage value
plot(hatvalue)
StudentizedResiduals = rstudent(out)
plot(StudentizedResiduals, ylab="Studentized Residuals")
殘差分析2是有加入虛擬變數的,理論上迴歸模型配適完成後,其殘差值(residual)必須符合常態性(normality)、獨立性(independence)以及變異數同質性(homogeneity of variance)三種假設,所以接下來要用三種檢定檢查這三個條件是否符合。標準化的殘差與預測值呈帶狀分布,模型假設是OK的,QQ-Plot大致分布在斜率45度線上,應是近似於常態分配
# 最後的結果與選用模型
stepBICout = stepAIC(out, direction="both", k=log(nrow(Return3)))
## Start: AIC=-2319.74
## APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence
##
## Df Sum of Sq RSS AIC
## - influence 1 0.0002094 0.020708 -2322.7
## <none> 0.020499 -2319.7
## - TSMC.Return 1 0.0008658 0.021364 -2314.9
## - NASDAQ.Return 1 0.0177895 0.038288 -2169.7
##
## Step: AIC=-2322.72
## APPLE.Return ~ TSMC.Return + NASDAQ.Return
##
## Df Sum of Sq RSS AIC
## <none> 0.020708 -2322.7
## + influence 1 0.0002094 0.020499 -2319.7
## - TSMC.Return 1 0.0008488 0.021557 -2318.2
## - NASDAQ.Return 1 0.0176519 0.038360 -2174.7
stepBICout$anova
## Stepwise Model Path
## Analysis of Deviance Table
##
## Initial Model:
## APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence
##
## Final Model:
## APPLE.Return ~ TSMC.Return + NASDAQ.Return
##
##
## Step Df Deviance Resid. Df Resid. Dev AIC
## 1 245 0.02049872 -2319.737
## 2 - influence 1 0.0002094032 246 0.02070812 -2322.724
# display results
# Final model
out = lm(APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence1 + influence2,
data=Return3)
summary(out)
##
## Call:
## lm(formula = APPLE.Return ~ TSMC.Return + NASDAQ.Return + influence1 +
## influence2, data = Return3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.020690 -0.005475 -0.000287 0.004568 0.052629
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0011875 0.0005697 2.085 0.03815 *
## TSMC.Return 0.1401335 0.0468483 2.991 0.00306 **
## NASDAQ.Return 1.0406285 0.0734818 14.162 < 2e-16 ***
## influence1 0.0382510 0.0089311 4.283 2.65e-05 ***
## influence2 -0.0188129 0.0091215 -2.062 0.04022 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.008822 on 244 degrees of freedom
## Multiple R-squared: 0.6684, Adjusted R-squared: 0.6629
## F-statistic: 122.9 on 4 and 244 DF, p-value: < 2.2e-16
vif(out)
## TSMC.Return NASDAQ.Return influence1 influence2
## 1.586715 1.626178 1.020731 1.064712
從R-squa為0.6684來看,此模型符合統計模型的合理性,p-value也都有顯著水準,而納斯達克指數的報酬率每增加一單位,蘋果的股價報酬率會增加1.04單位,也是符合直覺,因為納斯達克指數的成分股就有蘋果,以過往的新聞來說,確實指數的增減由幾家龍頭科技巨頭在影響。
1,T檢驗和F檢驗的由來
一般而言,為了確定從樣本(sample)統計結果推論至總體時所犯錯的概率,我們會利用統計學家所開發的一些統計方法,進行統計檢定。
通過把所得到的統計檢定值,與統計學家建立了一些隨機變數的概率分佈(probability distribution)進行比較,我們可以知道在多少%的機會下會得到目前的結果。倘若經比較後發現,出現這結果的機率很少,亦即是說,是在機會很 少、很罕有的情況下才出現;那我們便可以有信心的說,這不是巧合,是具有統計學上的意義的(用統計學的話講,就是能夠拒絕虛無假設null hypothesis,Ho)。相反,若比較後發現,出現的機率很高,並不罕見;那我們便不能很有信心的直指這不是巧合,也許是巧合,也許不是,但我們沒 能確定。
F值和t值就是這些統計檢定值,與它們相對應的概率分佈,就是F分佈和t分佈。統計顯著性(sig)就是出現目前樣本這結果的機率。
2,統計學意義(P值或sig值) 結果的統計學意義是結果真實程度(能夠代表總體)的一種估計方法。專業上,p值為結果可信程度的一個遞減指標,p值越大,我們越不能認為樣本中變數的關聯 是總體中各變數關聯的可靠指標。p值是將觀察結果認為有效即具有總體代表性的犯錯概率。如p=0.05提示樣本中變數關聯有5%的可能是由於偶然性造成 的。即假設總體中任意變數間均無關聯,我們重複類似實驗,會發現約20個實驗中有一個實驗,我們所研究的變數關聯將等於或強於我們的實驗結果。(這並不是 說如果變數間存在關聯,我們可得到5%或95%次數的相同結果,當總體中的變數存在關聯,重複研究和發現關聯的可能性與設計的統計學效力有關。)在許多研 究領域,0.05的p值通常被認為是可接受錯誤的邊界水平。
3,T檢驗和F檢驗
至於具體要檢定的內容,須看你是在做哪一個統計程式。
舉一個例子,比如,你要檢驗兩獨立樣本均數差異是否能推論至總體,而行的t檢驗。 兩樣本(如某班男生和女生)某變數(如身高)的均數並不相同,但這差別是否能推論至總體,代表總體的情況也是存在著差異呢? 會不會總體中男女生根本沒有差別,只不過是你那麼巧抽到這2樣本的數值不同? 為此,我們進行t檢定,算出一個t檢定值。 與統計學家建立的以「總體中沒差別」作基礎的隨機變數t分佈進行比較,看看在多少%的機會(亦即顯著性sig值)下會得到目前的結果。 若顯著性sig值很少,比如<0.05(少於5%機率),亦即是說,「如果」總體「真的」沒有差別,那麼就只有在機會很少(5%)、很罕有的情況 下,才會出現目前這樣本的情況。雖然還是有5%機會出錯(1-0.05=5%),但我們還是可以「比較有信心」的說:目前樣本中這情況(男女生出現差異的 情況)不是巧合,是具統計學意義的,「總體中男女生不存差異」的虛無假設應予拒絕,簡言之,總體應該存在著差異。
每一種統計方法的檢定的內容都不相同,同樣是t-檢定,可能是上述的檢定總體中是否存在差異,也同能是檢定總體中的單一值是否等於0或者等於某一個數值。
至於F-檢定,方差分析(或譯變異數分析,Analysis of Variance),它的原理大致也是上面說的,但它是透過檢視變數的方差而進行的。它主要用於:均數差別的顯著性檢驗、分離各有關因素並估計其對總變異 的作用、分析因素間的互動作用、方差齊性(Equality of Variances)檢驗等情況。