For my project, I need to assess if a certain factor X leads to a CAPM-Anomaly. First, I sorted the monthly stock return (sample size: 500+ observations) according to the X factor in 10 decile portfolios ("DP"). Afterwards, I performed for each decile portfolio a linear regression to evaluate if each alpha is significantly different from zero. The linear Regression for the i-th decile portfolio is: $$R_{i,t}-R^f_t = \alpha_i + \beta_i(R^m_t-R^f_t)+ \epsilon_{i,t}$$
Since I'm dealing with a time serie, I will adjust for heteroskedasticity and autocorrelation with the Newey-West (1987) correlation corrector with 6 lags.
Results: The decile portfolios DP1, DP2 have significant negative alphas and DP8, DP9, DP10 a significant positive alpha. However, I would primarily be interested if/not all alphas are jointly equal to zero. I already saw posts that discussed the GRS-Test proposed by Gibbons, Ross, and Shanken (1989) but this test has the major drawback that it assumes normally distributed uncorrelated homoskedastic error terms. Somebody mentioned a test with the Chi-Squared-Distribution but didn't elaborate what the assumptions were let alone how to perform it in R.
I would be so grateful if somebody would know a less restrictive test for evaluating if all alphas are jointly equal to zero. Specifically, I would be interested in the underlying assumptions of the test (preferably with a source) as well as the concrete code in R (if it doesn't causes too much inconvenience) :D
Here is the code which I have so far (for the first decile portfolio DP1)
library(sandwich)
library(lmtest)
#Performing Linear Regression
L1 <- lm(DP1 ~ MktRf, data = DATA)
#Building NeweyWest Covariance Corrector
NW_VCOV_L1 <- NeweyWest(L1, lag = 6, prewhite = F, adjust = T)
#Performing Covariance Test
coeftest(L1, vcov = NW_VCOV_L1)
which yields following Output
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.00327902 0.00068035 -4.8196 1.799e-06 ***
MktRf 0.92165566 0.02334994 39.4714 < 2.2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1