JGCRI / gcam-core

GCAM -- The Global Change Analysis Model
http://jgcri.github.io/gcam-doc/
Other
286 stars 167 forks source link

How to model diet scenario in GCAM #311

Open Swati0201 opened 1 year ago

Swati0201 commented 1 year ago

Hi, I have been trying to model the Eatlancet diet in GCAM_6 and facing many issues. Firstly the total calorie requirements of the diet I want to model are less than what has been fixed in the model. So how to reduce the total calorie requirement of staples and non-staple crops? Secondly, since the logit is set to zero by default, Shareweight is the only option to bring down the calorie of a specific crop type(fruits, vegetables, legumes, etc.) into the required range. I have been trying this for a while, but do not see a pattern there, For some crops like legumes and nuts no matter how much I increase the share weight it does not affect them the way it does to other commodities. While for some commodities such as pork, dairy, etc. when I decrease the share weight their calorie demand increases despite giving a 0.0001 value. While for fruits and vegetables, they are not coming down to the required range and fluctuate a lot if I change the share weight of any other crops. Thirdly I have tried assigning logit values too for eg -6 to misc and sugar crops and -3 to animal protein and 0 to fruits and vegetables. But it doesn't seem to be working. It would be great if someone can bring clarity to this

amnmalik commented 1 year ago

@realxinzhao, would you be able to help here?

realxinzhao commented 1 year ago

Thanks for the question @Swati0201 @amnmalik Here are some thoughts:

Firstly the total calorie requirements of the diet I want to model are less than what has been fixed in the model. So how to reduce the total calorie requirement of staples and non-staple crops? A little confused by "fixed in the model". Do you mean the Weight-to-Calories conversion rates (e.g., Cal/g)? In short, we computed this conversion rate using base year data and currently assumed they are constant in future periods. This conversion translates food availability (e.g., Million Tonnes) to Food Calories consumption in GCAM. E.g., if you believe there could be future changes because of the composition change of the aggregated product or efficiency improvements in food processing, you can generate scenarios of future changes in this conversion. But this likely won't directly reflect dietary changes. By calorie requirement, if you mean the total calories consumption, note that it is not a "fixed" path. Instead, food consumption is own-price, cross-price & income responsive.

Secondly, since the logit is set to zero by default, Shareweight is the only option to bring down the calorie of a specific crop type(fruits, vegetables, legumes, etc.) into the required range. I have been trying this for a while, but do not see a pattern there, For some crops like legumes and nuts no matter how much I increase the share weight it does not affect them the way it does to other commodities. While for some commodities such as pork, dairy, etc. when I decrease the share weight their calorie demand increases despite giving a 0.0001 value. While for fruits and vegetables, they are not coming down to the required range and fluctuate a lot if I change the share weight of any other crops.

Please also note that, if logit exponent == zero, it means calorie consumption shares won't be responsive to relative price changes. But logit exponents do not necessarily have to be zeros. In my own past studies, I have used -0.25 and even tested -1 (close to a Cobb-Douglas). If you study diet transition, I probably would suggest allowing substitutions in all sub-nests in food consumption. Regarding share-weight changes, they would indeed reflect preference changes. Just note that they are relatively defined. E.g., the share-weight of one branch was rescaled to 1. In addition to that, at the top level, there is still staples vs. non-staples (not a logit, but from our food demand model).

Thirdly I have tried assigning logit values too for eg -6 to misc and sugar crops and -3 to animal protein and 0 to fruits and vegetables. But it doesn't seem to be working. Maybe double check the nesting structure to ensure the places you changed were intended. E.g., it should probably be A_demand_nesting_subsector.csv and A_demand_nesting_subsector.csv

BTW, not sure how important this is to your study, you probably want to move FiverCrop to the Oil nest in the food consumption nesting structure because it is almost entirely Cottonseed Oil when it is used for food. There will be a GCAM fix later.

Last, another option to create dietary change scenarios is to use fuelprefElasticity ( fuel-preference-elasticity). GCAM included this for dietary changes under SSP1. You can find an XML called food_SSP1.xml in your XML folder and see examples there. In short, it is a parameter adjusting preferences based on income changes. E.g., an implicit share-weight change per income change.

Swati0201 commented 1 year ago

Thankyou, for your detailed and really helpful reply @realxinzhao

Swati0201 commented 1 year ago

Hi @realxinzhao. As mentioned above I am trying to model the eat lancet diet in the model. The total calorie consumption of this diet is lower than what is projected in the BAU scenario. I have been successfully able to do that by changing income elasticity. But now I am facing an issue in demand shift among non-staple crops. For eg, I want legumes and Nuts in more quantity compared to fruits, vegetables, or dairy(which are higher than the required quantity). As per your suggestions, I have tried keeping logit values to -1,-2, and even -6(in the files mentioned above). But there seems to be no effect. Also, I tried using a tax/subsidy file to model the behavior using economic parameters but observed a strange behavior, If I put the supply sector as "FoodDemand_Staple" or "FoodDemand_NonStaple" there is no difference observed in demand or production or cost of that crop. But if I allow the supply sector to be "FeedCrop" the file shows an increase/decrease in production as well as a change in cost. It would be great if you can share a way to correctly model this behavior.

realxinzhao commented 1 year ago

Hi @Swati0201 I guess it will be more related to the driver of the dietary change you are trying to represent. If it is policy-driven, a food policy should add a wedge between consumer and producer prices (just like real-world policies). So you want to check if your output prices behave as intended if you want to confirm your policy implementation (e.g., tax/ subsidy on legumes/nuts).

If you think the driver would be a preference change, you can try changing the share-weights, which you might have a more flexible control at. Just note that share-weights are relatively defined, e.g., you want to change share-weight for legumes relative to nuts.

BTW, not sure if you compared/checked the initial data or to what extent that matters to your study; you might want to check out GCAMv7 as there was a key update of the base data for Ag, including food calorie consumption.

pkyle commented 1 year ago

If it helps, I've done this before using fuel preference elasticities. See the folder: https://github.com/pkyle/gcam-core/tree/gpk/paper/sam/input/policy/addon One XML file changes the income elasticities of non-staples, reducing total caloric demand, and another modifies the shares of the different commodity classes. Fuel preference elasticities effectively change the share-weights as a function of the change in per-capita GDP. The revisions to the share-weights aren't saved, so you really just have to look at the model output and make further revisions as necessary.

Swati0201 commented 1 year ago

Thank you @pkyle This is really helpful. The file worked for me