# Packages ----
library(archive)
library(data.table)
library(knitr)
# Extract ----
fzip <- "first-edition/Chapter-2.zip"
dout <- gsub("\\.zip$", "", fzip)
if (!dir.exists(dout)) {
archive_extract(fzip, dir = dout)
}
# Read ----
fout <- paste0(dout, "/trefler.rds")
fout2 <- paste0(dout, "/trefler_desc.rds")
if (!file.exists(fout)) {
trefler <- fread(
"first-edition/Chapter-2/hov_pub.csv",
header = FALSE,
col.names = c("country", "factor", "at", "v", "y", "b", "ypc", "pop")
)
# fread reads b as integer64 (large integers); convert to numeric to avoid
# bit64 arithmetic overriding double operations downstream
trefler[, b := as.numeric(b)]
# Transform ----
# see https://www.stata.com/manuals/rsummarize.pdf
# https://www.stata.com/manuals/degen.pdf
# https://www.stata.com/manuals/degen.pdf
# Create an auxiliary table for delta values
delta_values <- data.table(
country = c(
"Bangladesh", "Pakistan", "Indonesia", "Sri Lanka", "Thailand",
"Colombia", "Panama", "Yugoslavia", "Portugal", "Uruguay", "Greece",
"Ireland", "Spain", "Israel", "Hong Kong", "New Zealand", "Austria",
"Singapore", "Italy", "UK", "Japan", "Belgium", "Trinidad", "Netherlands",
"Finland", "Denmark", "West Germany", "France", "Sweden", "Norway",
"Switzerland", "Canada", "USA"
),
delta = c(
0.03, 0.09, 0.10, 0.09, 0.17, 0.16, 0.28, 0.29, 0.14, 0.11, 0.45,
0.55, 0.42, 0.49, 0.40, 0.38, 0.60, 0.48, 0.60, 0.58, 0.70, 0.65, 0.47,
0.72, 0.65, 0.73, 0.78, 0.74, 0.57, 0.69, 0.79, 0.55, 1
)
)
trefler[, ypc_max := max(ypc)]
trefler[country != "Italy", ratio := ypc / ypc_max]
trefler[country == "Italy", ratio := ypc / ypc_max + 0.0001]
trefler[, ypc_max := NULL]
setorder(trefler, ratio)
trefler[, indexc := .GRP, by = ratio]
trefler[, indexf := .GRP, by = factor]
trefler <- merge(trefler, delta_values, by = "country", all.x = TRUE)
# Labels ----
# Create a separate table with the variables description
trefler_desc <- data.table(
variable = c(
"country", "factor", "at", "v", "y", "b", "ypc", "indexc", "indexf"
),
description = c(
"Name of the country", "Name of the factor",
"Factor content of trade F=A*T", "Endowment", "GDP, World Bank, y=p*Q",
"Trade balance, World Bank b=p*T", "GDP per capita, PWT",
"Country indentifier", "Factor Indentifier"
)
)
# Save ----
saveRDS(trefler, fout)
saveRDS(trefler_desc, fout2)
} else {
trefler <- readRDS(fout)
trefler_desc <- readRDS(fout2)
}Chapter 2. The Heckscher-Ohlin Model
In these exercises, you will reproduce some of the empirical results from Trefler (1993, 1995). To complete the exercise, the Excel file hov_pub.csv should be stored in the directory Chapter-2. After this, run the STATA program hov_pub.do, which will create a new STATA data file trefler.dta.
Read and transform the data
Feenstra’s code
* This is to read the data into Stata *
set mem 30m
* insheet using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler.csv *
insheet using "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\hov_pub.csv"
rename v1 country
rename v2 factor
rename v3 AT
rename v4 V
rename v5 Y
rename v6 B
rename v7 YPC
rename v8 POP
* create country index *
quietly summarize YPC
local maxYPC=_result(6)
gen ratio=YPC/`maxYPC'
replace ratio=ratio+0.0001 if country=="Italy"
sort ratio
egen indexc=group(ratio)
* create factor index *
sort factor
egen indexf=group(factor)
* include delta *
gen delta=1
replace delta=0.03 if country=="Bangladesh"
replace delta=0.09 if country=="Pakistan"
replace delta=0.10 if country=="Indonesia"
replace delta=0.09 if country=="Sri Lanka"
replace delta=0.17 if country=="Thailand"
replace delta=0.16 if country=="Colombia"
replace delta=0.28 if country=="Panama"
replace delta=0.29 if country=="Yugoslavia"
replace delta=0.14 if country=="Portugal"
replace delta=0.11 if country=="Uruguay"
replace delta=0.45 if country=="Greece"
replace delta=0.55 if country=="Ireland"
replace delta=0.42 if country=="Spain"
replace delta=0.49 if country=="Israel"
replace delta=0.40 if country=="Hong Kong"
replace delta=0.38 if country=="New Zealand"
replace delta=0.60 if country=="Austria"
replace delta=0.48 if country=="Singapore"
replace delta=0.60 if country=="Italy"
replace delta=0.58 if country=="UK"
replace delta=0.70 if country=="Japan"
replace delta=0.65 if country=="Belgium"
replace delta=0.47 if country=="Trinidad"
replace delta=0.72 if country=="Netherlands"
replace delta=0.65 if country=="Finland"
replace delta=0.73 if country=="Denmark"
replace delta=0.78 if country=="West Germany"
replace delta=0.74 if country=="France"
replace delta=0.57 if country=="Sweden"
replace delta=0.69 if country=="Norway"
replace delta=0.79 if country=="Switzerland"
replace delta=0.55 if country=="Canada"
replace delta=1 if country=="USA"
compress
label var country "Name of the country"
label var factor "Name of the factor"
label var AT "Factor content of trade F=A*T"
label var V "Endowment"
label var Y "GDP, World Bank, y=p*Q"
label var B "Trade balance, World Bank b=p*T"
label var YPC "GDP per capita, PWT"
label var indexc "Country indentifier"
label var indexf "Factor Indentifier"
* save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler,replace *
save "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler", replace
exitOutput:
. * This is to read the data into Stata *
. set mem 30m
Current memory allocation
current memory usage
settable value description (1M = 1024k)
--------------------------------------------------------------------
set maxvar 5000 max. variables allowed 1.909M
set memory 30M max. data space 30.000M
set matsize 400 max. RHS vars in models 1.254M
-----------
33.163M
. insheet using Z:\home\pacha\github\advanced-international-trade\first-edition\Ch
> apter-2\hov_pub.csv
(8 vars, 297 obs)
. rename v1 country
. rename v2 factor
. rename v3 AT
. rename v4 V
. rename v5 Y
. rename v6 B
. rename v7 YPC
. rename v8 POP
.
. * create country index *
. quietly summarize YPC
. local maxYPC=_result(6)
. gen ratio=YPC/`maxYPC'
. replace ratio=ratio+0.0001 if country=="Italy"
(9 real changes made)
.
. sort ratio
. egen indexc=group(ratio)
.
. * create factor index *
. sort factor
. egen indexf=group(factor)
.
. * include delta *
.
. gen delta=1
. replace delta=0.03 if country=="Bangladesh"
(9 real changes made)
. replace delta=0.09 if country=="Pakistan"
(9 real changes made)
. replace delta=0.10 if country=="Indonesia"
(9 real changes made)
. replace delta=0.09 if country=="Sri Lanka"
(9 real changes made)
. replace delta=0.17 if country=="Thailand"
(9 real changes made)
. replace delta=0.16 if country=="Colombia"
(9 real changes made)
. replace delta=0.28 if country=="Panama"
(9 real changes made)
. replace delta=0.29 if country=="Yugoslavia"
(9 real changes made)
. replace delta=0.14 if country=="Portugal"
(9 real changes made)
. replace delta=0.11 if country=="Uruguay"
(9 real changes made)
. replace delta=0.45 if country=="Greece"
(9 real changes made)
. replace delta=0.55 if country=="Ireland"
(9 real changes made)
. replace delta=0.42 if country=="Spain"
(9 real changes made)
. replace delta=0.49 if country=="Israel"
(9 real changes made)
. replace delta=0.40 if country=="Hong Kong"
(9 real changes made)
. replace delta=0.38 if country=="New Zealand"
(9 real changes made)
. replace delta=0.60 if country=="Austria"
(9 real changes made)
. replace delta=0.48 if country=="Singapore"
(9 real changes made)
. replace delta=0.60 if country=="Italy"
(9 real changes made)
. replace delta=0.58 if country=="UK"
(9 real changes made)
. replace delta=0.70 if country=="Japan"
(9 real changes made)
. replace delta=0.65 if country=="Belgium"
(9 real changes made)
. replace delta=0.47 if country=="Trinidad"
(9 real changes made)
. replace delta=0.72 if country=="Netherlands"
(9 real changes made)
. replace delta=0.65 if country=="Finland"
(9 real changes made)
. replace delta=0.73 if country=="Denmark"
(9 real changes made)
. replace delta=0.78 if country=="West Germany"
(9 real changes made)
. replace delta=0.74 if country=="France"
(9 real changes made)
. replace delta=0.57 if country=="Sweden"
(9 real changes made)
. replace delta=0.69 if country=="Norway"
(9 real changes made)
. replace delta=0.79 if country=="Switzerland"
(9 real changes made)
. replace delta=0.55 if country=="Canada"
(9 real changes made)
. replace delta=1 if country=="USA"
(0 real changes made)
.
. compress
YPC was float now int
indexc was float now byte
indexf was float now byte
.
. label var country "Name of the country"
. label var factor "Name of the factor"
. label var AT "Factor content of trade F=A*T"
. label var V "Endowment"
. label var Y "GDP, World Bank, y=p*Q"
. label var B "Trade balance, World Bank b=p*T"
. label var YPC "GDP per capita, PWT"
. label var indexc "Country indentifier"
. label var indexf "Factor Indentifier"
.
. save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\t
> refler,replace
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\tre
> fler.dta saved
.
. exit
end of do-fileMy code
Exercise 1
Given identical technologies across countries, run the program sign_rank_1.do to conduct the sign test, rank test, and test for missing trade. Use the results in sign_rank_1.log to replicate columns (2) and (4) in Table 2.5.
Feenstra’s code
* This program is to conduct sign test, Rank test and Missing trade test *
capture log close
* log using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\sign_rank_1.log, replace *
log using "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\sign_rank_1.log", replace
set mem 30m
* use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler, clear *
use "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler", clear
* number of country in the dataset *
egen C=max(indexc)
egen F=max(indexf)
* Calculate the world level of Yw, Bw and Vw *
egen Yww=sum(Y)
gen Yw=Yww/F
egen Bww=sum(B)
gen Bw=Bww/F
egen Vfw=sum(V), by(indexf)
* Calculate country share Sc *
gen Sc=(Y-B)/(Yw-Bw)
* Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)*
gen Efc=AT-(V-Sc*Vfw)
* Construct the average epsilon for a given factor *
egen total=sum(Efc),by(indexf)
gen ave=total/C
* Construct sigma^2 and the weight *
egen tot=sum((Efc-ave)^2), by(indexf)
gen sigma2f=tot/(C-1)
codebook sigma2f
gen sigmaf=sqrt(sigma2f)
gen weight=sigmaf*sqrt(Sc)
* Using the weight, convert all the data *
gen trAT=AT/(sigmaf*sqrt(Sc))
gen trV=V/(sigmaf*sqrt(Sc))
gen trY=Y/sqrt(Sc)
gen trB=B/sqrt(Sc)
gen trVfw=Vfw/sigmaf
gen AThat=trV-Sc*trVfw
gen AThat2=(V-Sc*Vfw)/weight
* Correlation, should be .28 *
corr trAT AThat2
*************
* Sign Test *
*************
sort indexc
by indexc: count if trAT*AThat2>0
count if trAT*AThat2>0
display _result(1)/_N
*****************
* Missing Trade *
*****************
* Checking for the missing trade, should be .032 *
quietly summarize trAT
local varAT=_result(4)
quietly summarize AThat
local varHat=_result(4)
quietly summarize AThat2
local varHat2=_result(4)
display `varAT'/`varHat'
display `varAT'/`varHat2'
**************
* Rank Tests *
**************
keep country indexc indexf trAT AThat2
sort indexc indexf
reshape wide trAT AThat2, i(indexc) j(indexf)
local i=1
while `i'<9{
local j=`i'+1
while `j'<=9{
gen rank`i'`j'=((trAT`i'-trAT`j')*(AThat2`i'-AThat2`j')>0)
local j=`j'+1
}
local i=`i'+1
}
keep country indexc rank*
reshape long rank, i(indexc) j(factor)
egen r1=sum(rank), by(indexc)
gen r2=r1/36
collapse r2,by(indexc country)
sum r2
list
log close
exitOutput:
. * This program is to conduct sign test, Rank test and Missing trade test *
.
. capture log close
. log using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapte
> r-2\sign_rank_1.log, replace
----------------------------------------------------------------------------------
name: <unnamed>
log: Z:\home\pacha\github\advanced-international-trade\first-edition\Chapt
> er-2\sign_rank_1.log
log type: text
opened on: 19 Jun 2024, 15:29:23
.
. set mem 30m
Current memory allocation
current memory usage
settable value description (1M = 1024k)
--------------------------------------------------------------------
set maxvar 5000 max. variables allowed 1.909M
set memory 30M max. data space 30.000M
set matsize 400 max. RHS vars in models 1.254M
-----------
33.163M
.
. use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\tr
> efler, clear
.
. * number of country in the dataset *
. egen C=max(indexc)
. egen F=max(indexf)
.
. * Calculate the world level of Yw, Bw and Vw *
. egen Yww=sum(Y)
. gen Yw=Yww/F
. egen Bww=sum(B)
. gen Bw=Bww/F
. egen Vfw=sum(V), by(indexf)
.
. * Calculate country share Sc *
. gen Sc=(Y-B)/(Yw-Bw)
.
. * Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)*
. gen Efc=AT-(V-Sc*Vfw)
.
. * Construct the average epsilon for a given factor *
. egen total=sum(Efc),by(indexf)
. gen ave=total/C
.
. * Construct sigma^2 and the weight *
.
. egen tot=sum((Efc-ave)^2), by(indexf)
. gen sigma2f=tot/(C-1)
.
. codebook sigma2f
----------------------------------------------------------------------------------
sigma2f (unlabeled)
----------------------------------------------------------------------------------
type: numeric (float)
range: [98198290,7.112e+22] units: 10
unique values: 9 missing .: 0/297
tabulation: Freq. Value
33 98198288
33 2.419e+08
33 7.455e+11
33 9.191e+11
33 1.210e+12
33 4.383e+12
33 2.106e+13
33 1.009e+14
33 7.112e+22
. gen sigmaf=sqrt(sigma2f)
. gen weight=sigmaf*sqrt(Sc)
.
. * Using the weight, convert all the data *
.
. gen trAT=AT/(sigmaf*sqrt(Sc))
. gen trV=V/(sigmaf*sqrt(Sc))
. gen trY=Y/sqrt(Sc)
. gen trB=B/sqrt(Sc)
. gen trVfw=Vfw/sigmaf
.
. gen AThat=trV-Sc*trVfw
. gen AThat2=(V-Sc*Vfw)/weight
.
. * Correlation, should be .28 *
.
. corr trAT AThat2
(obs=297)
| trAT AThat2
-------------+------------------
trAT | 1.0000
AThat2 | 0.2823 1.0000
.
. *************
. * Sign Test *
. *************
.
. sort indexc
. by indexc: count if trAT*AThat2>0
----------------------------------------------------------------------------------
-> indexc = 1
3
----------------------------------------------------------------------------------
-> indexc = 2
3
----------------------------------------------------------------------------------
-> indexc = 3
2
----------------------------------------------------------------------------------
-> indexc = 4
2
----------------------------------------------------------------------------------
-> indexc = 5
2
----------------------------------------------------------------------------------
-> indexc = 6
3
----------------------------------------------------------------------------------
-> indexc = 7
3
----------------------------------------------------------------------------------
-> indexc = 8
5
----------------------------------------------------------------------------------
-> indexc = 9
2
----------------------------------------------------------------------------------
-> indexc = 10
9
----------------------------------------------------------------------------------
-> indexc = 11
1
----------------------------------------------------------------------------------
-> indexc = 12
6
----------------------------------------------------------------------------------
-> indexc = 13
2
----------------------------------------------------------------------------------
-> indexc = 14
6
----------------------------------------------------------------------------------
-> indexc = 15
6
----------------------------------------------------------------------------------
-> indexc = 16
4
----------------------------------------------------------------------------------
-> indexc = 17
5
----------------------------------------------------------------------------------
-> indexc = 18
5
----------------------------------------------------------------------------------
-> indexc = 19
6
----------------------------------------------------------------------------------
-> indexc = 20
6
----------------------------------------------------------------------------------
-> indexc = 21
7
----------------------------------------------------------------------------------
-> indexc = 22
6
----------------------------------------------------------------------------------
-> indexc = 23
6
----------------------------------------------------------------------------------
-> indexc = 24
4
----------------------------------------------------------------------------------
-> indexc = 25
3
----------------------------------------------------------------------------------
-> indexc = 26
4
----------------------------------------------------------------------------------
-> indexc = 27
5
----------------------------------------------------------------------------------
-> indexc = 28
3
----------------------------------------------------------------------------------
-> indexc = 29
4
----------------------------------------------------------------------------------
-> indexc = 30
4
----------------------------------------------------------------------------------
-> indexc = 31
8
----------------------------------------------------------------------------------
-> indexc = 32
5
----------------------------------------------------------------------------------
-> indexc = 33
8
.
. count if trAT*AThat2>0
148
. display _result(1)/_N
.4983165
.
. *****************
. * Missing Trade *
. *****************
.
. * Checking for the missing trade, should be .032 *
.
. quietly summarize trAT
. local varAT=_result(4)
. quietly summarize AThat
. local varHat=_result(4)
. quietly summarize AThat2
. local varHat2=_result(4)
. display `varAT'/`varHat'
.03375119
. display `varAT'/`varHat2'
.031999
.
. **************
. * Rank Tests *
. **************
.
. keep country indexc indexf trAT AThat2
.
. sort indexc indexf
. reshape wide trAT AThat2, i(indexc) j(indexf)
(note: j = 1 2 3 4 5 6 7 8 9)
Data long -> wide
-----------------------------------------------------------------------------
Number of obs. 297 -> 33
Number of variables 5 -> 20
j variable (9 values) indexf -> (dropped)
xij variables:
trAT -> trAT1 trAT2 ... trAT9
AThat2 -> AThat21 AThat22 ... AThat29
-----------------------------------------------------------------------------
.
. local i=1
. while `i'<9{
2. local j=`i'+1
3. while `j'<=9{
4. gen rank`i'`j'=((trAT`i'-trAT`j')*(AThat2`i'-AThat2`j')>0)
5. local j=`j'+1
6. }
7. local i=`i'+1
8. }
.
. keep country indexc rank*
. reshape long rank, i(indexc) j(factor)
(note: j = 12 13 14 15 16 17 18 19 23 24 25 26 27 28 29 34 35 36 37 38 39 45 46 47
> 48 49 56 57 58 59 67 68 69 78 79 89)
Data wide -> long
-----------------------------------------------------------------------------
Number of obs. 33 -> 1188
Number of variables 38 -> 4
j variable (36 values) -> factor
xij variables:
rank12 rank13 ... rank89 -> rank
-----------------------------------------------------------------------------
. egen r1=sum(rank), by(indexc)
. gen r2=r1/36
. collapse r2,by(indexc country)
. sum r2
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
r2 | 33 .6026936 .1721445 .0833333 .9166667
. list
+----------------------------------+
| indexc country r2 |
|----------------------------------|
1. | 1 Bangladesh .75 |
2. | 2 Pakistan .7222222 |
3. | 3 Indonesia .6666667 |
4. | 4 Sri Lanka .4166667 |
5. | 5 Thailand .6944444 |
|----------------------------------|
6. | 6 Colombia .8055556 |
7. | 7 Panama .5555556 |
8. | 8 Yugoslavia .4444444 |
9. | 9 Portugal .5277778 |
10. | 10 Uruguay .7222222 |
|----------------------------------|
11. | 11 Greece .4722222 |
12. | 12 Ireland .5277778 |
13. | 13 Spain .3888889 |
14. | 14 Israel .3888889 |
15. | 15 Hong Kong .8333333 |
|----------------------------------|
16. | 16 New Zealand .5277778 |
17. | 17 Austria .5277778 |
18. | 18 Singapore .6111111 |
19. | 19 Italy .7777778 |
20. | 20 UK .5833333 |
|----------------------------------|
21. | 21 Japan .7777778 |
22. | 22 Belgium .6111111 |
23. | 23 Trinidad .5 |
24. | 24 Netherlands .5277778 |
25. | 25 Finland .4722222 |
|----------------------------------|
26. | 26 Denmark .5277778 |
27. | 27 West Germany .8055556 |
28. | 28 France .0833333 |
29. | 29 Sweden .6666667 |
30. | 30 Norway .6111111 |
|----------------------------------|
31. | 31 Switzerland .5555556 |
32. | 32 Canada .8888889 |
33. | 33 USA .9166667 |
+----------------------------------+
.
. log close
name: <unnamed>
log: Z:\home\pacha\github\advanced-international-trade\first-edition\Chapt
> er-2\sign_rank_1.log
log type: text
closed on: 19 Jun 2024, 15:29:31
----------------------------------------------------------------------------------
. exit
end of do-fileMy code
# Transform ----
trefler <- readRDS(fout)
# Number of country in the dataset
trefler[, `:=`(
c = max(indexc),
f = max(indexf)
)]
# Calculate the world level of Yw, Bw and Vw
trefler[, `:=`(
yww = sum(y),
bww = sum(b)
)]
trefler[, `:=`(
yw = yww / f,
bw = bww / f
)]
trefler[, vfw := sum(v), by = indexf]
# Calculate country share Sc
trefler[, sc := (y - b) / (yw - bw)]
# Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
trefler[, efc := at - (v - sc * vfw)]
# Construct the average epsilon for a given factor
trefler[, ave := sum(efc) / c, by = indexf]
# Construct sigma^2 and the weight
trefler[, sigma2f := sum((efc - ave)^2) / (c - 1), by = indexf]
trefler[, sigmaf := sqrt(sigma2f)]
trefler[, weight := sigmaf * sqrt(sc)]
# Using the weight, convert all the data
trefler[, `:=`(
trat = at / (sigmaf * sqrt(sc)),
athat2 = (v - sc * vfw) / weight
)]
setorder(trefler, country)
# Correlation, should be .28
cor(trefler[, .(trat, athat2)]) trat athat2
trat 1.0000000 0.2822883
athat2 0.2822883 1.0000000
# Sign Test ----
trefler[, .(p = sum(trat * athat2 > 0) / .N), by = .(country, indexc)] country indexc p
<char> <int> <num>
1: Austria 17 0.5555556
2: Bangladesh 1 0.3333333
3: Belgium 22 0.6666667
4: Canada 32 0.5555556
5: Colombia 6 0.3333333
6: Denmark 26 0.4444444
7: Finland 25 0.3333333
8: France 28 0.3333333
9: Greece 11 0.1111111
10: Hong Kong 15 0.6666667
11: Indonesia 3 0.2222222
12: Ireland 12 0.6666667
13: Israel 14 0.6666667
14: Italy 19 0.6666667
15: Japan 21 0.7777778
16: Netherlands 24 0.4444444
17: New Zealand 16 0.4444444
18: Norway 30 0.4444444
19: Pakistan 2 0.3333333
20: Panama 7 0.3333333
21: Portugal 9 0.2222222
22: Singapore 18 0.5555556
23: Spain 13 0.2222222
24: Sri Lanka 4 0.2222222
25: Sweden 29 0.4444444
26: Switzerland 31 0.8888889
27: Thailand 5 0.2222222
28: Trinidad 23 0.6666667
29: UK 20 0.6666667
30: USA 33 0.8888889
31: Uruguay 10 1.0000000
32: West Germany 27 0.5555556
33: Yugoslavia 8 0.5555556
country indexc p
<char> <int> <num>
trefler[, .(p = sum(trat * athat2 > 0) / .N)] p
<num>
1: 0.4983165
# Missing Trade ----
# Checking for the missing trade, should be .032
mt <- trefler[, .(varat = var(trat), varhat2 = var(athat2))]
mt[, varat_varhat2 := varat / varhat2]
mt varat varhat2 varat_varhat2
<num> <num> <num>
1: 1.609439 50.29654 0.031999
# Rank Tests ----
setorder(trefler, indexc, indexf)
trefler_wide <- dcast(
trefler[, .(country, indexc, indexf, trat, athat2)],
country + indexc ~ indexf,
value.var = c("trat", "athat2")
)
ranks <- CJ(x = 1:8, y = 1:9)[x < y]
rank_list <- vector("list", nrow(ranks))
for (k in seq_len(nrow(ranks))) {
x <- ranks$x[k]
y <- ranks$y[k]
rank_list[[k]] <- data.table(
country = trefler_wide$country,
indexc = trefler_wide$indexc,
value = (trefler_wide[[paste0("trat_", x)]] - trefler_wide[[paste0("trat_", y)]]) *
(trefler_wide[[paste0("athat2_", x)]] - trefler_wide[[paste0("athat2_", y)]]) > 0
)
}
trefler_rank <- rbindlist(rank_list)
trefler_rank <- trefler_rank[, .(r1 = sum(value)), by = .(country, indexc)]
trefler_rank[, r2 := r1 / 36]
trefler_rank country indexc r1 r2
<char> <int> <int> <num>
1: Austria 17 19 0.52777778
2: Bangladesh 1 27 0.75000000
3: Belgium 22 22 0.61111111
4: Canada 32 32 0.88888889
5: Colombia 6 29 0.80555556
6: Denmark 26 19 0.52777778
7: Finland 25 17 0.47222222
8: France 28 3 0.08333333
9: Greece 11 17 0.47222222
10: Hong Kong 15 30 0.83333333
11: Indonesia 3 24 0.66666667
12: Ireland 12 19 0.52777778
13: Israel 14 14 0.38888889
14: Italy 19 28 0.77777778
15: Japan 21 28 0.77777778
16: Netherlands 24 19 0.52777778
17: New Zealand 16 19 0.52777778
18: Norway 30 22 0.61111111
19: Pakistan 2 26 0.72222222
20: Panama 7 20 0.55555556
21: Portugal 9 19 0.52777778
22: Singapore 18 22 0.61111111
23: Spain 13 14 0.38888889
24: Sri Lanka 4 15 0.41666667
25: Sweden 29 24 0.66666667
26: Switzerland 31 20 0.55555556
27: Thailand 5 25 0.69444444
28: Trinidad 23 18 0.50000000
29: UK 20 21 0.58333333
30: USA 33 33 0.91666667
31: Uruguay 10 26 0.72222222
32: West Germany 27 29 0.80555556
33: Yugoslavia 8 16 0.44444444
country indexc r1 r2
<char> <int> <int> <num>
mean(trefler_rank$r2)[1] 0.6026936
Extra step: formatting the table
sign_test <- trefler[, .(sign_hov = sum(trat * athat2 > 0) / .N), by = .(country, indexc)]
setorder(sign_test, indexc)
result <- merge(
sign_test[, .(country, sign_hov)],
trefler_rank[, .(country, rank_hov = r2)],
by = "country"
)
all_row <- data.table(
country = "All countries",
sign_hov = trefler[, sum(trat * athat2 > 0) / .N],
rank_hov = mean(trefler_rank$r2)
)
result <- rbindlist(list(result, all_row))
result[, sign_hov := round(sign_hov, 2)]
result[, rank_hov := round(rank_hov, 2)]
kable(result)| country | sign_hov | rank_hov |
|---|---|---|
| Austria | 0.56 | 0.53 |
| Bangladesh | 0.33 | 0.75 |
| Belgium | 0.67 | 0.61 |
| Canada | 0.56 | 0.89 |
| Colombia | 0.33 | 0.81 |
| Denmark | 0.44 | 0.53 |
| Finland | 0.33 | 0.47 |
| France | 0.33 | 0.08 |
| Greece | 0.11 | 0.47 |
| Hong Kong | 0.67 | 0.83 |
| Indonesia | 0.22 | 0.67 |
| Ireland | 0.67 | 0.53 |
| Israel | 0.67 | 0.39 |
| Italy | 0.67 | 0.78 |
| Japan | 0.78 | 0.78 |
| Netherlands | 0.44 | 0.53 |
| New Zealand | 0.44 | 0.53 |
| Norway | 0.44 | 0.61 |
| Pakistan | 0.33 | 0.72 |
| Panama | 0.33 | 0.56 |
| Portugal | 0.22 | 0.53 |
| Singapore | 0.56 | 0.61 |
| Spain | 0.22 | 0.39 |
| Sri Lanka | 0.22 | 0.42 |
| Sweden | 0.44 | 0.67 |
| Switzerland | 0.89 | 0.56 |
| Thailand | 0.22 | 0.69 |
| Trinidad | 0.67 | 0.50 |
| UK | 0.67 | 0.58 |
| USA | 0.89 | 0.92 |
| Uruguay | 1.00 | 0.72 |
| West Germany | 0.56 | 0.81 |
| Yugoslavia | 0.56 | 0.44 |
| All countries | 0.50 | 0.60 |
Exercise 2
Given uniform technological differences across countries, run the program sign_rank_2.do to redo the sign test, rank test, and missing trade. Use the results in sign_rank_2.log to replicate column (3) and (5), given column (6) in Table 2.5.
Feenstra’s code
* This program is to conduct sign test, Rank test and Missing trade test *
* using delta *
capture log close
* log using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\sign_rank_2.log, replace *
log using "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\sign_rank_2.log", replace
set mem 30m
* use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler, clear *
use "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler", clear
* number of country in the dataset *
egen C=max(indexc)
egen F=max(indexf)
* Calculate the world level of Yw, Bw and Vw *
egen Yww=sum(Y)
gen Yw=Yww/F
egen Bww=sum(B)
gen Bw=Bww/F
egen Vfw=sum(V), by(indexf)
egen Vw=sum(delta*V), by(indexf)
* Calculate country share Sc *
gen Sc=(Y-B)/(Yw-Bw)
* Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
gen Efc=delta*AT-(delta*V-Sc*Vw)
* Construct the average epsilon for a given factor *
egen total=sum(Efc),by(indexf)
gen ave=total/C
* Construct sigma^2 and the weight *
egen tot=sum((Efc-ave)^2), by(indexf)
gen sigma2f=tot/(C-1)
codebook sigma2f
gen sigmaf=sqrt(sigma2f)
gen weight=sigmaf*sqrt(Sc)
* Using the weight, convert all the data *
gen trAT=delta*AT/weight
gen AThat2=(delta*V-Sc*Vw)/weight
* Correlation *
corr trAT AThat2
*************
* Sign Test *
*************
sort indexc
by indexc: count if trAT*AThat2>0
count if trAT*AThat2>0
display _result(1)/_N
*****************
* Missing Trade *
*****************
quietly summarize trAT
local varAT=_result(4)
quietly summarize AThat
local varHat=_result(4)
quietly summarize AThat2
local varHat2=_result(4)
display `varAT'/`varHat'
display `varAT'/`varHat2'
*************
* Rank Test *
*************
keep country indexc indexf trAT AThat2
sort indexc indexf
reshape wide trAT AThat2, i(indexc) j(indexf)
local i=1
while `i'<9{
local j=`i'+1
while `j'<=9{
gen rank`i'`j'=((trAT`i'-trAT`j')*(AThat2`i'-AThat2`j')>0)
local j=`j'+1
}
local i=`i'+1
}
keep country indexc rank*
reshape long rank, i(indexc) j(factor)
egen r1=sum(rank), by(indexc)
gen r2=r1/36
collapse r2,by(indexc country)
sum r2
list
log close
exitOutput:
. * This program is to conduct sign test, Rank test and Missing trade test *
. * using delta *
.
. capture log close
. log using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapte
> r-2\sign_rank_2.log, replace
(note: file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapte
> r-2\sign_rank_2.log not found)
----------------------------------------------------------------------------------
name: <unnamed>
log: Z:\home\pacha\github\advanced-international-trade\first-edition\Chapt
> er-2\sign_rank_2.log
log type: text
opened on: 19 Jun 2024, 15:30:38
.
. set mem 30m
Current memory allocation
current memory usage
settable value description (1M = 1024k)
--------------------------------------------------------------------
set maxvar 5000 max. variables allowed 1.909M
set memory 30M max. data space 30.000M
set matsize 400 max. RHS vars in models 1.254M
-----------
33.163M
.
. use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\tr
> efler, clear
.
. * number of country in the dataset *
. egen C=max(indexc)
. egen F=max(indexf)
.
. * Calculate the world level of Yw, Bw and Vw *
. egen Yww=sum(Y)
. gen Yw=Yww/F
. egen Bww=sum(B)
. gen Bw=Bww/F
. egen Vfw=sum(V), by(indexf)
. egen Vw=sum(delta*V), by(indexf)
.
. * Calculate country share Sc *
. gen Sc=(Y-B)/(Yw-Bw)
.
. * Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
.
. gen Efc=delta*AT-(delta*V-Sc*Vw)
.
. * Construct the average epsilon for a given factor *
. egen total=sum(Efc),by(indexf)
. gen ave=total/C
.
. * Construct sigma^2 and the weight *
.
. egen tot=sum((Efc-ave)^2), by(indexf)
. gen sigma2f=tot/(C-1)
.
. codebook sigma2f
----------------------------------------------------------------------------------
sigma2f (unlabeled)
----------------------------------------------------------------------------------
type: numeric (float)
range: [51579730,3.418e+21] units: 10
unique values: 9 missing .: 0/297
tabulation: Freq. Value
33 51579728
33 3.926e+08
33 6.172e+10
33 1.211e+11
33 1.883e+11
33 2.320e+11
33 2.662e+11
33 2.113e+12
33 3.418e+21
. gen sigmaf=sqrt(sigma2f)
. gen weight=sigmaf*sqrt(Sc)
.
. * Using the weight, convert all the data *
.
. gen trAT=delta*AT/weight
. gen AThat2=(delta*V-Sc*Vw)/weight
.
. * Correlation *
.
. corr trAT AThat2
(obs=297)
| trAT AThat2
-------------+------------------
trAT | 1.0000
AThat2 | 0.4100 1.0000
.
. *************
. * Sign Test *
. *************
.
. sort indexc
. by indexc: count if trAT*AThat2>0
----------------------------------------------------------------------------------
-> indexc = 1
7
----------------------------------------------------------------------------------
-> indexc = 2
6
----------------------------------------------------------------------------------
-> indexc = 3
6
----------------------------------------------------------------------------------
-> indexc = 4
5
----------------------------------------------------------------------------------
-> indexc = 5
6
----------------------------------------------------------------------------------
-> indexc = 6
8
----------------------------------------------------------------------------------
-> indexc = 7
7
----------------------------------------------------------------------------------
-> indexc = 8
6
----------------------------------------------------------------------------------
-> indexc = 9
7
----------------------------------------------------------------------------------
-> indexc = 10
1
----------------------------------------------------------------------------------
-> indexc = 11
5
----------------------------------------------------------------------------------
-> indexc = 12
4
----------------------------------------------------------------------------------
-> indexc = 13
7
----------------------------------------------------------------------------------
-> indexc = 14
8
----------------------------------------------------------------------------------
-> indexc = 15
8
----------------------------------------------------------------------------------
-> indexc = 16
2
----------------------------------------------------------------------------------
-> indexc = 17
6
----------------------------------------------------------------------------------
-> indexc = 18
9
----------------------------------------------------------------------------------
-> indexc = 19
3
----------------------------------------------------------------------------------
-> indexc = 20
7
----------------------------------------------------------------------------------
-> indexc = 21
6
----------------------------------------------------------------------------------
-> indexc = 22
7
----------------------------------------------------------------------------------
-> indexc = 23
9
----------------------------------------------------------------------------------
-> indexc = 24
4
----------------------------------------------------------------------------------
-> indexc = 25
4
----------------------------------------------------------------------------------
-> indexc = 26
4
----------------------------------------------------------------------------------
-> indexc = 27
6
----------------------------------------------------------------------------------
-> indexc = 28
3
----------------------------------------------------------------------------------
-> indexc = 29
4
----------------------------------------------------------------------------------
-> indexc = 30
4
----------------------------------------------------------------------------------
-> indexc = 31
8
----------------------------------------------------------------------------------
-> indexc = 32
2
----------------------------------------------------------------------------------
-> indexc = 33
5
.
. count if trAT*AThat2>0
184
. display _result(1)/_N
.61952862
.
. *****************
. * Missing Trade *
. *****************
.
. quietly summarize trAT
. local varAT=_result(4)
. quietly summarize AThat
. local varHat=_result(4)
. quietly summarize AThat2
. local varHat2=_result(4)
. display `varAT'/`varHat'
.07061819
. display `varAT'/`varHat2'
.07061819
.
. *************
. * Rank Test *
. *************
.
. keep country indexc indexf trAT AThat2
.
. sort indexc indexf
. reshape wide trAT AThat2, i(indexc) j(indexf)
(note: j = 1 2 3 4 5 6 7 8 9)
Data long -> wide
-----------------------------------------------------------------------------
Number of obs. 297 -> 33
Number of variables 5 -> 20
j variable (9 values) indexf -> (dropped)
xij variables:
trAT -> trAT1 trAT2 ... trAT9
AThat2 -> AThat21 AThat22 ... AThat29
-----------------------------------------------------------------------------
.
. local i=1
. while `i'<9{
2. local j=`i'+1
3. while `j'<=9{
4. gen rank`i'`j'=((trAT`i'-trAT`j')*(AThat2`i'-AThat2`j')>0)
5. local j=`j'+1
6. }
7. local i=`i'+1
8. }
.
. keep country indexc rank*
. reshape long rank, i(indexc) j(factor)
(note: j = 12 13 14 15 16 17 18 19 23 24 25 26 27 28 29 34 35 36 37 38 39 45 46 47
> 48 49 56 57 58 59 67 68 69 78 79 89)
Data wide -> long
-----------------------------------------------------------------------------
Number of obs. 33 -> 1188
Number of variables 38 -> 4
j variable (36 values) -> factor
xij variables:
rank12 rank13 ... rank89 -> rank
-----------------------------------------------------------------------------
. egen r1=sum(rank), by(indexc)
. gen r2=r1/36
. collapse r2,by(indexc country)
. sum r2
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
r2 | 33 .6153199 .1508913 .1944444 .8611111
. list
+----------------------------------+
| indexc country r2 |
|----------------------------------|
1. | 1 Bangladesh .7777778 |
2. | 2 Pakistan .7777778 |
3. | 3 Indonesia .6666667 |
4. | 4 Sri Lanka .6666667 |
5. | 5 Thailand .7222222 |
|----------------------------------|
6. | 6 Colombia .8611111 |
7. | 7 Panama .7777778 |
8. | 8 Yugoslavia .6111111 |
9. | 9 Portugal .5833333 |
10. | 10 Uruguay .5277778 |
|----------------------------------|
11. | 11 Greece .75 |
12. | 12 Ireland .3888889 |
13. | 13 Spain .6944444 |
14. | 14 Israel .6944444 |
15. | 15 Hong Kong .7222222 |
|----------------------------------|
16. | 16 New Zealand .6111111 |
17. | 17 Austria .4444444 |
18. | 18 Singapore .6111111 |
19. | 19 Italy .6666667 |
20. | 20 UK .6388889 |
|----------------------------------|
21. | 21 Japan .7777778 |
22. | 22 Belgium .5277778 |
23. | 23 Trinidad .5277778 |
24. | 24 Netherlands .4722222 |
25. | 25 Finland .5 |
|----------------------------------|
26. | 26 Denmark .4166667 |
27. | 27 West Germany .7777778 |
28. | 28 France .1944444 |
29. | 29 Sweden .3611111 |
30. | 30 Norway .7777778 |
|----------------------------------|
31. | 31 Switzerland .5 |
32. | 32 Canada .5555556 |
33. | 33 USA .7222222 |
+----------------------------------+
.
. log close
name: <unnamed>
log: Z:\home\pacha\github\advanced-international-trade\first-edition\Chapt
> er-2\sign_rank_2.log
log type: text
closed on: 19 Jun 2024, 15:30:44
----------------------------------------------------------------------------------
. exit
end of do-fileMy code
# Transform ----
trefler <- readRDS(fout)
# Number of country in the dataset
trefler[, `:=`(
c = max(indexc),
f = max(indexf)
)]
# Calculate the world level of Yw, Bw and Vw
trefler[, `:=`(
yww = sum(y),
bww = sum(b)
)]
trefler[, `:=`(
yw = yww / f,
bw = bww / f
)]
trefler[, `:=`(
vfw = sum(v),
vw = sum(delta * v)
), by = indexf]
# Calculate country share Sc
trefler[, sc := (y - b) / (yw - bw)]
# Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
trefler[, efc := delta * at - (delta * v - sc * vw)]
# Construct the average epsilon for a given factor
trefler[, ave := sum(efc) / c, by = indexf]
# Construct sigma^2 and the weight
trefler[, sigma2f := sum((efc - ave)^2) / (c - 1), by = indexf]
trefler[, sigmaf := sqrt(sigma2f)]
trefler[, weight := sigmaf * sqrt(sc)]
# Using the weight, convert all the data
trefler[, `:=`(
trat = delta * at / weight,
athat2 = (delta * v - sc * vw) / weight
)]
# Correlation should be .41
cor(trefler[, .(trat, athat2)]) trat athat2
trat 1.0000000 0.4099617
athat2 0.4099617 1.0000000
# Sign Test ----
trefler[, .(p = sum(trat * athat2 > 0) / .N), by = .(country, indexc)] country indexc p
<char> <int> <num>
1: Austria 17 0.6666667
2: Bangladesh 1 0.7777778
3: Belgium 22 0.7777778
4: Canada 32 0.2222222
5: Colombia 6 0.8888889
6: Denmark 26 0.4444444
7: Finland 25 0.4444444
8: France 28 0.3333333
9: Greece 11 0.5555556
10: Hong Kong 15 0.8888889
11: Indonesia 3 0.6666667
12: Ireland 12 0.4444444
13: Israel 14 0.8888889
14: Italy 19 0.3333333
15: Japan 21 0.6666667
16: Netherlands 24 0.4444444
17: New Zealand 16 0.2222222
18: Norway 30 0.4444444
19: Pakistan 2 0.6666667
20: Panama 7 0.7777778
21: Portugal 9 0.7777778
22: Singapore 18 1.0000000
23: Spain 13 0.7777778
24: Sri Lanka 4 0.5555556
25: Sweden 29 0.4444444
26: Switzerland 31 0.8888889
27: Thailand 5 0.6666667
28: Trinidad 23 1.0000000
29: UK 20 0.7777778
30: USA 33 0.5555556
31: Uruguay 10 0.1111111
32: West Germany 27 0.6666667
33: Yugoslavia 8 0.6666667
country indexc p
<char> <int> <num>
trefler[, .(p = sum(trat * athat2 > 0) / .N)] p
<num>
1: 0.6195286
# Missing Trade ----
# Checking for the missing trade, should be .07
mt <- trefler[, .(varat = var(trat), varhat2 = var(athat2))]
mt[, varat_varhat2 := varat / varhat2]
mt varat varhat2 varat_varhat2
<num> <num> <num>
1: 1.339235 18.96444 0.07061819
# Rank Tests ----
setorder(trefler, indexc, indexf)
trefler_wide <- dcast(
trefler[, .(country, indexc, indexf, trat, athat2)],
country + indexc ~ indexf,
value.var = c("trat", "athat2")
)
ranks <- CJ(x = 1:8, y = 1:9)[x < y]
rank_list <- vector("list", nrow(ranks))
for (k in seq_len(nrow(ranks))) {
x <- ranks$x[k]
y <- ranks$y[k]
rank_list[[k]] <- data.table(
country = trefler_wide$country,
indexc = trefler_wide$indexc,
value = (trefler_wide[[paste0("trat_", x)]] - trefler_wide[[paste0("trat_", y)]]) *
(trefler_wide[[paste0("athat2_", x)]] - trefler_wide[[paste0("athat2_", y)]]) > 0
)
}
trefler_rank <- rbindlist(rank_list)
trefler_rank <- trefler_rank[, .(r1 = sum(value)), by = .(country, indexc)]
trefler_rank[, r2 := r1 / 36]
trefler_rank country indexc r1 r2
<char> <int> <int> <num>
1: Austria 17 16 0.4444444
2: Bangladesh 1 28 0.7777778
3: Belgium 22 19 0.5277778
4: Canada 32 20 0.5555556
5: Colombia 6 31 0.8611111
6: Denmark 26 15 0.4166667
7: Finland 25 18 0.5000000
8: France 28 7 0.1944444
9: Greece 11 27 0.7500000
10: Hong Kong 15 26 0.7222222
11: Indonesia 3 24 0.6666667
12: Ireland 12 14 0.3888889
13: Israel 14 25 0.6944444
14: Italy 19 24 0.6666667
15: Japan 21 28 0.7777778
16: Netherlands 24 17 0.4722222
17: New Zealand 16 22 0.6111111
18: Norway 30 28 0.7777778
19: Pakistan 2 28 0.7777778
20: Panama 7 28 0.7777778
21: Portugal 9 21 0.5833333
22: Singapore 18 22 0.6111111
23: Spain 13 25 0.6944444
24: Sri Lanka 4 24 0.6666667
25: Sweden 29 13 0.3611111
26: Switzerland 31 18 0.5000000
27: Thailand 5 26 0.7222222
28: Trinidad 23 19 0.5277778
29: UK 20 23 0.6388889
30: USA 33 26 0.7222222
31: Uruguay 10 19 0.5277778
32: West Germany 27 28 0.7777778
33: Yugoslavia 8 22 0.6111111
country indexc r1 r2
<char> <int> <int> <num>
mean(trefler_rank$r2)[1] 0.6153199
Extra step: formatting the table
sign_test <- trefler[, .(sign_hov = sum(trat * athat2 > 0) / .N), by = .(country, indexc)]
setorder(sign_test, indexc)
result <- merge(
sign_test[, .(country, sign_hov)],
trefler_rank[, .(country, rank_hov = r2)],
by = "country"
)
all_row <- data.table(
country = "All countries",
sign_hov = trefler[, sum(trat * athat2 > 0) / .N],
rank_hov = mean(trefler_rank$r2)
)
result <- rbindlist(list(result, all_row))
result[, sign_hov := round(sign_hov, 2)]
result[, rank_hov := round(rank_hov, 2)]
kable(result)| country | sign_hov | rank_hov |
|---|---|---|
| Austria | 0.67 | 0.44 |
| Bangladesh | 0.78 | 0.78 |
| Belgium | 0.78 | 0.53 |
| Canada | 0.22 | 0.56 |
| Colombia | 0.89 | 0.86 |
| Denmark | 0.44 | 0.42 |
| Finland | 0.44 | 0.50 |
| France | 0.33 | 0.19 |
| Greece | 0.56 | 0.75 |
| Hong Kong | 0.89 | 0.72 |
| Indonesia | 0.67 | 0.67 |
| Ireland | 0.44 | 0.39 |
| Israel | 0.89 | 0.69 |
| Italy | 0.33 | 0.67 |
| Japan | 0.67 | 0.78 |
| Netherlands | 0.44 | 0.47 |
| New Zealand | 0.22 | 0.61 |
| Norway | 0.44 | 0.78 |
| Pakistan | 0.67 | 0.78 |
| Panama | 0.78 | 0.78 |
| Portugal | 0.78 | 0.58 |
| Singapore | 1.00 | 0.61 |
| Spain | 0.78 | 0.69 |
| Sri Lanka | 0.56 | 0.67 |
| Sweden | 0.44 | 0.36 |
| Switzerland | 0.89 | 0.50 |
| Thailand | 0.67 | 0.72 |
| Trinidad | 1.00 | 0.53 |
| UK | 0.78 | 0.64 |
| USA | 0.56 | 0.72 |
| Uruguay | 0.11 | 0.53 |
| West Germany | 0.67 | 0.78 |
| Yugoslavia | 0.67 | 0.61 |
| All countries | 0.62 | 0.62 |
Notes
The Stata code that I run returns the same values as R. However:
- Austria should have values 0.67 and 0.47. I got 0.67 and 0.44.
- France should have values 0.33 and 0.22. I got 0.33 and 0.19.
- Switzerland should have values 0.89 and 0.47. I got 0.89 and 0.50.
Exercise 3
Allowing all factors in each country to have different productivities, now run the program compute_pi.do to compute factor productivities \(\pi_k^i\) as Trefler (1993). Note that there are 9 factors in the original data set, but these are now aggregated to just 4 factors, which are labor (endowment 1), capital (endowment 2), cropland (endowment 3) and pasture (endowment 4). Using the results in pi_.log or alternatively in the data files pi_1.dta, pi_2.dta, pi_3.dta, pi_4.dta to answer the following:
- Which factor has the most negative productivities estimated?
- What is the correlation between the estimated labor productivity and the productivities of other factors? What is the correlation between each factor productivity and GDP per-capita (which you can find in the file
trefler.dta)?
Feenstra’s code
* This program is to compute pai, the factor productivity *
capture log close
* log using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi.log,replace *
log using "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi.log", replace
set mem 30m
* use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler, clear *
use "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\trefler", clear
* number of country in the dataset *
egen C=max(indexc)
egen F=max(indexf)
* Calculate the world level of Yw, Bw and Vw *
egen Yww=sum(Y)
gen Yw=Yww/F
egen Bww=sum(B)
gen Bw=Bww/F
egen Vfw=sum(V), by(indexf)
* Calculate country share Sc *
gen Sc=(Y-B)/(Yw-Bw)
* Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
gen Efc=AT-(V-Sc*Vfw)
* Construct the average epsilon for a given factor *
egen total=sum(Efc),by(indexf)
gen ave=total/C
* Construct sigma^2 and the weight *
egen tot=sum((Efc-ave)^2), by(indexf)
gen sigma2f=tot/(C-1)
codebook sigma2f
gen sigmaf=sqrt(sigma2f)
gen weight=sigmaf*sqrt(Sc)
* Using the weight, convert all the data *
gen trAT=AT/(sigmaf*sqrt(Sc))
gen trV=V/(sigmaf*sqrt(Sc))
gen trY=Y/sqrt(Sc)
gen trB=B/sqrt(Sc)
gen trVfw=Vfw/sigmaf
gen AThat=trV-Sc*trVfw
gen AThat2=(V-Sc*Vfw)/weight
* Construct Aggregate Labor Endowment *
preserve
keep if indexf==7 |indexf==8 | indexf==9
gen en=2
replace en=3 if indexf==8
replace en=4 if indexf==9
keep country factor AT V en indexc Sc
* save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_189,replace *
save "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_189", replace
restore
preserve
drop if indexf==7 |indexf==8 | indexf==9
egen v_l=sum(V), by(country)
egen AT_l=sum(AT), by(country)
drop V AT factor
rename v_l V
rename AT_l AT
gen en=1
collapse (mean)AT V en indexc Sc, by(country)
gen str5 factor="Labor"
* save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_L,replace *
save "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_L", replace
restore
* use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_189,clear *
use "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_189", clear
* append using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_L *
append using "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\indexf_L"
sort indexc en
* save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi,replace *
save "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi", replace
************************************
* Compute Pi: factor productivity *
************************************
* use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi, clear *
use "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi", clear
gen p_0=1
gen p_1=1
local i=1
while `i'<=4{
preserve
keep if en==`i'
local j=1
while `j'<51{
replace p_0=p_1
gen Vp=p_0*V
egen Vpw=sum(Vp)
replace p_1=(AT+Sc*Vpw)/V
replace p_1=1 if country=="USA"
drop Vp Vpw
local j=`j'+1
}
keep en country indexc p_1
* save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_`i',replace *
save "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_`i'", replace
restore
local i=`i'+1
}
local i=1
while `i'<=4{
* use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_`i',clear *
use "Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_`i'", clear
sort en indexc
by en: list en indexc country p_1
local i=`i'+1
}
log close
exitOutput:
. * This program is to compute pai, the factor productivity *
.
. capture log close
. log using Z:\home\pacha\github\advanced-international-trade\first-edition\Chapte
> r-2\pi.log,replace
----------------------------------------------------------------------------------
name: <unnamed>
log: Z:\home\pacha\github\advanced-international-trade\first-edition\Chapt
> er-2\pi.log
log type: text
opened on: 19 Jun 2024, 15:32:25
.
. set mem 30m
Current memory allocation
current memory usage
settable value description (1M = 1024k)
--------------------------------------------------------------------
set maxvar 5000 max. variables allowed 1.909M
set memory 30M max. data space 30.000M
set matsize 400 max. RHS vars in models 1.254M
-----------
33.163M
.
. use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\tr
> efler, clear
.
. * number of country in the dataset *
. egen C=max(indexc)
. egen F=max(indexf)
.
. * Calculate the world level of Yw, Bw and Vw *
. egen Yww=sum(Y)
. gen Yw=Yww/F
. egen Bww=sum(B)
. gen Bw=Bww/F
. egen Vfw=sum(V), by(indexf)
.
. * Calculate country share Sc *
. gen Sc=(Y-B)/(Yw-Bw)
.
. * Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
. gen Efc=AT-(V-Sc*Vfw)
.
. * Construct the average epsilon for a given factor *
. egen total=sum(Efc),by(indexf)
. gen ave=total/C
.
. * Construct sigma^2 and the weight *
.
. egen tot=sum((Efc-ave)^2), by(indexf)
. gen sigma2f=tot/(C-1)
.
. codebook sigma2f
----------------------------------------------------------------------------------
sigma2f (unlabeled)
----------------------------------------------------------------------------------
type: numeric (float)
range: [98198290,7.112e+22] units: 10
unique values: 9 missing .: 0/297
tabulation: Freq. Value
33 98198288
33 2.419e+08
33 7.455e+11
33 9.191e+11
33 1.210e+12
33 4.383e+12
33 2.106e+13
33 1.009e+14
33 7.112e+22
. gen sigmaf=sqrt(sigma2f)
. gen weight=sigmaf*sqrt(Sc)
.
. * Using the weight, convert all the data *
.
. gen trAT=AT/(sigmaf*sqrt(Sc))
. gen trV=V/(sigmaf*sqrt(Sc))
. gen trY=Y/sqrt(Sc)
. gen trB=B/sqrt(Sc)
. gen trVfw=Vfw/sigmaf
.
. gen AThat=trV-Sc*trVfw
. gen AThat2=(V-Sc*Vfw)/weight
.
. * Construct Aggregate Labor Endowment *
.
. preserve
. keep if indexf==7 |indexf==8 | indexf==9
(198 observations deleted)
. gen en=2
. replace en=3 if indexf==8
(33 real changes made)
. replace en=4 if indexf==9
(33 real changes made)
. keep country factor AT V en indexc Sc
.
. save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\i
> ndexf_189,replace
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\ind
> exf_189.dta saved
.
. restore
.
. preserve
. drop if indexf==7 |indexf==8 | indexf==9
(99 observations deleted)
.
. egen v_l=sum(V), by(country)
. egen AT_l=sum(AT), by(country)
.
. drop V AT factor
. rename v_l V
. rename AT_l AT
. gen en=1
. collapse (mean)AT V en indexc Sc, by(country)
. gen str5 factor="Labor"
. save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\i
> ndexf_L,replace
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\ind
> exf_L.dta saved
.
. restore
.
. use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\in
> dexf_189,clear
. append using Z:\home\pacha\github\advanced-international-trade\first-edition\Cha
> pter-2\indexf_L
indexc was byte now float
. sort indexc en
. save Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\p
> i,replace
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi.
> dta saved
.
. ************************************
. * Compute Pi: factor productivity *
. ************************************
.
. use Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi
> , clear
.
. gen p_0=1
. gen p_1=1
.
. local i=1
. while `i'<=4{
2. preserve
3. keep if en==`i'
4. local j=1
5. while `j'<51{
6. replace p_0=p_1
7. gen Vp=p_0*V
8. egen Vpw=sum(Vp)
9. replace p_1=(AT+Sc*Vpw)/V
10. replace p_1=1 if country=="USA"
11. drop Vp Vpw
12. local j=`j'+1
13. }
14. keep en country indexc p_1
15. save Z:\home\pacha\github\advanced-international-trade\first-edition\
> Chapter-2\pi_`i',replace
16. restore
17. local i=`i'+1
18. }
(99 observations deleted)
(0 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(30 real changes made)
(1 real change made)
(29 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_
> 1.dta saved
(99 observations deleted)
(0 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_
> 2.dta saved
(99 observations deleted)
(0 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(32 real changes made)
(1 real change made)
(31 real changes made)
(31 real changes made)
(1 real change made)
(30 real changes made)
(29 real changes made)
(1 real change made)
(28 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_
> 3.dta saved
(99 observations deleted)
(0 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(33 real changes made)
(1 real change made)
(32 real changes made)
(28 real changes made)
(1 real change made)
(27 real changes made)
(31 real changes made)
(1 real change made)
(30 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(1 real change made)
(1 real change made)
file Z:\home\pacha\github\advanced-international-trade\first-edition\Chapter-2\pi_
> 4.dta saved
.
. local i=1
. while `i'<=4{
2. use Z:\home\pacha\github\advanced-international-trade\first-edition\C
> hapter-2\pi_`i',clear
3. sort en indexc
4. by en: list en indexc country p_1
5. local i=`i'+1
6. }
----------------------------------------------------------------------------------
-> en = 1
+---------------------------------------+
| en indexc country p_1 |
|---------------------------------------|
1. | 1 1 Bangladesh .0165219 |
2. | 1 2 Pakistan .0394124 |
3. | 1 3 Indonesia .0432824 |
4. | 1 4 Sri Lanka .0344432 |
5. | 1 5 Thailand .048902 |
|---------------------------------------|
6. | 1 6 Colombia .1940833 |
7. | 1 7 Panama .2279774 |
8. | 1 8 Yugoslavia .1997569 |
9. | 1 9 Portugal .1759864 |
10. | 1 10 Uruguay .2029693 |
|---------------------------------------|
11. | 1 11 Greece .3140718 |
12. | 1 12 Ireland .4166084 |
13. | 1 13 Spain .4172725 |
14. | 1 14 Israel .6131932 |
15. | 1 15 Hong Kong .3781684 |
|---------------------------------------|
16. | 1 16 New Zealand .5850298 |
17. | 1 17 Austria .5694186 |
18. | 1 18 Singapore .4873306 |
19. | 1 19 Italy .5907437 |
20. | 1 20 UK .6332356 |
|---------------------------------------|
21. | 1 21 Japan .604921 |
22. | 1 22 Belgium .7233988 |
23. | 1 23 Trinidad .448344 |
24. | 1 24 Netherlands .7933354 |
25. | 1 25 Finland .6969619 |
|---------------------------------------|
26. | 1 26 Denmark .7061784 |
27. | 1 27 West Germany .7691833 |
28. | 1 28 France .735665 |
29. | 1 29 Sweden .7270576 |
30. | 1 30 Norway .7816517 |
|---------------------------------------|
31. | 1 31 Switzerland .9317446 |
32. | 1 32 Canada .7799865 |
33. | 1 33 USA 1 |
+---------------------------------------+
----------------------------------------------------------------------------------
-> en = 2
+---------------------------------------+
| en indexc country p_1 |
|---------------------------------------|
1. | 2 1 Bangladesh .9119021 |
2. | 2 2 Pakistan .4867497 |
3. | 2 3 Indonesia .250653 |
4. | 2 4 Sri Lanka .1259789 |
5. | 2 5 Thailand .3929541 |
|---------------------------------------|
6. | 2 6 Colombia .4856291 |
7. | 2 7 Panama .3224079 |
8. | 2 8 Yugoslavia .2985477 |
9. | 2 9 Portugal .297107 |
10. | 2 10 Uruguay .4060566 |
|---------------------------------------|
11. | 2 11 Greece .4401574 |
12. | 2 12 Ireland .4783922 |
13. | 2 13 Spain .519489 |
14. | 2 14 Israel .5049116 |
15. | 2 15 Hong Kong .5150965 |
|---------------------------------------|
16. | 2 16 New Zealand .6197254 |
17. | 2 17 Austria .542198 |
18. | 2 18 Singapore .3209652 |
19. | 2 19 Italy .5122213 |
20. | 2 20 UK .8159872 |
|---------------------------------------|
21. | 2 21 Japan .6502131 |
22. | 2 22 Belgium .6457499 |
23. | 2 23 Trinidad .4193396 |
24. | 2 24 Netherlands .7513015 |
25. | 2 25 Finland .6453199 |
|---------------------------------------|
26. | 2 26 Denmark .703564 |
27. | 2 27 West Germany .6629313 |
28. | 2 28 France .6150761 |
29. | 2 29 Sweden .9445322 |
30. | 2 30 Norway .6199874 |
|---------------------------------------|
31. | 2 31 Switzerland .6079721 |
32. | 2 32 Canada .7359194 |
33. | 2 33 USA 1 |
+---------------------------------------+
----------------------------------------------------------------------------------
-> en = 3
+----------------------------------------+
| en indexc country p_1 |
|----------------------------------------|
1. | 3 1 Bangladesh .0230836 |
2. | 3 2 Pakistan .0975686 |
3. | 3 3 Indonesia .1641388 |
4. | 3 4 Sri Lanka .2300839 |
5. | 3 5 Thailand .3002517 |
|----------------------------------------|
6. | 3 6 Colombia .5963939 |
7. | 3 7 Panama .5834956 |
8. | 3 8 Yugoslavia .3189657 |
9. | 3 9 Portugal -.383313 |
10. | 3 10 Uruguay .5709916 |
|----------------------------------------|
11. | 3 11 Greece .6072472 |
12. | 3 12 Ireland 1.480371 |
13. | 3 13 Spain .2365766 |
14. | 3 14 Israel 2.517195 |
15. | 3 15 Hong Kong -229.073 |
|----------------------------------------|
16. | 3 16 New Zealand 7.520329 |
17. | 3 17 Austria 1.159659 |
18. | 3 18 Singapore -25.49224 |
19. | 3 19 Italy .6419317 |
20. | 3 20 UK 1.47654 |
|----------------------------------------|
21. | 3 21 Japan 4.292305 |
22. | 3 22 Belgium .4575562 |
23. | 3 23 Trinidad -.904206 |
24. | 3 24 Netherlands 9.091455 |
25. | 3 25 Finland .67896 |
|----------------------------------------|
26. | 3 26 Denmark 1.759899 |
27. | 3 27 West Germany 1.054174 |
28. | 3 28 France 1.558952 |
29. | 3 29 Sweden .907351 |
30. | 3 30 Norway 1.812922 |
|----------------------------------------|
31. | 3 31 Switzerland 3.74253 |
32. | 3 32 Canada .4738446 |
33. | 3 33 USA 1 |
+----------------------------------------+
----------------------------------------------------------------------------------
-> en = 4
+----------------------------------------+
| en indexc country p_1 |
|----------------------------------------|
1. | 4 1 Bangladesh 1.256177 |
2. | 4 2 Pakistan .4731916 |
3. | 4 3 Indonesia .4576648 |
4. | 4 4 Sri Lanka .7949094 |
5. | 4 5 Thailand 16.93923 |
|----------------------------------------|
6. | 4 6 Colombia .1271541 |
7. | 4 7 Panama .2973391 |
8. | 4 8 Yugoslavia .6397428 |
9. | 4 9 Portugal 1.639775 |
10. | 4 10 Uruguay .0984165 |
|----------------------------------------|
11. | 4 11 Greece .5059133 |
12. | 4 12 Ireland .6129137 |
13. | 4 13 Spain 1.017669 |
14. | 4 14 Israel 2.15672 |
15. | 4 15 Hong Kong -879.5381 |
|----------------------------------------|
16. | 4 16 New Zealand .3673215 |
17. | 4 17 Austria 1.975304 |
18. | 4 18 Singapore 795.1004 |
19. | 4 19 Italy 3.145272 |
20. | 4 20 UK 2.242249 |
|----------------------------------------|
21. | 4 21 Japan 100.5984 |
22. | 4 22 Belgium 6.886858 |
23. | 4 23 Trinidad 4.62197 |
24. | 4 24 Netherlands 13.09784 |
25. | 4 25 Finland 22.29664 |
|----------------------------------------|
26. | 4 26 Denmark 28.72834 |
27. | 4 27 West Germany 6.864776 |
28. | 4 28 France 3.166397 |
29. | 4 29 Sweden 7.64686 |
30. | 4 30 Norway 34.59857 |
|----------------------------------------|
31. | 4 31 Switzerland 3.335021 |
32. | 4 32 Canada .9541135 |
33. | 4 33 USA 1 |
+----------------------------------------+
.
. log close
name: <unnamed>
log: Z:\home\pacha\github\advanced-international-trade\first-edition\Chapt
> er-2\pi.log
log type: text
closed on: 19 Jun 2024, 15:32:49
----------------------------------------------------------------------------------
.
. exit
end of do-fileMy code
trefler <- readRDS(fout)
# Number of country in the dataset
trefler[, `:=`(
c = max(indexc),
f = max(indexf)
)]
# Calculate the world level of Yw, Bw and Vw
trefler[, `:=`(
yww = sum(y),
bww = sum(b)
)]
trefler[, `:=`(
yw = yww / f,
bw = bww / f
)]
trefler[, `:=`(
vfw = sum(v),
vw = sum(delta * v)
), by = indexf]
# Calculate country share Sc
trefler[, sc := (y - b) / (yw - bw)]
# Calculate epsilon(fc) and sigma^2(f) according to eq.2 in Trefler (1995)
trefler[, efc := delta * at - (delta * v - sc * vw)]
# Construct the average epsilon for a given factor
trefler[, ave := sum(efc) / c, by = indexf]
# Construct sigma^2 and the weight
trefler[, sigma2f := sum((efc - ave)^2) / (c - 1), by = indexf]
trefler[, sigmaf := sqrt(sigma2f)]
trefler[, weight := sigmaf * sqrt(sc)]
# Using the weight, convert all the data
trefler[, `:=`(
trat = delta * at / weight,
athat2 = (delta * v - sc * vw) / weight
)]
# Construct Aggregate Labor Endowment
non_labor <- c("capital", "cropland", "pasture")
trefler2 <- trefler[factor %in% non_labor]
trefler2[, en := fcase(factor == "capital", 2L, factor == "cropland", 3L, factor == "pasture", 4L)]
trefler2 <- trefler2[, .(country, factor, at, v, en, indexc, sc)]
trefler3_labor <- trefler[!(factor %in% non_labor),
.(v = sum(v), at = sum(at), sc = mean(sc), indexc = mean(indexc)),
by = country
]
trefler3_labor[, en := 1L]
trefler3_labor[, factor := "Labor"]
trefler3 <- rbindlist(list(trefler2, trefler3_labor), use.names = TRUE)
setorder(trefler3, indexc, en)
# Compute Pi: factor productivity
pi_list <- vector("list", 4)
for (i in 1:4) {
d <- trefler3[en == i]
d[, p0 := 1]
d[, p1 := 1]
for (j in seq_len(50)) {
d[, p0 := p1]
d[, vpw := sum(p0 * v)]
d[, p1 := (at + sc * vpw) / v]
d[country == "USA", p1 := 1]
d[, vpw := NULL]
}
pi_list[[i]] <- d[, .(country, indexc, en, p1)]
}
trefler4 <- rbindlist(pi_list)Extra step: formatting the tables
setorder(trefler4, country, en)
kable(trefler4)| country | indexc | en | p1 |
|---|---|---|---|
| Austria | 17 | 1 | 0.5694186 |
| Austria | 17 | 2 | 0.5421980 |
| Austria | 17 | 3 | 1.1596592 |
| Austria | 17 | 4 | 1.9753040 |
| Bangladesh | 1 | 1 | 0.0165219 |
| Bangladesh | 1 | 2 | 0.9119021 |
| Bangladesh | 1 | 3 | 0.0230836 |
| Bangladesh | 1 | 4 | 1.2561775 |
| Belgium | 22 | 1 | 0.7233988 |
| Belgium | 22 | 2 | 0.6457500 |
| Belgium | 22 | 3 | 0.4575561 |
| Belgium | 22 | 4 | 6.8868596 |
| Canada | 32 | 1 | 0.7799865 |
| Canada | 32 | 2 | 0.7359194 |
| Canada | 32 | 3 | 0.4738445 |
| Canada | 32 | 4 | 0.9541137 |
| Colombia | 6 | 1 | 0.1940833 |
| Colombia | 6 | 2 | 0.4856291 |
| Colombia | 6 | 3 | 0.5963939 |
| Colombia | 6 | 4 | 0.1271541 |
| Denmark | 26 | 1 | 0.7061784 |
| Denmark | 26 | 2 | 0.7035640 |
| Denmark | 26 | 3 | 1.7598990 |
| Denmark | 26 | 4 | 28.7283398 |
| Finland | 25 | 1 | 0.6969619 |
| Finland | 25 | 2 | 0.6453199 |
| Finland | 25 | 3 | 0.6789600 |
| Finland | 25 | 4 | 22.2966445 |
| France | 28 | 1 | 0.7356650 |
| France | 28 | 2 | 0.6150762 |
| France | 28 | 3 | 1.5589519 |
| France | 28 | 4 | 3.1663974 |
| Greece | 11 | 1 | 0.3140718 |
| Greece | 11 | 2 | 0.4401574 |
| Greece | 11 | 3 | 0.6072472 |
| Greece | 11 | 4 | 0.5059134 |
| Hong Kong | 15 | 1 | 0.3781684 |
| Hong Kong | 15 | 2 | 0.5150965 |
| Hong Kong | 15 | 3 | -229.0729738 |
| Hong Kong | 15 | 4 | -879.5376414 |
| Indonesia | 3 | 1 | 0.0432824 |
| Indonesia | 3 | 2 | 0.2506530 |
| Indonesia | 3 | 3 | 0.1641388 |
| Indonesia | 3 | 4 | 0.4576649 |
| Ireland | 12 | 1 | 0.4166084 |
| Ireland | 12 | 2 | 0.4783923 |
| Ireland | 12 | 3 | 1.4803708 |
| Ireland | 12 | 4 | 0.6129137 |
| Israel | 14 | 1 | 0.6131932 |
| Israel | 14 | 2 | 0.5049116 |
| Israel | 14 | 3 | 2.5171947 |
| Israel | 14 | 4 | 2.1567210 |
| Italy | 19 | 1 | 0.5907437 |
| Italy | 19 | 2 | 0.5122213 |
| Italy | 19 | 3 | 0.6419316 |
| Italy | 19 | 4 | 3.1452732 |
| Japan | 21 | 1 | 0.6049210 |
| Japan | 21 | 2 | 0.6502130 |
| Japan | 21 | 3 | 4.2923043 |
| Japan | 21 | 4 | 100.5984017 |
| Netherlands | 24 | 1 | 0.7933355 |
| Netherlands | 24 | 2 | 0.7513015 |
| Netherlands | 24 | 3 | 9.0914542 |
| Netherlands | 24 | 4 | 13.0978390 |
| New Zealand | 16 | 1 | 0.5850298 |
| New Zealand | 16 | 2 | 0.6197254 |
| New Zealand | 16 | 3 | 7.5203295 |
| New Zealand | 16 | 4 | 0.3673216 |
| Norway | 30 | 1 | 0.7816517 |
| Norway | 30 | 2 | 0.6199874 |
| Norway | 30 | 3 | 1.8129219 |
| Norway | 30 | 4 | 34.5985787 |
| Pakistan | 2 | 1 | 0.0394124 |
| Pakistan | 2 | 2 | 0.4867497 |
| Pakistan | 2 | 3 | 0.0975686 |
| Pakistan | 2 | 4 | 0.4731917 |
| Panama | 7 | 1 | 0.2279774 |
| Panama | 7 | 2 | 0.3224079 |
| Panama | 7 | 3 | 0.5834955 |
| Panama | 7 | 4 | 0.2973391 |
| Portugal | 9 | 1 | 0.1759864 |
| Portugal | 9 | 2 | 0.2971070 |
| Portugal | 9 | 3 | -0.3833130 |
| Portugal | 9 | 4 | 1.6397757 |
| Singapore | 18 | 1 | 0.4873306 |
| Singapore | 18 | 2 | 0.3209652 |
| Singapore | 18 | 3 | -25.4922493 |
| Singapore | 18 | 4 | 795.1006524 |
| Spain | 13 | 1 | 0.4172726 |
| Spain | 13 | 2 | 0.5194890 |
| Spain | 13 | 3 | 0.2365766 |
| Spain | 13 | 4 | 1.0176692 |
| Sri Lanka | 4 | 1 | 0.0344433 |
| Sri Lanka | 4 | 2 | 0.1259789 |
| Sri Lanka | 4 | 3 | 0.2300838 |
| Sri Lanka | 4 | 4 | 0.7949096 |
| Sweden | 29 | 1 | 0.7270576 |
| Sweden | 29 | 2 | 0.9445322 |
| Sweden | 29 | 3 | 0.9073509 |
| Sweden | 29 | 4 | 7.6468612 |
| Switzerland | 31 | 1 | 0.9317447 |
| Switzerland | 31 | 2 | 0.6079722 |
| Switzerland | 31 | 3 | 3.7425295 |
| Switzerland | 31 | 4 | 3.3350218 |
| Thailand | 5 | 1 | 0.0489020 |
| Thailand | 5 | 2 | 0.3929541 |
| Thailand | 5 | 3 | 0.3002516 |
| Thailand | 5 | 4 | 16.9392348 |
| Trinidad | 23 | 1 | 0.4483440 |
| Trinidad | 23 | 2 | 0.4193396 |
| Trinidad | 23 | 3 | -0.9042060 |
| Trinidad | 23 | 4 | 4.6219780 |
| UK | 20 | 1 | 0.6332355 |
| UK | 20 | 2 | 0.8159872 |
| UK | 20 | 3 | 1.4765402 |
| UK | 20 | 4 | 2.2422499 |
| USA | 33 | 1 | 1.0000000 |
| USA | 33 | 2 | 1.0000000 |
| USA | 33 | 3 | 1.0000000 |
| USA | 33 | 4 | 1.0000000 |
| Uruguay | 10 | 1 | 0.2029693 |
| Uruguay | 10 | 2 | 0.4060566 |
| Uruguay | 10 | 3 | 0.5709917 |
| Uruguay | 10 | 4 | 0.0984165 |
| West Germany | 27 | 1 | 0.7691833 |
| West Germany | 27 | 2 | 0.6629313 |
| West Germany | 27 | 3 | 1.0541740 |
| West Germany | 27 | 4 | 6.8647780 |
| Yugoslavia | 8 | 1 | 0.1997569 |
| Yugoslavia | 8 | 2 | 0.2985477 |
| Yugoslavia | 8 | 3 | 0.3189656 |
| Yugoslavia | 8 | 4 | 0.6397429 |