1 Basic Usage

data("countryGDP")
countryGDP
# Cluster Countries using GDP from year 2000 to year 2014, with 2014 as reference year
clubs <- findClubs(countryGDP, 
                   dataCol = 2:35, 
                   regions = 1, 
                   refCol = 35, 
                   time_trim = 1/3, 
                   cstar = 0, 
                   HACmethod = "AQSB")
summary(clubs)
Number of convergence clubs: 5
Number of divergent units: 3

             # of regions 
----------- ---------------
club1      | 84           
club2      | 18           
club3      | 26           
club4      | 14           
club5      | 7            
divergent  | 3            
# Merge clusters using Phillips and Sul (2009) method
mclubs <- mergeClubs(clubs, 
                     mergeMethod ='PS', 
                     mergeDivergent = FALSE)
summary(mclubs)
Number of convergence clubs: 4
Number of divergent units: 3

             # of regions  | merged clubs 
----------- --------------- --------------
club1      | 84            | clubs: 1     
club2      | 18            | clubs: 2     
club3      | 40            | clubs: 3, 4  
club4      | 7             | clubs: 5     
divergent  | 3             | clubs:       
# Merge clusters using von Lyncker and Thoennessen (2016) method
mclubs <- mergeClubs(clubs, 
                     mergeMethod = 'vLT', 
                     mergeDivergent = FALSE)
summary(mclubs)
Number of convergence clubs: 4
Number of divergent units: 3

             # of regions  | merged clubs 
----------- --------------- --------------
club1      | 84            | clubs: 1     
club2      | 18            | clubs: 2     
club3      | 26            | clubs: 3     
club4      | 21            | clubs: 4, 5  
divergent  | 3             | clubs:       
# Plot Transition Paths for all regions in each club and average Transition Path
# for all clubs
plot(mclubs)

# Plot Only average Transition Paths
plot(mclubs, clubs=NULL, legend=TRUE)

2 Using the World Income Database: ps2009.csv

ps2009 <- read_csv("https://raw.githubusercontent.com/ds777/sample-datasets/master/ps2009.csv")
Parsed with column specification:
cols(
  country = col_character(),
  year = col_integer(),
  pgdp = col_double()
)
ps2009

2.1 Reshaping from long to wide (controling names)

Useful reference for How to control new variables’ names after tidyr’s spread

ps2009 <- ps2009 %>% 
  mutate(year = paste('y', year, sep="")) %>% 
  spread(year, pgdp)
ps2009

2.2 Express variables in log terms

ps2009_log <- ps2009 %>% 
  mutate_if(is.numeric, funs("log" = log(.))) %>% 
  select(country, y1970_log:y2003_log)
ps2009_log

It would be ideal to have long-run trend of these variables, but for the moment, let us use them as they are.

2.3 Finding convergence clubs

Very important for the code to work: the data should be of type data.frame and not tbl_df

ps2009_log <- as.data.frame(ps2009_log)
clubs <- findClubs(ps2009_log,      # dataframe containing data 
                   dataCol = 2:35,  # integer vector with the column indices of the data
                   regions = 1,     # integer scalar indicating the column with codes of the regions
                   refCol = 35,     # integer scalar indicating the column to use for ordering data
                   time_trim = 1/3, # PS suggest to discard the first third of the period.
                   cstar = 0,       # the threshold value of the sieve criterion
                   HACmethod = "AQSB") # for the truncation of the Quadratic Spectral kernel
summary(clubs)
Number of convergence clubs: 5
Number of divergent units: 1

             # of regions 
----------- ---------------
club1      | 85           
club2      | 27           
club3      | 20           
club4      | 9            
club5      | 10           
divergent  | 1            

2.4 Merging clusters using Phillips and Sul (2009) method

mclubs_ps <- mergeClubs(clubs, 
                        mergeMethod ='PS', 
                        mergeDivergent = FALSE,
                        threshold = -1.65)
