EnergyInnovation / eps-us

Energy Policy Simulator - United States
GNU General Public License v3.0
22 stars 7 forks source link

Address differences in elasticity of demand vs elasticity of supply for industries, ie trade substitution #183

Closed robbieorvis closed 2 years ago

robbieorvis commented 2 years ago

This builds on an earlier conversation we had @jrissman, but one challenge we have identified with the IO model is that we model changes in demand for domestic industrial goods as equal to changes in demand for domestic + imported goods. This introduces some challenges (and possibly errors) especially for countries and sectors that have a high degree of import substitution elasticity.

To give an example, let's say there is an industry that has output of $100 billion but is highly susceptible to import substitution. It therefore has a high domestic demand elasticity (I might refer to this as a production elasticity): small changes in the cost and prices have large decreases in demand. Let's say a policy requiring electrification increases the cost of production such that producers have to raise their prices by 25% and we have an elasticity of 1, so that a 25% percent increase in prices results in a 25% in production. That would result in a loss of 25% of market share or $25 billion in revenue excluding the carbon tax portion.

Right now, we would carry through this reduction and assume consumers by 25% less of that product. That causes a cash flow to consumers of $25 billion, respent based on average consumer expenditures, and likely yields large induced jobs increases.

In reality however, in a highly trade exposed industry, the change in consumer demand is likely to be much smaller, and instead met by an increase in imports. The cash flow change to consumers would be considerably smaller (perhaps the sign would even change: if the elasticity for the demand of a good is inelastic but the domestic elasticity of supply is highly elastic, you can see a situation in which consumer demand barely changes but consumers end up spending the same or more for roughly the same amount of goods). In this case we would be dramatically overstating consumer savings, respending, and induced effects.

What we really want to do in the model is tease apart the difference in domestic elasticities of demand and elasticities of import substitution. The latter are often referred to as Armington elasticities. Here is a paper that explores this and develops some values: https://www.gtap.agecon.purdue.edu/resources/download/1338.pdf

If we were to combine these things, we could estimate the change in price of a domestic commodity as we do now and use the Armington elasticity to evaluate the shift from domestic to foreign production. This would be one way to estimate the reduction in domestic production. There would also be a net decrease on total demand (domestic + import) due to higher prices, which could be handled via an elasticity of demand applied downstream and based on the weighted average of the domestic prices with policy effects and foreign prices assuming the same BAU average price.

The more sophisticated way to handle this is through a proper CGEor partial GE model. The RFF model that we use for the Elasticities of Production and our leakage values used this approach to develop their findings. That paper is a good resource to refer to.

I suppose another way to do this would be to start with the elasticities of production to figure out how domestic production changes, then use the Armington elasticities to estimate the change to consumers and international trade flows (and trade deficits)

This is seems like quite an important thing to get right, especially when we start looking at international models for regions with a lot of industry like India and China.

robbieorvis commented 2 years ago

Those folks also wrote their paper for the US government, and there is an official version here: https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.510.9042&rep=rep1&type=pdf

robbieorvis commented 2 years ago

The documentation is good enough in that paper that we could probably replicate the results for the US model.

jrissman commented 2 years ago

This change seems doable and useful.

The current approach is not simply an oversight. The current approach assumes that insofar as policies cause price changes to goods, the prices of imported goods are changed identically (so import substitution would not occur). We were mostly thinking about the carbon pricing policy (and perhaps also fuel tax policies), where a border adjustment would be a part of the policy. For policies like electrification mandates, we assumed the change in the cost of the goods produced would be very minor, so even without a border adjustment, the difference might not be worth modeling.

But we have many policies now, and it seems probable that some combination of the policies other than carbon pricing and fuel taxes could shift the price of domestic goods significantly, and that such policies wouldn't realistically be accompanied by border adjustments. So it makes sense to relax this assumption and allow for the domestic policies to no longer affect the price of imported goods, which in turn necessitates the sort of demand shifting calculations you describe.

