The test is the modification of the original rank test, proposed by Corrado 1989. This test is adapted to missing values in abnormal returns.
modified_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
mrank_stat
: a modified rank test statistic
mrank_signif
: a significance of the statistic
In addition to the original rank test, the procedure divides corresponding ranks by the number of nonmissing returns plus one for each security. This leads to order statistics with uniform distribution. In limit overall statistics under a null hypothesis is approximately normally distributed. For this test the estimation period and the event period must not overlap, otherwise an error will be thrown. The test is well-specified for the case, when cross-sectional abnormal returns are not symmetric. The test is stable to variance increase during the event window. This test is more sensitive to extreme values than the sign test. The significance levels of \(\alpha\) are 0.1, 0.05, and 0.01 (marked respectively by *, **, and ***).
Corrado C.J., Zivney T.L. The Specification and Power of the Sign Test in Event Study Hypothesis Tests Using Daily Stock Returns. Journal of Financial and Quantitative Analysis, 27(3):465-478, 1992.
Kolari J.W., Pynnonen S. Event Study Testing with Cross-sectional Correlation of Abnormal Returns. The Review of Financial Studies, 23(11):3996-4025, 2010.
nonparametric_tests
,sign_test
,
generalized_sign_test
, corrado_sign_test
,
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")) %>% modified_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) modified_rank_test(list_of_returns = securities_returns, event_start = as.Date("2020-03-16"), event_end = as.Date("2020-03-20"))#> date weekday percentage mrank_stat mrank_signif #> 1 2020-03-16 Monday 100 0.8499246 #> 2 2020-03-17 Tuesday 100 -0.2283881 #> 3 2020-03-18 Wednesday 100 0.9865178 #> 4 2020-03-19 Thursday 100 2.1665371 ** #> 5 2020-03-20 Friday 100 2.9786668 ***