An original rank test applied to an event study, which is based on Wilcoxon (1945) rank test.
rank_test(list_of_returns, event_start, event_end)
list_of_returns | a list of objects of S3 class |
---|---|
event_start | an object of |
event_end | an object of |
A data frame of the following columns:
date
: a calendar date
weekday
: a day of the week
percentage
: a share of non-missing observations for a given
day
rank_stat
: a rank test statistic
rank_signif
: a significance of the statistic
This procedure uses ranks of abnormal returns to examine significance of each
day in the event window. In order to get ranks of corresponding abnormal
returns, the procedure uses regular R function rank
with
parameter ties.method = "average"
and na.last = "keep"
. For
this test the estimation period and the event period must not overlap,
otherwise an error will be thrown. The test statistic is assumed to have a
normal distribution (as an approximation). The test is well-specified for the
case, when cross-sectional abnormal returns are not symmetric. The test is
stable to variance increase during event window. This test is more sensitive
to extreme values than sign test. For data with missing data see the
modified_rank_test
. The significance levels of \(\alpha\) are
0.1, 0.05, and 0.01 (marked respectively by *, **, and ***).
Corrado C.J. A Nonparametric Test for Abnormal Security-Price Performance in Event Studies. Journal of Financial Economics 23:385-395, 1989.
Cowan A.R. Nonparametric Event Study Tests. Review of Quantitative Finance and Accounting, 2:343-358, 1992.
Campbell C.J., Wasley C.E. Measuring Security Price Performance Using Daily NASDAQ Returns. Journal of Financial Economics 33:73-92, 1993.
Savickas R. Event-Induced Volatility and Tests for Abnormal Performance. The Journal of Financial Research, 26(2):156-178, 2003.
nonparametric_tests
,sign_test
,
generalized_sign_test
, corrado_sign_test
,
modified_rank_test
, and wilcoxon_test
.
if (FALSE) { library("magrittr") rates_indx <- get_prices_from_tickers("^GSPC", start = as.Date("2019-04-01"), end = as.Date("2020-04-01"), quote = "Close", retclass = "zoo") %>% get_rates_from_prices(quote = "Close", multi_day = TRUE, compounding = "continuous") tickers <- c("AMZN", "ZM", "UBER", "NFLX", "SHOP", "FB", "UPWK") get_prices_from_tickers(tickers, start = as.Date("2019-04-01"), end = as.Date("2020-04-01"), quote = "Close", retclass = "zoo") %>% get_rates_from_prices(quote = "Close", multi_day = TRUE, compounding = "continuous") %>% apply_market_model(regressor = rates_indx, same_regressor_for_all = TRUE, market_model = "sim", estimation_method = "ols", estimation_start = as.Date("2019-04-01"), estimation_end = as.Date("2020-03-13")) %>% rank_test(event_start = as.Date("2020-03-16"), event_end = as.Date("2020-03-20")) } ## The result of the code above is equivalent to: data(securities_returns) rank_test(list_of_returns = securities_returns, event_start = as.Date("2020-03-16"), event_end = as.Date("2020-03-20"))#> date weekday percentage rank_stat rank_signif #> 1 2020-03-16 Monday 100 0.7962064 #> 2 2020-03-17 Tuesday 100 -0.1857202 #> 3 2020-03-18 Wednesday 100 1.0205417 #> 4 2020-03-19 Thursday 100 2.1127972 ** #> 5 2020-03-20 Friday 100 2.9255529 ***