summary(mclubs_ps)
Number of convergence clubs: 4
Number of divergent units: 1

             # of regions  | merged clubs 
----------- --------------- --------------
club1      | 85            | clubs: 1     
club2      | 27            | clubs: 2     
club3      | 29            | clubs: 3, 4  
club4      | 10            | clubs: 5     
divergent  | 1             | clubs:       

2.5 Merging clusters using von Lyncker and Thoennessen (2016).

mclubs_vlt <- mergeClubs(clubs, 
                        mergeMethod ='vLT', 
                        mergeDivergent = FALSE,
                        threshold = -1.65)
summary(mclubs_vlt)
Number of convergence clubs: 4
Number of divergent units: 1

             # of regions  | merged clubs 
----------- --------------- --------------
club1      | 85            | clubs: 1     
club2      | 27            | clubs: 2     
club3      | 29            | clubs: 3, 4  
club4      | 10            | clubs: 5     
divergent  | 1             | clubs:       

2.6 Plot Transition Paths for all regions in each club and the average transition path for each club

For Phillips and Sul (2009)

plot(mclubs_ps)

For von Lyncker and Thoennessen (2016)

plot(mclubs_vlt)

2.7 Plot Only average Transition Paths

plot(mclubs_ps, clubs=NULL, legend=TRUE)

plot(mclubs_vlt, clubs=NULL, legend=TRUE)

