Howdy. Other than the setup, this isn't really an R or RStudio question. But happy to help. It's been 8 years for me spending much time with Greene
The model setup by eq 10-40 is, I think:
costdata = read.csv(".../TableF10-2.csv")
# setup dependent vars for /delta_...
costdata = costdata %>%
mutate(
lnpkpm = log(Pk / Pm),
lnplpm = log(Pl / Pm),
lnpepm = log(Pe / Pm)
)
setup eq 10-40:
df_pooledreg <-
bind_rows(
tibble(
y = costdata$K,
k = 1,
l = 0,
e = 0,
kk = costdata$lnpkpm,
kl = costdata$lnplpm,
ke = costdata$lnpepm,
ll = 0,
le = 0,
ee = 0,
year = costdata$Year
),
tibble(
y = costdata$L,
k = 0,
l = 1,
e = 0,
kk = 0,
kl = costdata$lnpkpm,
ke = 0,
ll = costdata$lnplpm,
le = costdata$lnpepm,
ee = 0,
year = costdata$Year
),
tibble(
y = costdata$E,
k = 0,
l = 0,
e = 1,
kk = 0,
kl = 0,
ke = costdata$lnpkpm,
ll = 0,
le = costdata$lnplpm,
ee = costdata$lnpepm,
year = costdata$Year
)
)
run "The Pooled Model" eq 10-19 in Greene chapter 10.
Note, eq 10-19 doesn't have an intercept.
pooledreg = glm(
y ~ 0 + k + l + e + kk + kl + ke + ll +le + ee,
data = df_pooledreg
)
summary(pooledreg)
I get the following coefficients:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
k 0.056223 0.001888 29.773 < 2e-16 ***
l 0.253409 0.001852 136.834 < 2e-16 ***
e 0.041861 0.002291 18.272 < 2e-16 ***
kk 0.030426 0.008067 3.772 0.000349 ***
kl 0.001755 0.004556 0.385 0.701342
ke -0.003562 0.007481 -0.476 0.635562
ll 0.075127 0.005280 14.228 < 2e-16 ***
le 0.003252 0.005756 0.565 0.574043
ee 0.046777 0.017415 2.686 0.009136 **
---
Now, Table 10.4. The first line, Fitted shares is just:
fitted_k = predict(
pooledreg,
df_pooledreg %>% filter(year == 1959 & k)
)
fitted_l = predict(
pooledreg,
df_pooledreg %>% filter(year == 1959 & l)
)
fitted_e = predict(
pooledreg,
df_pooledreg %>% filter(year == 1959 & e)
)
# Note that assuming a constant returns to scale production function,
# `m` is just `1-(k+l+e) `
fitted_m = 1 - (fitted_k + fitted_l + fitted_e)
fitted_k: 0.05655583
fitted_l: 0.2747627
fitted_e: 0.04487152
fitted_m: 0.6238099
How do we estimate the derivatives involving Materials? i.e. those $/delta_{M...}$
? For that, turn to equation 10-38 (well, it's eq 10-38 in my Greene, 6th edition of econometric analysis anyway. they seem to be moving things around). That equation just says,
$\Sigma_{i=1}^M \delta_{ij} = 0$
and $\Sigma_{j=1}^M \delta_{ij} = 0$
.
Really simple, you can see this in table 10.4. It just says that $\delta_{KK} + $\delta_{KL} + $\delta_{KE} + $\delta_{KM} = 0
.
You'll notice in table 10.4 any derivative with an M
has an asterisks next to it, referring to eq 10-38.
Equation 10-39 gives the own and cross elasticities of substitution.
So with $\theta_{kk}$
for example, (/delta_{kk} + s_{i}(s_{i} - 1)) / s_{i}^2
, where i
is capital share's output in that year.
or with my estimates and your data:
s_k1959 = ((costdata %>% filter(Year == 1959)))$K
delta_kk = pooledreg$coefficients['kk'] %>% as.vector
(delta_kk + s_k1959 * (s_k1959 - 1)) / (s_k1959^2)
[1] -7.214395 # that's under "Implied Elasticities of Substitution, 1959" for Capital/Capital
And for cross price elasticity of substitution, eq 10-39 says
$\theta_{ij}$
is , (/delta_{ij} + s_{i} * s{j}) / (s_{i} * s_{j})
,
for example for $\theta_{KL}$
:
s_k1959 = ((costdata %>% filter(Year == 1959)))$K
s_l1959 = ((costdata %>% filter(Year == 1959)))$L
delta_kl = pooledreg$coefficients['kl'] %>% as.vector
(delta_kl + (s_k1959 * s_l1959)) / (s_k1959 * s_l1959)
[1] 1.103912 # this is our estimate for "Implied Elasticities of Substitution, 1959" for Labor/Capital
There are slight deviations. They might come from using an updated dataset...?