The one thing to think about is how to handle the carbon pricing policy (and maybe fuel taxes) in cases where we do want to preserve the border adjustment, such that import substitution should not occur. This will need some special handling, and maybe even a new policy lever or control lever that lets the user toggle the behavior of the carbon pricing to feature or not feature border adjustments.

robbieorvis commented 2 years ago

We get asked a ton about border carbon adjustments so this would be awesome to have represented.

Sent from my iPhone

On Sep 2, 2021, at 6:23 PM, Jeff Rissman @.***> wrote:



This change seems doable and useful.

The current approach is not simply an oversight. The current approach assumes that insofar as policies cause price changes to goods, the prices of imported goods are changed identically (so import substitution would not occur). We were mostly thinking about the carbon pricing policy (and perhaps also fuel tax policies), where a border adjustment would be a part of the policy. For policies like electrification mandates, we assumed the change in the cost of the goods produced would be very minor, so even without a border adjustment, the difference might not be worth modeling.

But we have many policies now, and it seems probable that some combination of the policies other than carbon pricing and fuel taxes could shift the price of domestic goods significantly, and that such policies wouldn't realistically be accompanied by border adjustments. So it makes sense to relax this assumption and allow for the domestic policies to no longer affect the price of imported goods, which in turn necessitates the sort of demand shifting calculations you describe.

The one thing to think about is how to handle the carbon pricing policy (and maybe fuel taxes) in cases where we do want to preserve the border adjustment, such that import substitution should not occur. This will need some special handling, and maybe even a new policy lever or control lever that lets the user toggle the behavior of the carbon pricing to feature or not feature border adjustments.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/Energy-Innovation/eps-us/issues/183#issuecomment-912100796, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AK5N6SKDNGHRCXOOROXAGOLT772MJANCNFSM5DKBDGRQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

jrissman commented 2 years ago

