# Reporting statistics after sorting into groups based on regression betas

I am currently reading a paper, where I stumbled upon the following table. The statistics in which I am interested are in the red rectangles:

To explain what is happening here: They are doing many multiple regressions, where the dependent variable is a stock return and the independent variables are three Factors. They are doing this for n different stocks, so they carry out the regression n times:

$$R_k = a_0 + \beta_1 Factor1 + \beta_2 Factor2+ \beta_3 Factor3 + \epsilon_i$$

As a next step, they sort these stocks into 5 groups based on $$beta_3$$ and look at the mean return of each group (red rectangle). They also create a "5-1" group, where they subtract groups 5 and 1 from each other.

Now to my question: As you can see in the two red rectancles, both 5-1 groups have a p-value. This really confused me, because I do not know how it is possible to report a p-value on something that is not the outcome of a regression, but rather a subtraction of two outcomes of a regression. Am I aloud to subtract p-values from each other? Because this seems somehow wrong, considering that in this case p-values could even become negative?

Does anyone know how to get p-values in this context or what they could mean in this particular example?

Any help would be highly appreciated, thanks in advance

Paper: Does Volatility of Volatility Risk forecast future stock returns? R.Bu, X.Fu & F.Jawadi, 2018

• The approach used in this paper seems pretty ridiculous. Using beta coefficients, which are emphatically NOT scale invariant, will sort the stocks by the magnitude of the mean and std dev. A better approach would be to use standardized metrics such as the CV, GMD, F-values or t-values. – Mike Hunter Jul 17 at 14:15

I did not read the paper. But one way to get something like this with R is using regression. Suppose you have 3 portfolios and need to test P3 - P1

# portfolios
w1=c(A=.4,B=.5,C=.1)
w2=c(D=.3,D=.1, E=.4, F=.2)
w3=c(G=.3,H=.5,P=.2)

#some returns
library(mvtnorm)
NS=500
set.seed(123)
ret = rmvnorm(n = NS,mean=runif(10,min = 0.02,max = 0.025),sigma=diag(runif(10,min = 0.02,max = 0.025)))
colnames(ret)=names(c(w1,w2,w3))
summary(ret)

PortRet = function(ws,rets)sum(ws*rets)

#B&H
rP1 =apply(ret[,names(w1)],1,PortRet,ws=w1)
rP2 =apply(ret[,names(w2)],1,PortRet,ws=w2)
rP3 =apply(ret[,names(w3)],1,PortRet,ws=w3)

retPort =cbind(P1=rP1,P2=rP2,P3=rP3)
summary(retPort)
#mean p-value
apply(retPort,2,function(ri)summary(lm(ri~1))$coeff[1,4]) #How to get p-value for P3-P1 # 1) Add P3-P1 column retPort =cbind(P1=rP1,P2=rP2,P3=rP3,P3_P1=rP3-rP1) apply(retPort,2,function(ri)summary(lm(ri~1))$coeff[1,4])

# 2) Compute re return por portfólio that Sells P1 and Buys P3
w3_1=c(w3,-w1) #
rP3_1v2 =apply(ret[,names(w3_1)],1,PortRet,ws=w3_1)

retPort =cbind(P1=rP1,P2=rP2,P3=rP3,P3_P1v1=rP3-rP1,P3_P1v2=rP3_1v2)
summary(retPort)
apply(retPort,2,function(ri)summary(lm(ri~1))$coeff[1,4]) #> apply(retPort,2,function(ri)summary(lm(ri~1))$coeff[1,4])
#          P1           P2           P3      P3_P1v1      P3_P1v2
#2.675292e-05 6.213187e-12 6.172892e-09 3.612543e-01 3.612543e-01