Archive

Tag Archives: foreign exchange rate model

The Balassa-Samuelson effect describes the mechanism by which an appreciation of the real exchange rate occurs during the catch-up process given faster relative productivity gains in the tradable goods sector of the economy. During the developement process, productivity has a tendency to increase more rapidly in the tradable goods sector versus the services sector. Since the prices of tradable goods are set by international markets, an increase in productivity in this area of the economy leads to an increase in wages that is not detrimental to international competitiveness. Since this increase in wages is  not localised to the tradable goods sector , but spreads across the economy as a whole, there is a rise in the relative prices in the non-tradable goods sector despite lower productivity growth in this area of the economy. Given that the overall price index is an average of these two sectors, an increase in the prices of domestic goods relative to those from abroad should result in an appreciation of the real exchange rate.

A typical approach to assess the misalignment of currencies is to use a Purchasing Power Parity (PPP) model corrected by a Balassa effect. The PPP criterion itself is based on the law of one price, according to which the prices of comparable goods should be equivalent across different countries once expressed in a common currency. If the dollar cost of a bottle of coke is cheaper in Japan than it is in the United States, arbitrage forces would force capital to flow from the Unites States to Japan until price levels are equalised via higher demand pressure in the latter economy. By itself, the PPP model does not account for the Balassa Samuelson effect, the notion that the real exchange rate of an emerging country should appreciate given superior productivity gains in the tradable goods sector versus advanced reference economies.

:: Click here for more information

To summarise :

  1. The overall price level of an economy is a weighted average of the price levels of said country’s tradable-goods-sector and non-tradable-goods-sector.
  2. Productivitiy gains in the tradable sector are typically superior to those of the services sector,pushing wages up in BOTH the tradable and non-tradable sectors of the economy.
  3. Countries with rapidly expanding economies should have more rapidly appreciating exchange rates.

:: Click here for  the source of  the diagram

 

In order to test this effect, relative price levels of a group of countries is regressed on PPP GDP per capita. Price and GDP data can be downloaded from the ICP (International Comparison Programme)After downloading and formatting the data for 189 countries across 16 years (1995-2010) in Excel, I imported the data into R, regressed relative price levels against relative PPP GDP per capita (in log form) using the United States as a reference economy (automatically accounted for in the downloaded dataset) and summarised the findings. The slider function is used to change the year and country of interest. 

d

setwd("C:/University of Warwick/R experiments/Fx")

library(quantmod)
library(timeSeries)
library(RColorBrewer)
library(plotrix)
library(rpanel)
library(symbols)

#Download and set up data####################################################
plevels.orig<-as.matrix(read.table('prices.csv',header=T,sep=',',row.names=1))
eff.orig<-as.matrix(read.table('percapitagdp.csv',header=T,sep=',',row.names=1))

colnames(plevels.orig)<-1995:2010
colnames(eff.orig)<-1995:2010
#############################################################################

#Balassa-Samuelson-Regression################################################
est<-list()
sorted.y<-NULL

for(i in 1:ncol(eff.orig)){
    est$pred[[i]]<-lm(log(plevels.orig[,i])~log(eff.orig[,i]))
    est$alphas[[i]]<-as.matrix(coef(est$pred[[i]])[1])
    est$betas[[i]]<-as.matrix(coef(est$pred[[i]])[2])
    est$resid[[i]]<-resid(est$pred[[i]])
    sorted.y<-cbind(sorted.y,as.matrix(est$resid[[i]]))
}

windows(width=14,height=12)
layout(matrix(c(1,1,1,2,1,1,1,2,3,4,5,6),nrow=4,ncol=3,byrow=F))
colcodes<-rainbow(nrow(eff.orig),alpha=0.6)

