GLOBIOM represents 18 crops globally and 27 crops for the
European Union. The more detailed crop distribution maps generated with
mapspamc
can be used to add an additional crop for a
specific country. Reasons for doing so may be that the crop is of large
importance for the country in terms of production, consumption or trade.
The first step is to ensure that the new crop is added to the updated
land cover and crop distribution files that are created with the
create_globiom_input()
function. This is done by updating
the table that maps the mapspamc
crops to the 18 GLOBIOM
crops, which is stored in crop2globiom
- a data file that
is part of the mapspam2globiom
package. In the next step
several adjustments need to be made in GLOBIOM.
In the example below, we will add coffee as a separate crop.
# Update crop2globiom.csv and map coff to coff (instead of the rest category) and overwrite
crop_map <- crop2globiom %>%
mutate(globiom_crop = ifelse(crop == "coff", "Coff", globiom_crop))
When create_globiom_input()
is run with the updated
mapping, coff will be includes as a separate crop in the gdx file.
In GLOBIOM, a crop can enter the model either as a crop that is only
produced in the country of interest and traded with the rest of the
world, or a crop that is produced and consumed in the whole world and
traded bilaterally. As the focus is here on country-level crop
distribution maps, we take the example of including a specific crop in
terms of area and production only for the country of interest, with
trade to and from the rest of the world. This example starts from the
point where the new crop distribution maps have been prepared and added
to the GLOBIOM database to replace the global data. As described in the
section on Post-processing, the new crop
also needs to be added to the crop2globiom.csv
file that
contains the mapping between the crop distribution maps generated with
mapspamc
and the GLOBIOM crops.
To add a new crop, we take the following steps:
In the remainder, we take the example of cocoa production in Indonesia. All our changes take place in the model folder
we have to add the new crop in the relevant sets where other crops are reported. This happens in the following places:
decl_Rsets.gms
- CROP(SPECIES)
- PRODUCT(ALLPRODUCT)
- PRIMARY(PRODUCT)
- FINALP(PRODUCT)
- CROPS(PRODUCT)
decl_sets.gms
- ALLITEM
- SPECIES(ALLITEM)
- ALLPRODUCT(ALLITEM)
- ALLCROPS(ALLPRODUCT)
- Cropprodmap(SPECIES,ALLPRODUCT)
Production and productivity of all crops, including the new crop, has been scaled to FAOstat data as described in the Post-processing. Furthermore, in the base year, the producer price for the modeled crops is calibrated on FAOSTAT data. Therefore, the crop of interest should be added in the supply data (in 1000 tons) and production data (tonnes).
Data_supply.gms
TABLE SData(ANYREGION,ALLPRODUCT,CURVE) Supply Data in 1000 units
Proddata_c.gms
PARAMETER
PRODATA_C(ANYREGION,ALLITEM,DataItems) Production data for crops (tonnes)
/
IndonesiaReg.Ccoa.YIELD 0.51
IndonesiaReg.Ccoa.PRODQ 568535.80
IndonesiaReg.Ccoa.AreaHarv 1138085.20
In addition to yield responses to prices, GLOBIOM has an assumption
on technological change that reflect the increase of yield over time
independently from market mechanisms, due to progress in e.g. breeding,
introduction of new varieties, and technology diffusion. This exogenous
yield change is stored in the parameter
YLD_SSP_STAT(*,ANYREGION,ALLPRODUCT,ALLYEAR)
and is
dependent on the socio-economic pathways. For the year 2000, the
exogenous yield change gets the value 1, after which it moves in a
cumulative fashion. For the producing region and the crop to be added,
the exogenous yield change needs to be added in the file
data_yld_SSPs.gms
, located in the finaldata folder.
TABLE YLD_SSP_STAT(*,ANYREGION,ALLPRODUCT,ALLYEAR) Crop yield shifter for SSPs - Static income groups (2000 = 1)
2010 2020 2030 2040 2050
"SSP2"."IndonesiaReg"."Ccoa" 1.000 1.000 1.000 1.000 1.000
Food demand is in GLOBIOM endogenous and depends on population, gross domestic product (GDP) and own product price. Population and GDP are exogenous variables while prices are endogenous. A change in income per capita in the baseline drives a change in the food diet, associated to changing preferences.
The demand for non-producing regions can be set-up in two ways. If the new crop is introduced for the whole world (i.e. everywhere where in the base year the crop did grow, production is initialized), the demand will also be initialized at each of the regions in the world in the DDATA parameter above. In case the crop is only produced in the country of focus (i.e. other countries are likely also producing but for these countries no data is available), a demand is only created for the country of focus.
The DDATA
parameter captures the nonlinear demand
function parameters including initial demand quantity, price and
own-price elasticity by final product and region. Every producing region
is automatically also a consuming region and therefore these items need
to be filled-in for the region in data_demand.gms
using the
following format:
DData(ANYREGION,ALLPRODUCT,CURVE) Demand Data in 1000 units
Quantity Price PriceEla TFAC
"IndonesiaReg".Ccoa 78.55 913.02 -0.59 10.00
Prices are another driver for a change in food consumption patterns. When the price of a product increases in GLOBIOM, the level of consumption of this product decreases, by a value determined by the price elasticity associated to this product in the region considered. The price elasticity indicates by how much the relative change in consumption is affected with respect to relative change in price. The values of these elasticities in GLOBIOM are sourced from the USDA demand elasticity database and should be added in the following place:
Data_ElaUSDA.gms (model folder\finaldata)
PARAMETER
DemandPriceEla_USDA(ANYREGION,ALLPRODUCT) price elasticity of demand
IndonesiaReg.Ccoa -0.59
Data_crops.gms (data folder)
DData(REGION,CROPS,'PriceEla') = DemandPriceEla_USDA(REGION,CROPS);
After the initialization of the new crop in the DDATA, the demand change over the years is dependent on the price elasticity of demand. The price elasticity indicates by how much the relative change in consumption is affected with respect to relative change in price and is calculated as a function depending on population size, gross domestic product (GDP) and product prices. In GLOBIOM, the demand system is set-up in such a way that the price elasticity of developing countries converges to the price elasticity of the USA in 2000 at the same pace as their GDP per capita reach the USA GDP per capita value of 2000 (see GLOBIOM documentation for more information). However, one may want to diverge away from this assumption, for example when there is reason to believe that the price elasticity of the respective country does not follow the same trajectory as that of the US. This could for example be the case with products that are not used for food consumption, such as rubber and oil palm. In this case, alternative information, e.g. on the consumption of the specific crop per income class can be used to define how the price elasticity of demand may change over time for the product. The newly defined demand elasticity can then change based on the change in population and GDP in a similar fashion as the demand change:
Define_scenario.gms
DDATA(REGION,'ccoa',"Quantity")
= DDATA(REGION,'ccoa','quantity')
* MACROSCEN_DATA(MacroScen,REGION,'POP_RelChng',ScenYear)
*(MACROSCEN_DATA(MacroScen,REGION,'GDPpCAP_RelChng',ScenYear))
**(CocoaDemGDPEla(REGION,'ccoa',MacroScen,ScenYear)) ;
Economic market balances in GLOBIOM are solved at the level of 37 economic regions. GLOBIOM represents international markets and their various products traded between regions, relying on international trade statistics for trade and tariffs. It endogenously computes bilateral trade flows through the minimization of total trading costs. In this framework, trade patterns are determined by initial trade flows, the evolution of relative costs of production between regions and the trading costs. It leads to one unique price for one good on the market and the absence of intra-industry trade between different regions. There are two ways to initialize the trade for a new crop. First, if production and consumption is introduced at the bilateral level, also trade can be introduced at the bilateral level. Second, if the crop is only produced in the country of focus (i.e. other countries are likely also producing but for these countries no data is available), a specific import/export is only created for the country of focus, which is equal to the combined import/export to the rest of the world. Here, we assume the second option applies.
First, net trade of the country of focus is initialized. Net trade is computed as the difference between domestic production and consumption based on FAO food commodity balance over 1998-2002. It is computed at the regional level, so it excludes intra-regional trade flows. It is expressed in thousands of tons for crops. In GLOBIOM, this means the following items are initialized:
data_fbs.gms
PARAMETER
FBS_DATA_DET(ANYREGION,ALLPRODUCT,DataItems) Calorie consumption and production per crop (kcal per capita per day)
/
IndonesiaReg.Ccoa.ProdCal 3.6200
IndonesiaReg. Ccoa.ConsCal 3.6200
/
PARAMETER
FBS_DATA_DET_N(*,ALLPRODUCT) Calorie supplied (kcal per capita per day)
/
World. Ccoa 1.3986
/
PARAMETER
SUADATA_C(ANYREGION,ALLPRODUCT,SUADataItem) SUA data for crops (1000 tones)
/
"IndonesiaReg"."Ccoa".PRODQ 586.27
"IndonesiaReg"."Ccoa".ConsQ 252.63
"IndonesiaReg"."Ccoa".FoodQ 252.63
"IndonesiaReg"."Ccoa".PureFoodQ 215.70
"IndonesiaReg"."Ccoa".OtherNUses 34.48
"IndonesiaReg"."Ccoa".NetExports 333.64
In case the crop is only produced in the country of focus, trade is also only set up for the country of focus with the rest of the world. In this case, trade from the country of focus is initialized with a parameter for exogenous exports or imports, say trade_exo:
3_precompute:
TRADE_EXO(REGION,CROPS)
= PRODUCTION(‘IndonesiaReg’,’Ccoa’))
- DDATA(‘IndonesiaReg’,’Ccoa’,"Quantity")
- SUADATA_C(‘IndonesiaReg’,’Ccoa’,'FeedQ')
- ABS_FUEL_REQ(‘IndonesiaReg’,’Ccoa’);
Where TRADE_EXO
is defined as production
(PRODUCTION
- the sum of the area multiplied by the yield)
minus consumption (DDATA
), feed demand
(SUADATA_C
) and bioenergy demand
(ABS_FUEL_REQ
). In case of exports, the production is
larger than the sum of consumption, feed and bioenergy demand and
TRADE_EXO
is positive. In the case of imports, production
is smaller than the sum of consumption, feed and bioenergy demand and
TRADE_EXO
is negative.
To account for this outside demand in the model,
TRADE_EXO
is added to the objective function and the
ds_balance:
4_model.gms:
Objective_equ
…
+ sum((REGION,PRODUCT),
TRADE_EXO(REGION,PRODUCT)
* PRICE_EXP_EXO(REGION,PRODUCT))
Where PRICE_EXP_EXO
is equal to
DDATA(REGION,CROPS,"Price")
.
Ds_balance
…
+ TRADE_EXO (REGION,PRODUCT)
Subsequently, the outside demand and expectation on the country of
focus’ reaction on outside demand needs to be captured by shifting the
TRADE_EXO parameter through time. Depending on the crop and country of
focus, a suitable way of extrapolation can be invented. For example, a
usual extrapolation rule could be
x(t) = [x(baseyear) + dx]^(timeTrend)
, or export quantity
in long run moves with the shifter factor based on historical FAO data.
To calculate this shifter factor, a new parameter,
e.g. world_conso_shifter_yr
needs to be created and
expressed per time-step:
6_scenarios:
PARAMETER
World_Conso_shifter_yr(PRODUCT,ALLSCENYEAR)
The TRADE_EXO
of year t-1 are subsequently stored in a
new parameter called
TRADE_EXO_Base(REGION,PRODUCT) = TRADE_EXO(REGION,PRODUCT);
This parameter is then shifted with the
World_Conso_Shifter_yr
in the
define_scenario.gms
.
Define_scenario.gms:
TRADE_EXO(REGION,PRODUCT) = TRADE_EXO_Base(REGION,PRODUCT) ;
TRADE_EXO(REGION,PRODUCT) = TRADE_EXO(REGION,PRODUCT) * World_Conso_shifter_yr(PRODUCT,SCENYEAR) ;