Okay, I will plan on adding a lever that lets you enable or disable border adjustments for the carbon pricing policy as part of work on this issue (#183). That lever will be especially useful for sub-national models, such as U.S. state models, since states may not have legal authority to tax goods coming from other states (or from foreign countries, for that matter, since that authority is reserved to the Federal government).

One other thing I thought of is that when the good is itself a fuel, it may not be appropriate to assume the policies don't affect imported goods. For instance, nobody would apply a natural gas tax that only applies to domestic producers but exempts natural gas made by foreign producers. (If we had a generic "sales tax" lever in the EPS, this policy would similarly need to apply to both domestically-produced and imported goods.) So at the very least, we may need some special handling for imported fuels. More such complexities may arise in the course of building this feature. It will not be a quick and easy feature to build. But it is worth doing.

robbieorvis commented 2 years ago

I started compiling the necessary data if we wanted to develop our own updated Armington elasticities, since I can't seem to find newer ones online than in the papers above. That data is attached. I'm going to stop for now until we decide how we want to proceed since it's a fair amount of data work. [Uploading Production and Trade Data.xlsx…]()

robbieorvis commented 2 years ago

Yes, that’s a good point!


Robbie Orvis Senior Director of Energy Policy Design +1 415-799-2171 1225 Eye Street, N.W. Suite 904 Washington, D.C. 20005 www.energyinnovation.orghttp://www.energyinnovation.org/ @.***

From: Jeff Rissman @.> Sent: Thursday, September 2, 2021 6:44 PM To: Energy-Innovation/eps-us @.> Cc: Robbie Orvis @.>; Author @.> Subject: Re: [Energy-Innovation/eps-us] Address differences in elasticity of demand vs elasticity of supply for industries, ie trade substitution (#183)

Okay, I will plan on adding a lever that lets you enable or disable border adjustments for the carbon pricing policy as part of work on this issue (#183https://github.com/Energy-Innovation/eps-us/issues/183). That lever will be especially useful for sub-national models, such as U.S. state models, since states may not have legal authority to tax goods coming from other states (or from foreign countries, for that matter, since that authority is reserved to the Federal government).

One other thing I thought of is that when the good is itself a fuel, it may not be appropriate to assume the policies don't affect imported goods. For instance, nobody would apply a natural gas tax that only applies to domestic producers but exempts natural gas made by foreign producers. (If we had a generic "sales tax" lever in the EPS, this policy would similarly need to apply to both domestically-produced and imported goods.) So at the very least, we may need some special handling for imported fuels. More such complexities may arise in the course of building this feature. It will not be a quick and easy feature to build. But it is worth doing.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/Energy-Innovation/eps-us/issues/183#issuecomment-912109711, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AK5N6SKTO3KEEGJN3IVIFX3T774ZLANCNFSM5DKBDGRQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

robbieorvis commented 2 years ago

Sorry, last comment, I actually found a much newer set of values calculated by folks at USITC, so would suggest we just use this and supplement as necessary: https://usitc.gov/data/pe_modeling/a_method_for_estimating_the_elasticity_of_substitution_and_import_sensitivity_by_industry.pdf

I found it via this paper, which includes a lit review of prior studies so may still be helpful too: https://www.usitc.gov/publications/332/working_papers/ahmad_schreiber_montgomery_4-21-2020.pdf

One other thought: we will also need to estimate the change in average price from shifting to imports to then estimate the change in total consumer demand and consumer spending. We can develop ratios of international/domestic prices using data referenced in some of the above papers and also in the spreadsheet I previously uploaded.

jrissman commented 2 years ago

Most of the work to implement full support for import substitution is done in 25b2f34. The only items left to do are:

This is a cool new feature. Our current set of output graphs accurately reflect its effect, but none of the existing graphs are designed to highlight trade in non-energy goods, so you only really notice the new feature if you're specifically looking for it in the foreign entities cash flow impact line (and that's a sum across all non-energy industries). We might want to add a new stacked area graph that shows change in trade flows for each non-energy industry, which would better illustrate these new calculations the model is doing.

We could consider including the changes in trade for the energy industries (which the EPS already calculated prior to work on this new feature) in the same graph, if the changes in energy trade don't dwarf the changes in the non-energy trade.

robbieorvis commented 2 years ago

This is great news! I’m excited to see the differences.

I would expect to see the impact in the job results, though to your point there isn’t a graph that clearly “shows” the impact. For now we would just see different results. Fully support adding some graphs breaking out the impact for the non-energy sectors, as I think this output will be very, very important for several regions we are working in.

Does this data update necessitate that we load in data for TLIM in all regions? Currently we had only been doing TLIM where regions cared about the Buy In-Region policy lever.

Love the idea of the carbon border adjustment, as well as tracking the cost/revenue impacts from that.

jrissman commented 2 years ago

Yes, the impact of the new feature shows up in the job results graph, as well as in the emissions graph and all other existing graphs. But it isn't easy to clearly distinguish the effect of the new feature in these graphs, especially when a large policy package is enabled. A graph showing changes in cross-border trade flows of non-energy products would more clearly isolate and thereby highlight the new calculations.

We'll have to remember to ensure this new graph reflects the final effects after both endogenously-calculated import substitution and the effects of the "Buy In-Region" policy lever.

I had not previously remembered that this new feature can interact with the buy in-region policy lever, so there are actually two more steps to do to ensure these two features function harmoniously together:

Note that if you have been putting zeroes in for TLIM for a region where you lacked TLIM data, you'd need to stop doing that and instead use a copy of DLIM data in TLIM.

jrissman commented 2 years ago

3be0a1a implements carbon border adjustments (CBAs) and a toggle lever to turn them on or off. The default state for a given region is set via input data, so one region can have a default state without CBAs and the policy lever will toggle them on, while a different region can have a default state with CBAs and the policy lever will toggle them off. The toggle lever policy has its own implementation schedule which is separate from the carbon tax's implementation schedule. This allows us to accurately model situations like the EU CBAM, where the EU already has a carbon price, but the CBAM will only begin to apply to industry several years from now.

CBAs turned out to be quite a bit harder to implement than I expected at first, mostly due to the difficulty of isolating the effect of the carbon price on industrial outputs, since the model is so highly interconnected, and a carbon price affects everything. But perfect isolation isn't really what we want anyway, because foreign producers aren't going to exactly mirror all of the actions undertaken and costs paid by domestic producers, even if they are subject to a carbon price through CBAs (because, for instance, they see their own energy prices and equipment costs in their own countries), so some small deviations are expected and are normal.

One thing you might not realize until you play with it is that a carbon price without a CBA has lower domestic emissions than the same carbon price with a CBA. The CBA greatly diminishes import substitution, so more products are made domestically. Even if domestic producers are comparatively efficient and clean, they still have non-zero emissions, whereas if you had instead substituted imports, the emissions that went into making those products don't count because they occurred in foreign countries (outside the model boundaries). It may require some messaging to reassure policymakers that CBAs are a good idea, because CBAs do cause global emissions to go down, and they bring jobs and economic benefits to the country that implements the CBA (at least if the country has relatively efficient producers, like the U.S. or EU), even though the CBA dampens the extent to which the carbon price reduces domestic emissions.

Anyway, issue #183 is closer to completion, but it still needs:

Also, when the carbon tax is enabled for the "Industry" sector, we see the "Agriculture" and "Water and Waste" industries having to pay quite a bit to account for their process emissions (unless you have enabled the control settings to exclude either non-CO2 gases or all process emissions from carbon taxes). While it makes sense that these industries might have to pay more to buy fuel in a country with carbon taxes (because the costs of the taxes are rolled into the fuel costs), I'm not sure it's a good idea to have them paying for their process emissions. I say that for two reasons:

So I was thinking of exempting "Agriculture" and "Water and Waste" process emissions from the carbon tax. What do you think?

robbieorvis commented 2 years ago

I think we should add a toggle for this but not hard cut the connection. Agreed it’s difficult to think of real world examples today, but not sure that will be true in the future. And with the new data we’ve added for enhanced agricultural carbon abatement, would be interesting to see the interaction of carbon pricing and uptake of those practices.

jrissman commented 2 years ago

Upon closer inspection, I think we do want to only apply scale down the import substitution effect by the setting of the "Buy In-Region" policy lever when the domestic costs are going up (causing more imports). In the case where the costs are going down, I wrote (above):

I'd use the scaled elasticity irrespective of whether domestic producers' costs are going up (which would cause lower domestic production and more imports) or domestic producers' costs are going down (which would cause higher production and lower imports). That is, scaling up imports is obviously blocked by the "Buy In-Region" lever proportionate to its setting, while scaling up domestic production risks double-counting some of the same shifted imports in the import substitution and the Buy In-Region effects.

But I've looked at it and I don't see any double-counting, so our implementation of this effect uses IF THEN ELSE and only scales down the import substitution effect when imports are rising.

I'm continuing to work on finishing off the remaining bits of this issue now.

jrissman commented 2 years ago

So, adding import substitution effects to the indirect economic impacts in the I/O model is conceptually a little tricky, but once you get that, the programming is pretty easy. Here's the relevant structure.

Calculated_Leontief

We're again using an IF THEN ELSE to test for whether the imports are going up or down due to import substitution (separately for each industry, of course). If the imports are going up, we don't modify Fraction of Imported Industrial Outputs Shifted to In Region Suppliers This Year because we want that still to go to 100% when the user sets a 100% setting on the lever, and it doesn't need to be reduced when the "Buy In-Region" lever is not being used (because then the lever has a value of zero, and we'll be using exclusively DLIM anyway). If the imports are going down, the import substitution functions essentially like the Buy In-Region lever in this context, and we augment the Buy In-Region lever setting's effect on the scaling factor between DLIM and TLIM accordingly, capping it at 1 (because we can't go beyond using 100% TLIM and 0% DLIM).