LS0tCnRpdGxlOiAiQ29udmVyZ2VuY2VDbHViIHBhY2thZ2UiCnN1YnRpdGxlOiAiU3VidGl0bGUiCmF1dGhvcjogIkF1dGhvciIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKICAgIHRvY19kZXB0aDogNAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IgogICAgdGhlbWU6ICJjb3NtbyIKICAgIGhpZ2hsaWdodDogIm1vbm9jaHJvbWUiCiAgICBkZl9wcmludDogImthYmxlIgogIGdpdGh1Yl9kb2N1bWVudDogZGVmYXVsdAotLS0KCjxzdHlsZT4KCmgxLnRpdGxlIHsgCiAgZm9udC1zaXplOiAxOHB0OyAKICBjb2xvcjogRGFya0JsdWU7IAp9IAoKYm9keSwgaDEsIGgyLCBoMywgaDQgewogICAgZm9udC1mYW1pbHk6ICJQYWxhdGlubyIsIHNlcmlmOwp9Cgpib2R5IHsKICAgIGZvbnQtc2l6ZTogMTJwdDsKfQoKLyogSGVhZGVycyAqLwpoMSxoMixoMyxoNCxoNSxoNnsKICBmb250LXNpemU6IDE0cHQ7CiAgY29sb3I6ICMwMDAwOEI7Cn0KCmJvZHkgewogICAgY29sb3I6ICMzMzMzMzM7Cn0KYSwgYTpob3ZlciB7CiAgICBjb2xvcjogIzhCM0E2MjsKfQpwcmUgewogICAgZm9udC1zaXplOiAxMnB4Owp9Cjwvc3R5bGU+CgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZnVuTW9kZWxpbmcpICAgIyBkZXNjcmlwdGl2ZSBzdGF0aXN0aWNzCmxpYnJhcnkocmV0aWN1bGF0ZSkgICAgIyB0aGUgcHl0aG9uIGVuZ2luZQpsaWJyYXJ5KGh0bWx3aWRnZXRzKSAgICMgaW50ZXJhY3RpdmUgZG9jdW1lbnRzCmxpYnJhcnkobGVhZmxldCkgICAgICAgIyBpbnRlcmFjdGl2ZSBtYXBzCmxpYnJhcnkoZHlncmFwaHMpICAgICAgIyBpbnRlcmFjdGl2ZSB0aW1lIHNlcmllcwpsaWJyYXJ5KHBsb3RseSkgICAgICAgICMgaW50ZXJhY3RpdmUgZmlndXJlcwpsaWJyYXJ5KFdWUGxvdHMpICAgICAgICMgQ29tbW9uIFBsb3RzIGZvciBBbmFseXNpcwpsaWJyYXJ5KERUKSAgICAgICAgICAgICMgaW50ZXJhdGl2ZSB0YWJsZXMKI2xpYnJhcnkoa2FibGVFeHRyYSkgICAjIGh0bWwgdGFibGVzIApsaWJyYXJ5KFJFQVQpICAgICAgICAgICMgcmVnaW9uYWwgYW5kIGVjb25vbWljIGFuYWx5c2lzIHRvb2xib3gKbGlicmFyeShwZGZDbHVzdGVyKSAgICAjIGRlbnNpdHkgYmFzZWQgY2x1c3RlcnMKbGlicmFyeShtYXJrb3ZjaGFpbikgICAjIGRpc2NyZXRlIHRpbWUgbWFya292IGNoYWlucwpsaWJyYXJ5KGRpYWdyYW0pICAgICAgICMgZHJhd2luZyBtYXJrb3YgY2hhaW5zCmxpYnJhcnkoQ29udmVyZ2VuY2VDbHVicykgIyBjb252ZXJnZW5jZSBjbHVicwpgYGAKCgojICBCYXNpYyBVc2FnZQoKYGBge3J9CmRhdGEoImNvdW50cnlHRFAiKQpjb3VudHJ5R0RQCmBgYAoKCmBgYHtyfQojIENsdXN0ZXIgQ291bnRyaWVzIHVzaW5nIEdEUCBmcm9tIHllYXIgMjAwMCB0byB5ZWFyIDIwMTQsIHdpdGggMjAxNCBhcyByZWZlcmVuY2UgeWVhcgpjbHVicyA8LSBmaW5kQ2x1YnMoY291bnRyeUdEUCwgCiAgICAgICAgICAgICAgICAgICBkYXRhQ29sID0gMjozNSwgCiAgICAgICAgICAgICAgICAgICByZWdpb25zID0gMSwgCiAgICAgICAgICAgICAgICAgICByZWZDb2wgPSAzNSwgCiAgICAgICAgICAgICAgICAgICB0aW1lX3RyaW0gPSAxLzMsIAogICAgICAgICAgICAgICAgICAgY3N0YXIgPSAwLCAKICAgICAgICAgICAgICAgICAgIEhBQ21ldGhvZCA9ICJBUVNCIikKc3VtbWFyeShjbHVicykKYGBgCgoKYGBge3J9CiMgTWVyZ2UgY2x1c3RlcnMgdXNpbmcgUGhpbGxpcHMgYW5kIFN1bCAoMjAwOSkgbWV0aG9kCm1jbHVicyA8LSBtZXJnZUNsdWJzKGNsdWJzLCAKICAgICAgICAgICAgICAgICAgICAgbWVyZ2VNZXRob2QgPSdQUycsIAogICAgICAgICAgICAgICAgICAgICBtZXJnZURpdmVyZ2VudCA9IEZBTFNFKQpzdW1tYXJ5KG1jbHVicykKYGBgCgoKYGBge3J9CiMgTWVyZ2UgY2x1c3RlcnMgdXNpbmcgdm9uIEx5bmNrZXIgYW5kIFRob2VubmVzc2VuICgyMDE2KSBtZXRob2QKbWNsdWJzIDwtIG1lcmdlQ2x1YnMoY2x1YnMsIAogICAgICAgICAgICAgICAgICAgICBtZXJnZU1ldGhvZCA9ICd2TFQnLCAKICAgICAgICAgICAgICAgICAgICAgbWVyZ2VEaXZlcmdlbnQgPSBGQUxTRSkKc3VtbWFyeShtY2x1YnMpCmBgYAoKYGBge3J9CiMgUGxvdCBUcmFuc2l0aW9uIFBhdGhzIGZvciBhbGwgcmVnaW9ucyBpbiBlYWNoIGNsdWIgYW5kIGF2ZXJhZ2UgVHJhbnNpdGlvbiBQYXRoCiMgZm9yIGFsbCBjbHVicwpwbG90KG1jbHVicykKYGBgCgoKYGBge3J9CiMgUGxvdCBPbmx5IGF2ZXJhZ2UgVHJhbnNpdGlvbiBQYXRocwpwbG90KG1jbHVicywgY2x1YnM9TlVMTCwgbGVnZW5kPVRSVUUpCmBgYAoKCiMgVXNpbmcgdGhlIFdvcmxkIEluY29tZSBEYXRhYmFzZTogcHMyMDA5LmNzdgoKYGBge3J9CnBzMjAwOSA8LSByZWFkX2NzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RzNzc3L3NhbXBsZS1kYXRhc2V0cy9tYXN0ZXIvcHMyMDA5LmNzdiIpCnBzMjAwOQpgYGAKCiMjIFJlc2hhcGluZyBmcm9tIGxvbmcgdG8gd2lkZSAoY29udHJvbGluZyBuYW1lcykKVXNlZnVsIHJlZmVyZW5jZSBmb3IgW0hvdyB0byBjb250cm9sIG5ldyB2YXJpYWJsZXMnIG5hbWVzIGFmdGVyIHRpZHlyJ3Mgc3ByZWFkXShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMTc4ODE5NS9ob3ctdG8tY29udHJvbC1uZXctdmFyaWFibGVzLW5hbWVzLWFmdGVyLXRpZHlycy1zcHJlYWQpCgpgYGB7cn0KcHMyMDA5IDwtIHBzMjAwOSAlPiUgCiAgbXV0YXRlKHllYXIgPSBwYXN0ZSgneScsIHllYXIsIHNlcD0iIikpICU+JSAKICBzcHJlYWQoeWVhciwgcGdkcCkKcHMyMDA5CmBgYAoKCiMjIEV4cHJlc3MgdmFyaWFibGVzIGluIGxvZyB0ZXJtcwoKYGBge3J9CnBzMjAwOV9sb2cgPC0gcHMyMDA5ICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgZnVucygibG9nIiA9IGxvZyguKSkpICU+JSAKICBzZWxlY3QoY291bnRyeSwgeTE5NzBfbG9nOnkyMDAzX2xvZykKcHMyMDA5X2xvZwpgYGAKCgpJdCB3b3VsZCBiZSBpZGVhbCB0byBoYXZlIGxvbmctcnVuIHRyZW5kIG9mIHRoZXNlIHZhcmlhYmxlcywgYnV0IGZvciB0aGUgbW9tZW50LCBsZXQgdXMgdXNlIHRoZW0gYXMgdGhleSBhcmUuCgoKIyMgRmluZGluZyBjb252ZXJnZW5jZSBjbHVicwoKVmVyeSBpbXBvcnRhbnQgZm9yIHRoZSBjb2RlIHRvIHdvcms6IHRoZSBkYXRhIHNob3VsZCBiZSBvZiB0eXBlIGBkYXRhLmZyYW1lYCBhbmQgbm90IGB0YmxfZGZgCgpgYGB7cn0KcHMyMDA5X2xvZyA8LSBhcy5kYXRhLmZyYW1lKHBzMjAwOV9sb2cpCmBgYAoKCmBgYHtyfQpjbHVicyA8LSBmaW5kQ2x1YnMocHMyMDA5X2xvZywgICAgICAjIGRhdGFmcmFtZSBjb250YWluaW5nIGRhdGEgCiAgICAgICAgICAgICAgICAgICBkYXRhQ29sID0gMjozNSwgICMgaW50ZWdlciB2ZWN0b3Igd2l0aCB0aGUgY29sdW1uIGluZGljZXMgb2YgdGhlIGRhdGEKICAgICAgICAgICAgICAgICAgIHJlZ2lvbnMgPSAxLCAgICAgIyBpbnRlZ2VyIHNjYWxhciBpbmRpY2F0aW5nIHRoZSBjb2x1bW4gd2l0aCBjb2RlcyBvZiB0aGUgcmVnaW9ucwogICAgICAgICAgICAgICAgICAgcmVmQ29sID0gMzUsICAgICAjIGludGVnZXIgc2NhbGFyIGluZGljYXRpbmcgdGhlIGNvbHVtbiB0byB1c2UgZm9yIG9yZGVyaW5nIGRhdGEKICAgICAgICAgICAgICAgICAgIHRpbWVfdHJpbSA9IDEvMywgIyBQUyBzdWdnZXN0IHRvIGRpc2NhcmQgdGhlIGZpcnN0IHRoaXJkIG9mIHRoZSBwZXJpb2QuCiAgICAgICAgICAgICAgICAgICBjc3RhciA9IDAsICAgICAgICMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiB0aGUgc2lldmUgY3JpdGVyaW9uCiAgICAgICAgICAgICAgICAgICBIQUNtZXRob2QgPSAiQVFTQiIpICMgZm9yIHRoZSB0cnVuY2F0aW9uIG9mIHRoZSBRdWFkcmF0aWMgU3BlY3RyYWwga2VybmVsCnN1bW1hcnkoY2x1YnMpCmBgYAoKIyMgTWVyZ2luZyBjbHVzdGVycyB1c2luZyBQaGlsbGlwcyBhbmQgU3VsICgyMDA5KSBtZXRob2QgCgpgYGB7cn0KbWNsdWJzX3BzIDwtIG1lcmdlQ2x1YnMoY2x1YnMsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXJnZU1ldGhvZCA9J1BTJywgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlRGl2ZXJnZW50ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IC0xLjY1KQpzdW1tYXJ5KG1jbHVic19wcykKYGBgCgoKIyMgTWVyZ2luZyBjbHVzdGVycyB1c2luZyB2b24gTHluY2tlciBhbmQgVGhvZW5uZXNzZW4gKDIwMTYpLgoKYGBge3J9Cm1jbHVic192bHQgPC0gbWVyZ2VDbHVicyhjbHVicywgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlTWV0aG9kID0ndkxUJywgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlRGl2ZXJnZW50ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IC0xLjY1KQpzdW1tYXJ5KG1jbHVic192bHQpCmBgYAoKIyMgUGxvdCBUcmFuc2l0aW9uIFBhdGhzIGZvciBhbGwgcmVnaW9ucyBpbiBlYWNoIGNsdWIgYW5kIHRoZSBhdmVyYWdlIHRyYW5zaXRpb24gcGF0aCBmb3IgZWFjaCBjbHViCgpGb3IgUGhpbGxpcHMgYW5kIFN1bCAoMjAwOSkKCmBgYHtyfQpwbG90KG1jbHVic19wcykKYGBgCgoKRm9yIHZvbiBMeW5ja2VyIGFuZCBUaG9lbm5lc3NlbiAoMjAxNikKCmBgYHtyfQpwbG90KG1jbHVic192bHQpCmBgYAoKCiMjIFBsb3QgT25seSBhdmVyYWdlIFRyYW5zaXRpb24gUGF0aHMKCmBgYHtyfQpwbG90KG1jbHVic19wcywgY2x1YnM9TlVMTCwgbGVnZW5kPVRSVUUpCmBgYAoKCgpgYGB7cn0KcGxvdChtY2x1YnNfdmx0LCBjbHVicz1OVUxMLCBsZWdlbmQ9VFJVRSkKYGBgCgoKCiMgUmVmZXJlbmNlcwoKLSA8aHR0cHM6Ly9naXRodWIuY29tL3Job2Jpcy9Db252ZXJnZW5jZUNsdWJzPg==