if (interactive()) {
  draw <- function(panel) {
    par(mai=c(0,0,0.2,0))

    xcoord<-est$pred[[panel$year]]$model[,2]
    ycoord<-est$pred[[panel$year]]$model[,1]
    plot(main=paste('| Balassa-Samuelson | ',' :: log (relative price levels)=',round(est$alpha[[panel$year]],2),'+',round(est$betas[[panel$year]],2),'*log (relative PPP GDP per capita) ::'),cex.main=0.85,bty='o',xlab='',ylim=c(min(ycoord),max(ycoord)+0.5),xaxt='n',x=xcoord,y=ycoord,pch=21,col=ifelse(rownames(eff.orig)==rownames(eff.orig)[panel$country],'red','black'),cex=0.75)

    text(x=xcoord,y=ycoord-0.06,rownames(eff.orig),cex=0.75,col=ifelse(rownames(eff.orig)==rownames(eff.orig)[panel$country],'darkred','black'))
    abline(est$pred[[panel$year]],lwd=1.5,col='darkblue')
    draw.circle(x=xcoord[panel$country],y=ycoord[panel$country],c(0.11,0.10,0.1),border=NA,col=heat.colors(40,alpha=0.2),lty=1,lwd=1)
    abline(v=xcoord[panel$country],h=ycoord[panel$country],col='red',lwd=1,lty='dashed')
    text(adj=0,min(xcoord)-0.05,max(ycoord)+0.55,paste(colnames(eff.orig)[panel$year],'::',rownames(eff.orig)[panel$country]),cex=0.85,col="black",font=2)

    par(mai=c(0.5,0,0.2,0))
    barplot(main=paste('Misalignments for ', rownames(eff.orig)[panel$country]),cex.main=0.85,bty='o',horiz=F,border='black',sorted.y[panel$country,],col=ifelse(sorted.y[panel$country,]<=0,"blue","cyan"),names.arg=1995:2010,las=2)

    par(mai=c(0,0,0.2,0))
    plot(xlab='',yaxt='n',xaxt='n',plevels.orig[panel$country,],type='l',col='blue',lwd=2,main='Relative Price Levels',cex.main=0.85)
    barplot(space=0,beside=TRUE,xlab='',ylim=c(min(plevels.orig[panel$country,])-3,max(plevels.orig[panel$country,])+10),yaxt='n',xaxt='n',plevels.orig[panel$country,],col='darkblue',add=TRUE,density=50,angle=45)
    grid(lty=1,col="darkgray")

    par(mai=c(0,0,0.2,0))
    plot(xlab='',yaxt='n',xaxt='n',eff.orig[panel$country,],type='l',col='orange',lwd=2,main='Relative GDP per capita in PPP',cex.main=0.85)
    barplot(space=0,xlab='',ylim=c(min(eff.orig[panel$country,])-3,max(eff.orig[panel$country,])+10),yaxt='n',xaxt='n',eff.orig[panel$country,],col='darkorange',add=TRUE,density=50,angle=45)
    grid(lty=1,col="darkgray")

    par(mai=c(0,0,0,0))
    under<-as.matrix(subset(sorted.y,sorted.y[,panel$year]<0)[,panel$year])
    over<-as.matrix(subset(sorted.y,sorted.y[,panel$year]>0)[,panel$year])

    pie3D(font=2,cex.main=0.85,main=paste('Proportion of misalignments for',colnames(as.matrix(eff.orig))[panel$year]),col=c('red','green'),mar=c(1,1,2,1),theta=1,radius=1,labelcex=0.70,shade=0.6,c(nrow(under),nrow(over)),labels=c(paste('Undervalued ',round(nrow(under)/189*100,0),'%'),paste('Overvalued ',round(nrow(over)/189*100,0),'%')))

    par(mai=c(0,0,0,0))
    temp1<-as.matrix(under)
    temp2<-as.matrix(over)
    plot(1:100, type="n", axes=T, xlab="", ylab="",bty='o',xaxt='n',yaxt='n')
    rect(-10,-5,105,105,density=NA,col='darkblue',lty=1,border='black')
    abline(h=80,col='white',lwd=1.5)
    text(50,90,'Summary',cex=1,col="white",font=2)
    text(adj=0,col="white",2,70,paste('Year : ',colnames(as.matrix(eff.orig))[panel$year]),font=2,cex=1)
    text(adj=0,col="white",2,60,paste('Country : ',rownames(as.matrix(eff.orig))[panel$country]),font=2,cex=1)
    text(adj=0,col="white",2,50,paste('Misalignment : ',ifelse(sorted.y[panel$country,panel$year]<0,'Undervalued','Overvalued')),font=2,cex=1)
    text(adj=0,col="white",2,40,paste('Amount : ',round(sorted.y[panel$country,panel$year]*100,2),'%'),font=2,cex=1)
    text(adj=0,col="white",2,30,paste('Largest Overvaluation : ',rownames(temp2)[index(temp2)[temp2==max(temp2)]]),font=2,cex=1)
    text(adj=0,col="white",2,20,paste('Largest Undervaluation : ',rownames(temp1)[index(temp1)[temp1==min(temp1)]]),font=2,cex=1)

    panel
  }
  panel<- rp.control(year = 1)
  rp.slider(panel,year,1,16, action=draw,resolution=1,showvalue=TRUE)
  rp.slider(panel,country,1,189,action=draw,resolution=1,showvalue=TRUE)

}

s

Click here for the high quality image

Suppose we were interested in the currency misalignment of the Chinese Renminbi in 2003. We would push the year slider to 9 and the country slider to 37.  

[1] The first plot charts the relative price levels of each country in the dataset against the corresponding relative GDP per capita for the chosen year (2003 in this case). The red dashed vertical and horizontal lines meet in a circle to locate the selected country (China in this case). The blue positively sloped line is the fitted Balassa-Samuelson regression. Points on this fitted regression line tells us the relative price level we would expect from a country with a given relative GDP per capita. The finding confirms the intuition that the larger the relative GDP per capita, the larger the relative price levels. This is evidenced from the positive slope of the regression line across  189 countries in the chosen year. We can clearly see that China’s price level plots below the level that we would expect given its PPP GDP per capita. Since relative price levels can be interpreted as a reference real exchange rate, the Chinese currency is undervalued even after accounting for the Balassa-Samuelson effect.

[2] The barplot below charts the magnitude of misalignments for the chosen country across all 16 years. We can see that for the Chinese currency, undervaluation abounds for all the 16 years with signs of small corrections in 2001 and 2009/2010.

[3]  The first 2 shaded barplots in the second column are simply time series plots of the data itself. We can see that for China, both price levels and GDP per capita have been rising dramatically over the 16 years.

[4] The pie chart tells us the proportion of under/over valued currencies for the selected year across 189 countries. In 2003, 50% of all currencies were undervalued/overvalued.

[5] The final image in the plot is just a summary, telling us the selected year/country, the direction of misalignment,the amount of under/over valuation,the largest over/undervaluation across 189 countries in the chosen year. 

To get an idea of how China behaved across time, the following animated gif plots the requisite information across time (1995-2010) for China.

To get an idea of how other countries are doing in 2003, the following gif file shows the requisite information for the other 188 countries in the same year.