As noted earlier in this thread, all EPS regions will need data for TLIM going forward, but if you simply cannot get TLIM data for a given region, you can (1) hide the "Buy In-Region" lever from the web app for that region and (2) use a copy of the data in DLIM as a proxy for TLIM. This will somewhat undercount the effects of import substitution when the policy package makes domestic production cheaper, so it's better to have real TLIM data if available. Do not use zeroes in TLIM. Use a copy of DLIM's .csv file if you can't get real TLIM data.

Incidentally, at this point, the "Buy In-Region" lever is one of the more complex policies we have in the EPS. I hope we are using it in some regions given the work invested in building it.

Remaining to do in this issue:

jrissman commented 2 years ago

For excluding Ag and Water & Waste process emissions, I'm going to be subscripting the existing control lever BEPEfCT Boolean Exempt Process Emissions from Carbon Tax (and the associated policy lever toggle) by Industry Category. That's cleaner than implementing a new lever, allows separate control over the handling of Ag vs. Water and Waste, and in fact would allow you to separately include or exclude the process emissions for each industry chosen on an industry-by-industry basis. That affords maximum flexibility.

jrissman commented 2 years ago

Commit 92965fe finished up the capability to set whether to include or exclude each industry's process emissions from the carbon tax separately, instead of a single global default and a single global toggle. I've left it with the default setting where the carbon tax continues to affect every industry, even ag and water/waste, but you can change that by editing the values in ctrl-settings/BEPEfCT if you want to exclude these industries by default.

