He estado jugando con la prueba GRS (véase mi script R más abajo) en relación con ¿Por qué no utilizar una regresión de series temporales cuando el factor no es un rendimiento? . I $630\times 26$ matriz de rendimientos de 25 "carteras" y la cartera de mercado según el CAPM. He utilizado la función GRS.test::GRS.test
en R para probar el CAPM, y no pude rechazar el $H_0$ . Luego añadí la idiosincrasia $\alpha$ s a cada "cartera", volví a probar el CAPM y ahora podía rechazar fácilmente la $H_0$ . Hasta aquí todo bien.
A continuación, volví a generar datos según el CAPM y realicé la prueba GRS con el exceso de rentabilidad del mercado sustituido por una variable aleatoria no relacionada (un factor aleatorio). Para mi sorpresa, la prueba no pudo rechazar la $H_0$ ¡! He probado algunas variables aleatorias diferentes en lugar del exceso de rentabilidad del mercado, y aunque el $p$ -valores variaban de un caso a otro, obtuve el mismo no rechazo para varios más de ellos.
En aras de la exhaustividad, he añadido la idiosincrasia $\alpha$ s a cada "cartera" y volví a probar el CAPM con el factor aleatorio. Como en el caso del factor real, pude rechazar fácilmente la hipótesis $H_0$ .
Pregunta: ¿Qué ocurre? ¿No debería la prueba GRS rechazar un modelo con un factor aleatorio no relacionado en lugar del exceso de rentabilidad del mercado?
(Puede ejecutar el script en línea y compruebe usted mismo los resultados en https://rdrr.io/snippets/ . Simplemente pegue el script allí, borre/comente las líneas irrelevantes siguientes !!!
y haga clic en "Ejecutar").
library(MASS)
library(GRS.test)
data("data") # Fama-French data: market's excess return and 25 portfolios (5x5, sorted on SMB and HML)
data=data/100 # because original data was in percent
N=25
T=nrow(data) # 630
Sigma=cov(data[,c(8:32,2)]) # empirical covariance matrix; the last column is the market, the other 25 columns are the portfolios
# !!! Choose one of the two following lines for H0 vs. H1:
alpha =rep(0,N+1) # Jensen's alpha, in this case zero for all assets
set.seed(-1); alpha=runif(n=N+1,min=-0.01,max=0.01) # Jensen's alpha, in this case nonzero for all assets
beta_m=rep(NA,N+1); for(i in 1:(N+1)) beta_m[i]=Sigma[i,N+1]/Sigma[N+1,N+1] # actual betas from Fama-French data
mu_mte=rep(mean(data[,2]),T) # expected value of market excess return, in this case time-constant and in line with Fama-French data
# Generate a matrix of returns according to the CAPM (normality is mainly for convenience):
set.seed(1); r_matrix=mvrnorm(n=T, mu=alpha+beta_m*mean(mu_mte), Sigma=Sigma)
# !!! Factor return matrix for the function GRS.test():
# choose one of the two following lines for the true underlying factor vs. a random, unrelated factor:
f_matrix=cbind(r_matrix[,N+1]) # true underlying factor returns
set.seed(999); f_matrix=cbind(rnorm(T,mean=5)) # random, unrelated factor returns
# GRS test
result=GRS.test(r_matrix[,1:N],f_matrix); print(round(c(result$GRS.stat,result$GRS.pval),3))
# Individual t-tests and individual estimates of alphas and betas
# (full dots ~ true, hollow circles ~ estimated):
par(mfrow=c(5,5),mar=c(2,2,0.5,0.5))
for(i in 1:N){
m1=lm(r_matrix[,i]~f_matrix); print(summary(m1))
true=c(alpha[i],beta_m[i]); estimated=as.numeric(m1$coef); ylim1=c(-0.05,2)
plot(estimated,ylim=ylim1,xlab="",ylab=""); points(true,pch=19)
}; par(mfrow=c(1,1),mar=c(5.1,4.1,4.1,2.1))
P.D. Una pregunta relacionada es "La prueba GRS no rechaza un múltiplo escalar del factor de mercado" . Aumentar el tamaño de la muestra, que fue útil en este caso, no parece solucionar ese problema.