# Tag Archives: predictability

According to classic market efficiency,stock prices (which are not predictable) follow a random walk and hence financial returns, which are basically percentage price changes, are similarly unpredictable. If this view of the world is true,then one would expect to see b=0 and R-squared=0 for any variable x(t) in the simple regression : R(t+1) = a+bx(t)+e(t+1). Intuitively,competition in stock markets should drive out any predictable movement in stock prices. If b were greater than 0, individual investors should buy when x(t) is high and sell when x(t) is low. However if every market participant adhered to this logic, prices would be driven up (down) on the basis of a high (low) x(t) until today’s price is the same as the price expected in the next period. The more competitive an asset market, the greater the degree of informational efficiency,the greater the speed at which pertinent material information is impounded in today’s stock price, the lower the likelihood of predicting stock price movements.

Implicit in these statements is a distinction between individual versus equilibrium perspectives. Assuming b>0, an individual would look towards a positive signal (x) as an indication to buy the stock and reap subsequent returns. If everybody followed this same logic, stock prices would be bid up until current and expected prices are equal and the incentive for further action eliminated. An asset for which b>0 cannot describe a market in equilibrium. It is tempting but erroneous to conclude that predictability implies inefficient markets. Nothing in the definition of market efficiency requires that expected returns remain constant over time.In fact, predictability is equivalent to variation in expected returns. Consider a regression model of excess stock returns on the Div/Price ratio over time : Taking expectations,this means that at time t, the expected returns is: This implies that expected returns vary over time and are not constant as long as returns are predictable (b not equal to 0). As far as I understand this, if the regression produces a zero slope coefficient, then expected returns would be reduced to a constant (a). Hence,as long as the estimated slope coefficient is non zero, one can link variation in expected returns to predictability of returns. As usual, all these posts may be riddled with mistakes and misunderstandings on my part;far better to look at the sources for yourself : Discount Rates,Chicago Lectures.

The first generation of tests suggest that basically nothing can forecast stock returns. The following section gives a sense of this from regressions of returns on lagged returns for : [a] CSRP stock data ; [b] T-bill rate ; [c] Excess returns. Observations are annual for the period from 1952 to 2008. Data sources come from the Chicago lecture problem sets linked to above. Additional variables such as the D/P,Div Growth and Cay are also imported for later use.

l

```#####################################################################################
#Data import & handling
#####################################################################################

#Import CSV file(s)
ret.ts <- ts(data=ret.csv,start=c(1926),end=c(2011),frequency=1)
cay.ts <- ts(data=cay.csv,start=c(1952,1),end=c(2009,1),frequency=4)

#Subset data
row.idx <- 1:nrow(cay.ts)
ret.sub <- window(ret.ts,start=c(1952),end=c(2008),frequency=1)
cay.sub <- ts(cay.ts[row.idx%%4==0,],start=c(1952),end=c(2008),frequency=1)

#Save individual series
idx.ret <- ret.sub[,1]
dp <- ret.sub[,2]
dg <- ret.sub[,3]
tbill <- ret.sub[,4]
cay <-cay.sub[,4]
exc <- idx.ret-tbill

#Save log series
log.ret <- log(1+idx.ret)
log.dp <- log(dp)
log.dg <- log(1+dg)
rho=0.96
###################################################################################
```

l

Running regressions of stock,tbill,excess returns on their one period lagged values :

```###################################################################################
# Initial Regression & Test
###################################################################################

#Initial regressions on lagged values
idx.temp <- cbind(idx.ret,lag(idx.ret,-1))
idx.reg<-lm(idx.temp[,1]~idx.temp[,2])

tbill.temp <- cbind(tbill,lag(tbill,-1))
tbill.reg<-lm(tbill.temp[,1]~tbill.temp[,2])

exc.temp <- cbind(exc,lag(exc,-1))
exc.reg<-lm(exc.temp[,1]~exc.temp[,2])

#Extract regression values
reg.list <- list(idx.reg,tbill.reg,exc.reg)
estim <-RegExtractor(reg.list,'est')
pvals <-matrix(RegExtractor(reg.list,'pval'),ncol=2)
tvals <-matrix(RegExtractor(reg.list,'tval'),ncol=2)
rsq <-matrix(RegExtractor(reg.list,'rsq'),ncol=1)

#Variation of expected returns with the level of expected returns
std.vals=sapply(reg.list,function(v) sd(fitted(v)))*100
mean.vals=sapply(reg.list,function(v) mean(fitted(v)))*100

#Plots&Table
asset.names<-c('Returns','Tbill','Excess')
col.names<-c('Intercept','Beta','t-stats','p-vals','R2','E(R)','Std(Fitted)')
reg.table=cbind(estim,(tvals[,2]),(pvals[,2]),rsq,mean.vals,std.vals)

windows()
layout(matrix(c(1,1,2),nrow=3))
plot(idx.ret,ylab='Returns',xlab='',cex.main=0.85,cex.lab=0.75,cex.axis=0.75,main='Timeseries plots',col='darkgreen',type='l',lwd=2)
lines(tbill,col='blue')
lines(exc,col='red')
legend(bty='n',y.intersp=1,'bottomleft',fill=c('darkgreen','blue','red'),legend=asset.names,ncol=1,bg='white',cex=0.75)

est.tab <- round(reg.table,5)
est.tab <- apply(est.tab, 2, rev)
est.tab <- cbind(rev(asset.names),est.tab)
par(mai=c(0.35,0.15,0.5,0.15)) 