The only thing left to do in this issue is add the graph of change in imports of non-energy goods (and update the name of the first-tier graph selector menu item accordingly). Megan has indicated she will be handling that.

jrissman commented 2 years ago

Note that if you do change the defaults in ctrl-settings/BEPEfCT, you'll need to update the guidance text in WebAppData for the toggle lever accordingly. The toggle lever reverses the default behavior, so the guidance text would need to say which industries default which way. That's kind of tricky for a new user to understand, so perhaps it's better to leave ctrl-settings/BEPEfCT alone for the default model state, and just use the new capability to set this exception on a per-industry basis to hone the carbon tax in on industries that are covered in policy packages we create, such as if we want to simulate a proposed carbon tax that excludes agricultural process emissions but includes methane leakage from oil and gas facilities.

jrissman commented 2 years ago

Okay, I hate to mention anything at this point that would expand the scope of this nearly-complete issue, but I will mention that:

But there are four terms in the equation: Production = Domestic consumption + Exports - Imports

We still don't distinguish between domestic consumption and exports. The carbon border adjustment affects how exports behave, as it rebates the carbon price for goods sent to export (depending on the carbon price of the destination).

We could build on what we've done and calculate a change in exports (which would then give us the change in domestic consumption, as we'd have the other three terms in the equation). That would require the BAU share of each Industry Category (ISIC code) that is exported, and an equivalent to the Import Substitution Elasticities that is the Export Substitution Elasticities (assuming they are not the same set of elasticities - if they are the same, we already have them).

I recall Robbie mentioned the work on this Import Substitution feature is in part in response to needs for Chinese EPS versions, but China is a major exporter, so I might imagine the effect on exports would be even more important than the effect on imports. It does feel like adding just half of the feature to so thoroughly calculate imports and production changes but not handle changes in exports vs. domestic consumption.

The last thing I will note is that we should look into whether we ought to add an input data variable that expresses the weighted average carbon price (for each Industry Category) imposed by regions outside the model borders that are exporting those goods to the modeled region, and to back off the effects of the carbon border adjustment proportionately to the difference between this weighted average value and the setting of the carbon price in the domestic (modeled) region.

robbieorvis commented 2 years ago

Thanks for flagging this, Jeff.

