christophergandrud / imfr

R package for interacting with the IMF RESTful JSON API
47 stars 5 forks source link

imf_data doesn't return commodity data #34

Open alexcaldarone opened 3 years ago

alexcaldarone commented 3 years ago

When I try to retrieve commodity prices with the imf_data function it returns an error saying that the data was not found, even though I specify all the arguments the function requires and the indicator exists in the IMF data portal. How can I solve this issue?

copper <- imf_data( database_id = 'PCPS', indicator = 'PCOPP', freq = 'M', return_raw = FALSE ) Error: No data found.

I have also tried changing the frequency values but i still get the same error. Thank you.

GuilhermeStipp commented 2 years ago

I have the same problem. I saw that this question has been open for months and no one has responded. Did you manage to find the solution elsewhere @alexcaldarone?

cjyetman commented 2 years ago

I think this is probably a problem with IMF. Even if you download the full PCPS dataset it does not include data for the indicator "PCOPP"...

library(httr)
library(jsonlite)

url <- "http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/PCPS/"
raw_data <-
  httr::RETRY("GET", url, user_agent(""), progress(), times = 3) %>% 
  httr::content(type = "text", encoding = "UTF-8") %>% 
  jsonlite::fromJSON()

data <- 
  raw_data$CompactData$DataSet$Series %>% 
  unnest(Obs)

sort(unique(data$`@COMMODITY`))
#>  [1] "PAGRI"    "PALLFNF"  "PALLMETA" "PBEVE"    "PCOAL"    "PEXGALL" 
#>  [7] "PEXGMETA" "PFANDB"   "PFERT"    "PFOOD"    "PINDU"    "PMETA"   
#> [13] "PNFUEL"   "PNGAS"    "PNRG"     "POILAPSP" "PPMETA"   "PRAWM"

even though the metadata says that "PCOPP" is a valid indicator name (which it may be, even if there is currently no data for it)...

library(tidyverse)
library(imfr)

imf_codes(codelist = "CL_INDICATOR_PCPS") %>% 
  filter(grepl("copper", description, ignore.case = TRUE))
#>     codes                       description
#>  1 PCOPP Primary Commodity Prices, Copper 
cjyetman commented 2 years ago

An additional relevant note, though this does not solve the problem that the IMF API does not have/return any data for the indicator PCOPP in the database_id PCPS...

Since the PCPS data only appears to contain data points tagged with the regional code W00, it is necessary to specify that in the country parameter of imf_data()...

library(imfr)

database_id <- "PCPS"

imf_codelist(database_id = database_id)
#>            codelist        description
#> 1      CL_UNIT_MULT              Scale
#> 2           CL_FREQ          Frequency
#> 3      CL_AREA_PCPS Geographical Areas
#> 4 CL_INDICATOR_PCPS          Indicator
#> 5      CL_UNIT_PCPS               Unit
#> 6    CL_TIME_FORMAT        Time format

imf_codes(codelist = "CL_AREA_PCPS")
#>   codes                     description
#> 1   W00 All Countries, excluding the IO

imf_data(database_id = "PCPS", indicator = "PRAWM")
#> Error: No data found.

imf_data(database_id = "PCPS", indicator = "PRAWM", country = "W00")
#>    iso2c year        PRAWM
#> 1    W00 2000  73.27785169
#> 2    W00 2001  65.91463699
#> 3    W00 2002  67.89649128
#> 4    W00 2003  78.21653651
#> 5    W00 2004  84.31019783
#> 6    W00 2005  86.86112189
#> 7    W00 2006  99.01736501
#> 8    W00 2007 104.20925058
#> 9    W00 2008 110.28165904
#> 10   W00 2009  96.09214895
#> 11   W00 2010 129.57285500
#> 12   W00 2011 161.03030418
#> 13   W00 2012 127.93862588
#> 14   W00 2013 122.26496101
#> 15   W00 2014 113.07284895
#> 16   W00 2015 100.01964075
#> 17   W00 2016 100.00000000
#> 18   W00 2017 105.24498006
#> 19   W00 2018 107.34384032
#> 20   W00 2019 101.52730642
#> 21   W00 2020  98.15826604
#> 22   W00 2021 113.67881613
#> 23   W00 2000   3.15886226
#> 24   W00 2001 -10.04834957
#> 25   W00 2002   3.00669833
#> 26   W00 2003  15.19967385
#> 27   W00 2004   7.79075831
#> 28   W00 2005   3.02564118
#> 29   W00 2006  13.99503351
#> 30   W00 2007   5.24340915
#> 31   W00 2008   5.82712996
#> 32   W00 2009 -12.86660920
#> 33   W00 2010  34.84229088
#> 34   W00 2011  24.27780817
#> 35   W00 2012 -20.54996944
#> 36   W00 2013  -4.43467704
#> 37   W00 2014  -7.51819000
#> 38   W00 2015 -11.54406944
#> 39   W00 2016  -0.01963689
#> 40   W00 2017   5.24498006
#> 41   W00 2018   1.99426164
#> 42   W00 2019  -5.41860053
#> 43   W00 2020  -3.31835887
#> 44   W00 2021  15.81176066
#> 45   W00 2000   3.15886226
#> 46   W00 2001 -10.04834957
#> 47   W00 2002   3.00669833
#> 48   W00 2003  15.19967385
#> 49   W00 2004   7.79075831
#> 50   W00 2005   3.02564118
#> 51   W00 2006  13.99503351
#> 52   W00 2007   5.24340915
#> 53   W00 2008   5.82712996
#> 54   W00 2009 -12.86660920
#> 55   W00 2010  34.84229088
#> 56   W00 2011  24.27780817
#> 57   W00 2012 -20.54996944
#> 58   W00 2013  -4.43467704
#> 59   W00 2014  -7.51819000
#> 60   W00 2015 -11.54406944
#> 61   W00 2016  -0.01963689
#> 62   W00 2017   5.24498006
#> 63   W00 2018   1.99426164
#> 64   W00 2019  -5.41860053
#> 65   W00 2020  -3.31835887
#> 66   W00 2021  15.81176066

Created on 2022-02-20 by the reprex package (v2.0.1)