Getting Your Head Around the Feenstra Approach
Most students picking up International Economics Feenstra run into the same wall halfway through the trade models chapter. The math looks clean on paper but the moment you try to actually use it, everything falls apart. I spent three semesters debugging my own understanding before it clicked, and even then I had to unlearn half the shortcuts I thought I was using. The core issue is that Feenstra structures everything around the gravity model and arm's length trade costs in a way that assumes you already know how to combine elasticity estimates with real-world tariff data. You don't. That's why the exercises in Chapter 6 feel impossible on first pass.
What International Economics Feenstra Actually Teaches You
Unlike traditional trade textbooks that lead with comparative advantage diagrams, Feenstra starts with the gravity equation and builds outward. The approach is more empirical from page one, which means the theory sections are tightly coupled to data exercises. If you're not comfortable with matrix algebra or solving systems of simultaneous equations, the early chapters will chew you up. The textbook itself comes with a companion data set on the publisher's site. Most professors assign the exercise files without warning students that they need the R scripts or the Stata do-files that go with them. I found this out the hard way during a take-home exam where half the class was stuck trying to manually calculate trade elasticities because nobody bothered installing the correct packages first.
Working Through the Gravity Model Exercises
Here is the practical sequence that actually works when you are working through the problem sets on your own time. Start with the basic gravity regression using the trade flow data provided in the book's appendix. Do not skip the step where you log-transform both the export value and the GDP variables. I used to skip it because I thought it was optional math, and my coefficients were always biased toward zero as a result. Once you apply the natural log, the interpretation becomes straightforward: a one percent increase in GDP is associated with a specific percent change in bilateral trade flows. The next step is adding the distance variable and the_dummy for contiguity, shared language, and colonial ties. This is where most people drop points because they omit the fixed effects structure. Feenstra expects you to include exporter and importer fixed effects in every specification after the baseline. If you submit a gravity model without those, it is not wrong by accident. It is wrong by omission.
Get the Full Details

I ran into a specific edge case during a research assistantship where the FEEM (Fixed Effects Estimation Method) produced near-perfect collinearity between the exchange rate variable and the importer fixed effects. The model threw an error and I spent two hours chasing it. The workaround was straightforward once I figured it out: I dropped the exchange rate variable and let the importer fixed effects absorb the currency-level variation instead. It is a standard trade-off in gravity estimation that Feenstra does not call out explicitly in the text, but it shows up whenever you try to estimate a model with too many control variables relative to the number of country pairs in your panel.
Common Pitfalls and How to Fix Them
There are a few things the textbook assumes you already know. Here is what they do not cover well enough. Zero trade flows: The gravity model cannot handle zeros, which means any country pair with no recorded bilateral trade gets dropped from your sample. This creates a serious selection bias, especially when studying developing economies or sanction regimes. The standard fix is to use the Poisson Pseudo Maximum Likelihood estimator, which Feenstra mentions in passing in the advanced chapter but never walks through step by step. You need to install the ppmlhdfe command in Stata or use the glm function in R with a log link and Poisson family. Without it, your elasticity estimates will be too high because you are only modeling positive trade flows. Time-invariant variables: Anything that does not change over time, like geographic distance or common language, gets absorbed by the fixed effects. This is by design in the FE framework, but beginners often get confused when their coefficient disappears after adding fixed effects and assume they made a mistake. You did not. That is how the model works. If you need to estimate the effect of time-varying variables alongside fixed effects, you need to use the within transformation or stick to the PPML approach.
Standard errors: Ordinary standard errors from a gravity regression are clustered at the country-pair level, not at the observation level. Feenstra's exercise solutions sometimes show unclustered SEs in the early examples, which can make your t-statistics look inflated. Always cluster at the bilateral level. In Stata that is vce(cluster pair_id), where pair_id is a unique identifier for each exporter-importer dyad.

Using the Companion Data Sets Efficiently
The data files for International Economics Feenstra are available on the companion website, usually under a section labeled Student Resources. The files are in both CSV and .dta format. If you are using Stata, grab the .dta version to preserve variable labels and value labels. The CSV exports strip those out and you end up remapping everything by hand, which takes roughly forty-five minutes per data set. The exercise files are structured around specific chapters. Chapter 3 covers the Ricardian model and Calibrated Gravity. Chapter 7 moves into trade policy analysis with tariff simulations. If you are working ahead, the Chapter 7 material is where most students struggle because it requires combining the gravity estimates from earlier chapters with tariff data from TRAINS or the WITS database. I recommend downloading the wits_db package in Stata early, before you need it. Installing it mid-assignment is a waste of time.
When the Approach Breaks Down
No model is universal. The gravity framework in Feenstra works well for manufactured goods and services with high data coverage. It breaks down quickly when you try to apply it to commodities with volatile prices, small island economies with negligible trade statistics, or sectors dominated by single-firm transactions. In those cases, the fitted values drift far from reality and your R-squared collapses. If you are working on a project involving one of those sectors, switch to a sectoral gravity specification or consider a Heckman correction for the selection bias that zero trade flows create. The calibration exercises in the Ricardian chapter also have limitations. They assume perfect competition and constant returns to scale, which never hold in actual trade policy analysis. The results give you direction and order of magnitude, not precise predictions. I have seen graduate students present calibrated Feenstra outputs as if they were exact forecasts, and it embarrassed everyone involved. Treat the calibration results as illustrative, not definitive. If your goal is rigorous policy analysis rather than course completion, pairing the Feenstra framework with the BACI product-level data set and running a hierarchical Bayes estimation will give you much tighter confidence intervals than the standard OLS gravity approach. It takes longer to set up, but the payoff in accuracy is worth the extra afternoon of work.