I actually think the piece that sticks out to me as being necessary is change in domestic consumption, because that affects (perhaps significantly) consumer cash flows and everything downstream of that. We need to be able to understand both the change in domestic production but also the change in consumption. Exports are important too though, as you mention, and I think it would be pretty cool how we might show increased exports under a variety of policy scenarios that decrease costs of production (e.g. over the long run if electricity prices decrease we might see increased exports as a result. Generally, I agree we shouldn’t half-build the feature, so would really prefer we finish out the equation.

I’m quite certain you can use the Armington elasticities for both imports and exports, since they just reflect changes in production based on changes in relative prices.

We already have the BAU share of each category that is exported from OECD data, which includes cross border flows, so that data is easy to get. With those two pieces, I think you have what is required.

Before adding anything on the carbon border adjustment, we should ask Chris or others who work on this how these situations are usually handled. A country exporting products that has a carbon price, I think, typically rebates the carbon price to the exporter. If an importing country imports goods from a country with a carbon price, I’m not sure there’s any international precedent (beyond economic theory) for handling this through a carbon price adjustment to a CBAM.

mkmahajan commented 2 years ago

To Robbie's point, here is a clarifying definition for Armington elasticities: Armington elasticities "specify the degrees of substitution in demand between similar products produced in different countries"

jrissman commented 2 years ago

I had the "Direct Cash Flow Change" graphs from the web app. Showing them has been increasingly questionable since adding the I/O model, because they are only direct effects, they omit a lot of the important implications for cash flow that we are now calculating. They can even show results that are the opposite of what actually happens to an entity's final cash flow - for instance, when indirect and induced effects are larger and have the opposite sign as direct effects.

I'm particularly worried about the accuracy of those graphs in connection with the new features we're building. We intentionally don't remove taxes before sending the direct cash flow changes through the I/O model. (The I/O model metrics, like Value Added, are supposed to include taxes paid. And "Output" is similarly supposed to equal revenue and include taxes paid.) So not removing taxes is necessary in order to get correct values when we calculate the "Requirements" variables (i.e. that show the relationship between a change in output and change in value added, or jobs, etc.).

We now handle VAT after the I/O model, so it is after indirect and induced effects are calculated. Those "direct change in cash flow" graphs effectively are showing an input to the I/O model, not a final result for the cash of any given entity, and that means it's pretty easy for them to be misinterpreted by a web app user. The graphs might still be useful if you know what they are depicting, so I think we should leave them in the model (in Vensim), but they seem increasingly like the wrong thing to be showing to web app users. That's why I hid them in WebAppData.

mkmahajan commented 2 years ago

Today I worked on finishing the change in nonenergy industry product exports and the change in domestic consumption of nonenergy industry products. @jrissman and I can review this at tomorrow's session and implement any needed fixes.

jrissman commented 2 years ago

When I finally had a quiet hour or two this evening, I was able to properly review the "change in nonenergy export" calculations you added, Megan. I came up with a simpler way to produce the same results that doesn't rely on calculating a non-BAU export share of production as an intermediate step. I've tested and confirmed that this simpler way produces identical numerical results to what you had before, but I find the simpler way easier to understand. If you have a few minutes, it might be worth looking at the simpler way as a point of comparison.

Both your way and my way rely on the idea that all changes in exports are calculated in this part of the model (via IESE and Portion of Change in Passthrough Expenses as Share of Nonenergy Industry Output Affecting Imports and Exports). That's why these changes in exports can be applied to the BAU Exports, instead of some sort of demand-adjusted version of BAU Exports. We're doing the export demand adjustment right here, with the IESE elasticities.

I also went ahead and added the necessary calculations to get total (non-BAU) imports, exports, and consumption. We already had total (non-BAU) production coming out of the I/O model. This means that all eight variables for graphing (imports, exports, production, and consumption, and the change in those four things) are now available and ready to be converted to output units and graphed.

Note that the graphs should not include the energy industries in the key because they will always contain zeroes, as these graphs are only for the non-energy industry products.

I think this issue will be done once the graphs are in place and then you can close it. The remaining issues pertaining to taxes we can deal with in issue #221.

mkmahajan commented 2 years ago

Thanks, Jeff! Your edits make sense to me.

I just added the new graphs and reviewed them on the staging server, so I am closing out this issue.