R實作

原則上我是希望能夠批次下載所有上市股票的SVI,這樣分析才會夠有可信度,只可惜Google的流量限制讓我一直無法蒐集全股票的SVI(即使只抓臺灣50也有點困難…)。但可以先用台積電來作demo,等到有足夠資料,再將寫好的程式套上去就好。以下先來實作將股價及SVI合併並且繪圖。

svi_2330 <- trends_weekly("2330", "TW")
svi_2330 <- trends_abnormal(svi_2330)
tail(svi_2330)
##           date keyword   SVI  log_SVI       ASVI
## 517 2018-11-25    2330 51.35 3.938665 -0.3547824
## 518 2018-12-02    2330 50.92 3.930256 -0.3631915
## 519 2018-12-09    2330 38.86 3.659965 -0.3698603
## 520 2018-12-16    2330 40.87 3.710396 -0.2240641
## 521 2018-12-23    2330 43.55 3.773910 -0.1205293
## 522 2018-12-30    2330 36.85 3.606856 -0.2094103

視覺化

使用highcharter套件來視覺化:

library(highcharter)
hc_trends <- function(data, x = "SVI") {
  hc <- highchart() %>% 
    hc_title(text = x) %>% 
    hc_chart(type = "line") %>% 
    hc_xAxis(categories = data$date, 
             title = list(text = "Time")) %>% 
    hc_yAxis(labels = list(format = '{value:.2f}'),
             title = list(text = ifelse(x=="SVI", "Search Volume Index", "Abnormal Search Volume Index"))) %>% 
    hc_add_series(data[,x], showInLegend = FALSE) %>% 
    hc_add_theme(hc_theme_ft())
  return(hc)
}
# Figure 1. SVI
hc_trends(svi_2330, x = "SVI")
# Figure 2. ASVI
hc_trends(svi_2330, x = "ASVI")

與股價資料合併

下面就不一一贅述股價資料的處理過程,基本上為了要讓兩者合併,由於是週資料,所以必須根據變數年(year)及變數週(week),這兩者都可以輕鬆透過lubridate套件來計算。而每週的股價我以週三的股價作為基準。

stock_2330 <- tq_get("2330.TW", from = "2009-01-01", to = "2018-12-31") %>% 
  filter(weekdays(date) == "Wednesday") %>% 
  mutate(year = year(date), week = week(date), ret = ROC(adjusted)) %>% 
  select(year, week, price = adjusted, ret)
svi_2330 <- svi_2330 %>% 
  mutate(year = year(date), week = week(date))
# merge
trends_2330 <- merge(stock_2330, svi_2330, by = c("year", "week"))
# Figure 3. SVI and Stock Prices of TSMC
highchart() %>% 
  hc_title(text = "TSMC: 2330") %>% 
  hc_subtitle(text = "ranging from 2009-01-01 to 2018-12-31") %>% 
  hc_chart(type = "line") %>% 
  hc_xAxis(categories = trends_2330$date.x, 
           title = list(text = "Time")) %>% 
  hc_yAxis_multiples(list(
    labels = list(format = '{value:.0f}'),
    title = list(text = "Search Volume Index")),
    list(
      labels = list(format = '{value:.0f}'),
      title = list(text = "Stock Price"),
      opposite = T
    )) %>% 
  hc_add_series(trends_2330$SVI, name = "SVI(left)") %>% 
  hc_add_series(trends_2330$price, name = "Stock Price(right)", yAxis=1) %>% 
  hc_add_theme(hc_theme_ft())

結語

以上面的結果來說股價的走勢與SVI好像有那麼一點關係,的確以相關性檢定來說,兩者有56.87%的顯著正相關性。然而,若依照Da et al.(2011)的研究,將ASVI與未來一週的週報酬做相關性檢定,相關性只有5.05%而且不顯著,其他的結果也不甚理想,所以這邊就不特別做表顯示結果了。不過也不用沮喪,我只是簡單將兩個變數做時間序列的分析,那篇文章卻是先將Russell 3000前前後後共3606檔的股票做橫斷面(cross-sectional)的分析再跑Fama-MacBeth迴歸,與我上面簡單的分析差很多,因此還不能斷言Google Trends在台灣沒有效果。

其實做到這大家應該都能發現,真正難的不是將code寫出來,也不是複製別人的實證流程,而是如何發想一個具有創造力的點子。也許在Google開放這個服務時就有人想到財金方面的應用,但真正將其發展成有影響力且有顯著結果的研究,恐怕沒有幾人,Da, Engelberg, Gao這三人辦到了,並發表在財務最有影響力的期刊The Journal of Finance。這幾位學者還有許多有趣的研究,將來有機會在撰文介紹,也許在實務上也會有所啟發!

Reference

DA, Z. , ENGELBERG, J. and GAO, P. (2011), In Search of Attention. The Journal of Finance, 66: 1461-1499. doi:10.1111/j.1540-6261.2011.01679.x