-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path08-appendix.qmd
294 lines (237 loc) · 14.7 KB
/
08-appendix.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
## Appendix {#sec-appendix-hse .unnumbered .appendix}
```{=tex}
% \setupappendix
\setcounter{equation}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{section}{1} %since we are inside the appendix section
\renewcommand\thesection{\Alph{section}}
\renewcommand\theequation{\thesection.\arabic{equation}}
\renewcommand\thefigure{\thesection.\arabic{figure}}
\renewcommand\thetable{\thesection.\arabic{table}}
```
### Derivation of the housing supply function {#sec-hs-appendix}
A competitive developer combines a fixed amount of land $\overline{T}$ and non-land inputs $K$, which I simply call capital, to produce housing $H$ via a Cobb-Douglas technology:
$$
H = H(A, \overline{T}, K) = A \overline{T}^{\alpha} K^{1-\alpha},
$$ {#eq-cobb-appendix}
where $\alpha \in (0, 1)$. $A$ captures supply heterogeneity across parcels due to local labor costs, productivity, geography, or ease of construction differences. For simplicity, the district index $i$ and parcel identifier $l$ are dropped. Note that $K$ captures a composite of all inputs for housing production other than land, which can broadly be labor and materials.
A representative builder maximizes profit by choosing capital $K$ over a fixed parcel of land $\overline{T}$
$$
\begin{aligned}
\Pi &= P(x) \cdot H - P^T \cdot \overline{T} - P^K\cdot K\\
&=P(x)\cdot H - R - K,
\end{aligned}
$$
where $R$ denotes the endogenous price of land of size $\overline{T}$, and $P^K$ is the price of capital assumed to be invariant across parcels and locations and normalized to unity. Note that although capital $K$ is the only variable factor, hence the total capital cost is given by $C(H(K)) = P^K\cdot K = K$ represents the total variable cost. I assume that the total capital cost also includes labor costs and fixed development costs such as development permits and land preparation costs. Thus it captures more than just the variable cost of capital, i.e., all other non-land costs.
The price of a unit of housing developed on a parcel of size $\overline{T}$ is given by $P$ and depends on $x$, a vector of observed or unobserved parcel or location characteristics that reflect the demand for housing on the parcel, and may for example include measures of accessibility to public goods and local amenities. However, these characteristics are assumed to be uncorrelated with the level of capital investment $K$ [@combes_etal_2021].
Since land is fixed, the builder chooses capital to maximize profit. Therefore, the builder's profit maximization delivers the factor demand for capital $K$.
$$
\begin{aligned}
&\frac{\partial \Pi}{\partial K} = P(x) \frac{\partial H}{\partial K} - 1 = 0\\
&\implies P(x) \frac{(1-\alpha) A \overline{T}^\alpha}{K^\alpha} = 1 \\
&\implies K^* = \Bigl((1-\alpha)AP(x)\Bigr)^{\frac{1}{\alpha}}\overline{T}\equiv K^*(P(x), \overline{T}, A)
\end{aligned}
$$
By substituting the factor demand equation for capital back into the housing production function, I can then define the per parcel supply function as follows:
$$
\begin{aligned}
H(K^*(P(x), \overline{T}, A)) &= A \overline{T}^\alpha_i \left(K^*(P(x), \overline{T}, A)\right)^{1-\alpha}\\
&= A \overline{T}^\alpha \left(\Bigl((1-\alpha)AP(x)\Bigr)^{\frac{1}{\alpha}}\overline{T}\right)^{1-\alpha}\\
&=\underbrace{(1-\alpha)^{\frac{1-\alpha}{\alpha}}}_{\mu}A^{\frac{1}{\alpha}}{P(x)}^{\frac{1-\alpha}{\alpha}}\overline{T}\\
&=\mu A^{\frac{1}{\alpha}}{P(x)}^{\frac{1-\alpha}{\alpha}}\overline{T} \equiv H^S(P(x), A)
\end{aligned}
$$
In log-linear form,
$$
\begin{aligned}
\ln H^S(P(x), A, \overline{T}) &= \ln \mu + \frac{1}{\alpha}\ln A + \underbrace{\Bigl(\frac{1-\alpha}{\alpha}\Bigr)}_{\varepsilon}\ln P(x) + \ln \overline{T}.
\end{aligned}
$$ {#eq-hs-appendix}
Thus, the supply of housing developed on a parcel depends on local supply heterogeneity $A$, local housing demand conditions captured by $P(x)$, and the size of the parcel $\overline{T}$.
Following @baum-snow_han_2019, to get the total housing supply at the district level, I aggregate the housing supply on a parcel in @eq-hs-appendix over all developed parcels in the district. Denoting the total (developable) land endowment of district $i$ by $\mathcal{L}_{i}$ and the fraction of partitioned parcels that are developed in $i$ by $\Lambda_i (P_i)$, then the stock of developed land in $i$ is defined as $\mathcal{T}(P_i) = \Lambda_i(P_i) \cdot \mathcal{L}_{i}$. Then, the implicit **district-level aggregate housing supply function** $S_i(P_i(x))$ can be defined as the product of (average) **housing supply per parcel** and the **stock of developed land:**
$$
\begin{aligned}
S_i(P_i) = H_i^S(P_i, A_i)\cdot \mathcal{T}_{i}(P_i)\\
\ln S_i(P_i) = \Bigl[\ln \mu_i + \frac{1}{\alpha}\ln A_i + \varepsilon\ln P_i \Bigr]+ \Bigl[\ln\Lambda_i(P_i) + \ln\mathcal{L_i}\Bigr]
\end{aligned}
$$ {#eq-agg-hs-appendix}
Now I can derive the housing supply elasticity,
$$
\begin{aligned}
\varepsilon^S_{i} \equiv \frac{\partial \ln S_{i}\left(P_{i}\right)}{\partial \ln P_{i}}&=\frac{d \ln H^S_{i}\left(P_{i}\right)}{\partial \ln P_{i}}+ \frac{\partial \ln \mathcal{T}_{i}\left(P_{i}\right)}{\partial \ln P_{i}} \\
&= \varepsilon + \frac{\partial \ln\Lambda_i(P_i)}{\partial \ln P_i},
\end{aligned}
$$ {#eq-elasticity-appendix}
where the first term captures the intensive margin of development (floorspace per parcel) and the second reflects the extensive margin (parcel development).
```{r, setup-Appendix, ref.label=c("results-setup", "global-opts", "results-imports-data")}
# reusing code with the same chunk labels
knitr::opts_chunk$set(cache = FALSE)
```
### Additional tables and figures
This section includes extra tables and figures that support the main findings of the paper. The main results focus on all types of houses including single-family homes. Here, I show results specifically for single-family homes, including OLS, first-stage, and IV results. Additionally, the housing supply elasticity estimates for permits and completions are included. Permits and completions are commonly used as proxies for housing supply in research (for example, see @lerbs_2014).
<!-- #### Tables -->
<!-- ```{r}
#| label: tbl-first-stage-results-checked
#| output: asis
cat(readLines('output/first-stage-results_checked.tex'))
``` -->
{{< include output/first-stage-results_checked.qmd >}}
<!-- ```{r}
#| label: tbl-2sls-results-permits-completions
#| output: asis
#| eval: false
cat(readLines('output/iv-main-results_Permits_checked.tex'))
cat(readLines("output/iv-main-results_Completions_checked.tex"))
``` -->
{{< include output/iv-main-results_Permits_checked.qmd >}}
{{< include output/iv-main-results_Completions_checked.qmd >}}
<!-- ```{r}
#| label: tbl-ols-results-single-family-homes
#| output: asis
cat(readLines('output/OLS-results_single-family_checked.tex'))
``` -->
{{< include output/OLS-results_single-family_checked.qmd >}}
<!-- ```{r}
#| label: tbl-2sls-results-single-family-homes
#| output: asis
cat(readLines("output/iv-results_single-family_checked.tex"))
cat(readLines("output/iv-results_Permits_single-family_checked.tex"))
cat(readLines("output/iv-results_Completions_single-family_checked.tex"))
``` -->
{{< include output/iv-results_single-family_checked.qmd >}}
{{< include output/iv-results_Permits_single-family_checked.qmd >}}
{{< include output/iv-results_Completions_single-family_checked.qmd >}}
<!-- #### Figures -->
```{r}
#| label: fig-quantity-growth
#| fig-cap: "The total building stock in Germany (annual change).<<<*Notes:* This figure shows the total building flow (annual change in stock) in Germany in the 2008-2019 period. The house type category \"all\" captures all house types, including \"single-family\" homes. The data are obtained from @atlasde_2022.>>>"
#| fig-width: 6
#| fig-height: 4
## "total building stock in Germany (annual change)"
.scale = 1e-3
agg_de[, .(year, `all` = buildings, `single-family` = single_fam)] |>
melt(measure.vars = c("all", "single-family"), id.vars = "year") |>
_[, .(year, value = value - shift(value)), variable] |>
subset(year != 2011) |>
ggplot(aes(year, .scale * value, color = variable)) +
geom_line(lwd = 1.05, lty = "dotted") +
geom_point(size = 2) +
labs(x = "Year", y = bquote(plain(Delta * H) ~ ~ (.(1 / .scale)))) +
scale_x_continuous(breaks = year_breaks) +
scale_color_manual("Buildings", values = mycols) +
theme_cowplot(font_size - 2) +
theme(legend.position = c(0.03, 0.9), axis.text.y = element_text(angle = 90))
```
```{r price-variation, fig.dim=c(6,4)}
#| label: fig-price-variation
#| fig-width: 6
#| fig-height: 4
#| fig-cap: "The house price variability across districts in Germany.<<<*Notes:* This figure shows the house price variation across districts in Germany over time. The house price variation is measured by the standard deviation of $\\ln P$ across districts yearly. The house type category \"all\" captures all house types, including \"single-family\" homes. The data are obtained from @rwi_redhk_2020.>>>"
## "Price variation across districts over time"
reshape(in_levels[, .(did, year, ln_hpi, ln_hpi_single_fam)],
dir = "long", idvar = c("did", "year"),
varying = (c("ln_hpi", "ln_hpi_single_fam")),
timevar = "house_type",
times = c("all", "single-family"),
v.names = "ln_hpi",
sep = ""
)[, .(sd_lnp = sd(ln_hpi)), .(year, house_type)] |>
ggplot(aes(year, sd_lnp, color = house_type)) +
geom_point(size = 2) +
geom_line() +
scale_x_continuous(breaks = year_breaks) +
scale_color_manual(
name = "House type", values = mycols,
labels = c("all", "single-family")
) +
labs(x = "Year", y = expression(sd(ln~P))) +
theme_cowplot(font_size - 2) +
theme(legend.position = c(.6, .3))
```
```{r}
#| label: fig-developed-fraction-histogram
#| fig-width: 6
#| fig-height: 3
#| fig-cap: "Land development in rural vs urban districts.<<<*Notes:* This figure shows the difference in the land development intensity between the urban and rural districts for 2006 and 2018. The land development is higher in the urban districts, as expected, as they have a higher population density and more developed land.>>>"
## "Land development in rural vs urban districts"
constraints_long |>
ggplot() +
geom_histogram(aes(dev_frac, fill = as.factor(year)),
binwidth = 0.1, position = "dodge2"
) +
scale_fill_manual(values = mycols) +
labs(x = "developed fraction", fill = NULL) +
facet_wrap(~urban_rural, scales = "free",
labeller = labeller(urban_rural=\(x) paste(panel_label(x),"districts"))) +
theme_cowplot(8) +
theme(
legend.position = c(0.8, 0.95),
strip.background=element_blank(),
strip.text = element_text(face = "bold"),
legend.key.size = unit(6, "pt"),
axis.text.y = element_text(angle = 90, hjust = 0.5)
) +
guides(fill = guide_legend(nrow = 1L))
```
```{r}
#| label: fig-developed-fraction-growth
#| fig-width: 6
#| fig-height: 3
#| fig-cap: "The distribution of land development growth: 2006-2018.<<<*Notes:* This figure shows the distribution of the growth of land development for urban and rural districts over the 2006-2018 period. Land development growth is higher in rural districts, partly because the rural districts had lower land development and more developable land in 2006 than the urban districts.>>>"
## "Distribution of land development growth: 2006-2018"
main[, .(did, urban_rural, west_east,
dev_frac = dev_frac_2018 / dev_frac_2006 - 1,
unavail_frac = unavail_frac_2018 / unavail_frac_2006 - 1
)] |>
ggplot() +
geom_histogram(aes(100 * dev_frac), color='white', binwidth = 5) +
scale_fill_manual(values = mycols) +
facet_wrap(~urban_rural, scales = 'free',
labeller = labeller(urban_rural=\(x) paste(panel_label(x),"districts"))) +
labs(x = "Change in developed fraction (%)", color=NULL, fill = NULL) +
theme_cowplot(font_size - 2) +
theme(
legend.position = 'none',
legend.key.size = unit(5, "pt"),
strip.background = element_blank()
) +
guides(color=guide_legend(nrow=1))
```
```{r}
#| label: fig-predicted-vs-actual-labor-demand-shock
#| fig-width: 6
#| fig-height: 4
#| fig-cap: "Correlation between the predicted and the actual employment growth.<<<*Notes:* The figure compares the labor demand shock predicted from local employment (the Bartik instrument) to the actual employment growth. The labor demand shock on the x-axis helps identify the price elasticity of housing supply in the study. Employment data are sourced from @atlasde_2022.>>>"
## "Predicted (i.e. the Bartik instrument) vs actual employment growth"
main[, .(x = bartik, y = dln_emp_act)] |>
ggplot(aes(x, y)) +
geom_point(color = "blue4", alpha = 0.25) +
geom_smooth(method = "lm", formula = y ~ x, color = "firebrick") +
labs(x = expression(widehat(Delta * ln * L)), y = expression(Delta * ln * L)) +
theme_cowplot(font_size - 2)
```
```{r}
#| label: fig-developable-land
#| out-width: 95%
#| fig-cap: "Developable land in Germany.<<<*Notes:* This figure shows the distribution of developable land in Germany. The developable land comprises the area covered by agriculture, forests, or artificial surfaces (see @sec-constraints). Areas covered with artificial surfaces are part of the developable stock as they can be redeveloped through renovation or demolition. The data are extracted from Corine Land Cover (CLC) Germany, compiled by the [German Remote Sensing Data Center (DFD) of DLR](https://www.dlr.de/eoc/en/desktopdefault.aspx/tabid-11882/20871_read-48836) and the [Federal Agency for Cartography and Geodesy (BKG)](https://www.bkg.bund.de).>>>"
# source('script/visualization/viz_elev-slope-undev.R')
include_graphics("output/figs/developable-land.png")
```
```{r}
#| label: fig-undevelopable-land
#| fig-cap: "Undevelopable land.<<<*Notes:* This figure shows the distribution of undevelopable land in Germany. The undevelopable land comprises wetlands and water bodies (see @sec-constraints). The data are extracted from Corine Land Cover (CLC) Germany, compiled by the [German Remote Sensing Data Center (DFD) of DLR](https://www.dlr.de/eoc/en/desktopdefault.aspx/tabid-11882/20871_read-48836) and the [Federal Agency for Cartography and Geodesy (BKG)](https://www.bkg.bund.de).>>>"
include_graphics("output/figs/undevelopable-land.png")
```
```{r}
#| label: fig-developed-land
#| out-width: 95%
#| fig-cap: "Developed land.<<<*Notes:* This figure shows the distribution of developed land in Germany. The developed land comprises areas already covered with artificial surfaces such as buildings. The data are extracted from Corine Land Cover (CLC) Germany, compiled by the [German Remote Sensing Data Center (DFD) of DLR](https://www.dlr.de/eoc/en/desktopdefault.aspx/tabid-11882/20871_read-48836) and the [Federal Agency for Cartography and Geodesy (BKG)](https://www.bkg.bund.de).>>>"
include_graphics("output/figs/developed-land.png")
```
```{=tex}
%%%---end-of-chapter1---%%%
```
```{=tex}
% \end{bibunit}
```