Permanent and Transitory Shocks in Capital Structure
NOTE: This page is intentionally heavily focused on the computational aspect of the problem.
Quick Introduction
One of my U of R projects has been research into dynamic capital structure, meaning how firms mix debt and equity. Firms make decisions about capital structure in the face of uncertainty. One of the sources of uncertainty they face comes in the form of the return on their investment. Firms transform investment into profits through their use of capital (raw materials, machines, and so forth), and the rate at which investment turns into profitability is called the firm’s productivity of capital.
For various reasons, the same amount of productivity can produce different amounts of profit in different periods. This can be due to some multiplier to the productivity function, a productivity shock, which can be either positive or negative, and examples exist for each (e.g. worker strikes, favorable weather, etc). The productivity shock process can be thought of as a process which evolves over time in a somewhat predictable manner.
In the academic finance literature, the productivity shock process is almost always thought of as a mean reverting process. This means that the process has some fundamental level and although at any given time may differ from that level, the firm expects that the shock will fluctuate around a known mean. My line of research breaks this assumption, and thinks of the firm as receiving a combination of mean-reverting shocks and permanent shocks. The difference between a mean-reverting (also called transitory) shock and a permanent shock has to do with the firm’s expectation about the future values of the shock. In a permanent shock, there is no expectation of mean reversion.
There are two main sections to this post. Section A bit more theory and math, and even a model contains a description of the model. Section How to solve talks about the solution and numerical methods used to find this example. Since this forum is not strictly academic, I am freely mixing methods, explanations, and code. I think that this may be useful, as often papers, even one that use complex solution methods, describe the entirety of these methods with a tiny appendix. By describing my solution methods in detail, it
- Helps me clarify my understanding
- Allows other people to find any errors in my logic or code
- Helps others in their own work
Some theory
Capital structure refers to how firms utilize both debt and capital to fund investment. Firms work to maximize the sum of present and expected future value of equity value. They make investments, and can fund them by issuing corporate debt, or issuing equity. The decision to do this is complicated and is influenced by many factors including the current and expected future value of capital.
Assume that your profit is given by equation where
is productivity,
is capital stock, and
is the curvature of the production function. The general style of these productions are called Cobb-Douglas production functions. I am interested in the dynamics of
.
is a stochastic process where at each time
it takes a value
.
is typically assumed to follow an autoregressive process of type AR(1). An equation for an AR(1) process
is:
where the 1 refers to the 1-period lag on the right side of the equation. is the autoregressive coefficient. AR(1) processes are by definition mean-reverting, meaning that over time,
will approach some mean value.
Firms in reality receive shocks to their productivity from a variety of sources – changes in legislation, technology, relations with suppliers and labor, etc, and the nature of these shocks differ with regard to their expected permanence or transience. E.g., a new technology may be seen as a permanent shock while a supply chain concern or labor dispute may be more transient in nature. An AR(1) process is by definition transient when the autoregressive parameter is less than one, and thus using this process as part of a model of firm production assumes that all shocks are of the latter type. A permanent shock looks like:
How to solve
After reading or skimming the above section, you may be thinking “that’s great. How do I solve it?”. That is the purpose of this section.
Grids
The first step is to stop and think about what “solving the model” means in this context. From a perspective of a firm that wants to maximize its equity value, a solution to this model means that for any current state () of the firm and any combination of permanent and transitory shocks (
), the firm understands how to adjust its debt and capital levels such that the response maximizes their current plus expected future equity value. Said succinctly, for any state of the world, what is the value-maximizing choice?
One way to go about solving these models is to make enumerate the states. Say for example, firm capital stock could take values 5,10, or 15. Lets refer to this as the K-grid (or in math notation). Similarly, let debt be 2 or 4, the P-grid. To get the possible states, we take the Cartesian product of the grids. Let
refer to any element of set
, the Cartesian product.
| s# | K | P |
|---|---|---|
| 0 | 5 | 2 |
| 1 | 5 | 4 |
| 2 | 10 | 2 |
| 3 | 10 | 4 |
| 4 | 15 | 2 |
| 5 | 15 | 4 |
Thus, we have 6 states, labeled to
. Thinking back to the model, we have quantities suck as debt
that depend on both the current and 1-period future (alternatively, previous and current) choices of debt. To evaluate these and all of the other intertemporal equations, it quickly becomes clear that we need to evaluate these choices for every combination of
.
We can do this with 4 different matrices.
k
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 5 | 5 | 5 | 5 | 5 | 5 |
| 1 | 5 | 5 | 5 | 5 | 5 | 5 |
| 2 | 10 | 10 | 10 | 10 | 10 | 10 |
| 3 | 10 | 10 | 10 | 10 | 10 | 10 |
| 4 | 15 | 15 | 15 | 15 | 15 | 15 |
| 5 | 15 | 15 | 15 | 15 | 15 | 15 |
k prime
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 5 | 5 | 10 | 10 | 15 | 15 |
| 1 | 5 | 5 | 10 | 10 | 15 | 15 |
| 2 | 5 | 5 | 10 | 10 | 15 | 15 |
| 3 | 5 | 5 | 10 | 10 | 15 | 15 |
| 4 | 5 | 5 | 10 | 10 | 15 | 15 |
| 5 | 5 | 5 | 10 | 10 | 15 | 15 |
p
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 2 | 2 | 2 | 2 | 2 | 2 |
| 1 | 4 | 4 | 4 | 4 | 4 | 4 |
| 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 3 | 4 | 4 | 4 | 4 | 4 | 4 |
| 4 | 2 | 2 | 2 | 2 | 2 | 2 |
| 5 | 4 | 4 | 4 | 4 | 4 | 4 |
p prime
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 2 | 4 | 2 | 4 | 2 | 4 |
| 1 | 2 | 4 | 2 | 4 | 2 | 4 |
| 2 | 2 | 4 | 2 | 4 | 2 | 4 |
| 3 | 2 | 4 | 2 | 4 | 2 | 4 |
| 4 | 2 | 4 | 2 | 4 | 2 | 4 |
| 5 | 2 | 4 | 2 | 4 | 2 | 4 |
Let index time the rows and
index the columns of these matrices. Then, each
combination refers to the idea of being in state
and choosing state
. And, to get a function of these variables, we can do this in C++:
int Nstates = 6; for(int i = 0; i < Nstates; i++) { for(int j = 0; j < Nstates; j++) { value[i][j] = some_function(k[i][j], k_prime[i][j], p[i][j], p_prime[i][j]); } }
My grid for , denoted
, has 71 points, whereas my grid for
has 29 points. Thus, there are 71*29 = 2059 combinations of current
and current
, and an equal amount of future
and future
. Thus, a
matrix can describe the combinations of current and futures states. However, a firm must also consider the shock. I am using a grid of
points for my transient shock and
points for permanent shock. For each
matrix, I need to evaluate the Bellman equation for
shocks. This leads to a
over which I must iterate to get the solution to my model.
Solving the Model
Before getting into the mechanics of solving the model, it is important to clarify what the solution looks like. The question I am trying to answer is How will the firm adjust its debt and capital levels in the face of uncertainty in the productivity shock? The answer to this question is a policy function which, for any combination of the state of the firm and possible shock gives the optimal response.
Lets define some terminology.
- control variables / control states: variables that firm can control, in this case debt and capital. Call this state
where
has
elements and
has
elements, and
is the Cartesian product operator, yielding every possible combination of the set elements..
- shock states: exogenous shocks to the system. In this case the permanent and transitory shocks. Let
denote a transitory shock and
denote a permanent shock. The entire state space is then
- policy function: a mapping between all control states, shock states, and decisions the firm can make. In math notation,
- value function: a mapping similar to the policy function, but rather than saying the optimal choice of
, it says the expected value of making that optimal choice
Value function iteration uses the contraction mapping theorem to find the value function. The algorithm works by starting with an initial guess (which can be simply random), iteratively improving the guess to find a fixed point, which under certain conditions is guaranteed to exist. The “contraction” part of contraction mapping means that every iteration leads closer to the fixed point. See HERE for a quick explanation, or these books for a long one.
Estimating the Model
After being able to solve the model for one set of parameters, an interesting question could be “What is the set of parameters that leads to simulated firms which behave closest to the actual firms?”. This general way of thinking is called “indirect inference” because the parameters are inferred indirectly through simulations based on a certain parameterization of the model. One particular technique for doing this is called simulated method of moments (SMM). The details of this are the subject of a future blog post.
Appendix: Software and Hardware
My software and hardware environment:
- My solver is written in highly optimized C++ code.
- Intel’s Math Kernel Library, which is optimized for Intel CPUs.
- Compiler: Intel icpc version 12.1.3 20120212
- Amazon’s cc2.8xlarge instance types. These feature the new Intel Sandy Bridge-EP Xeon processors with the Intel Advanced Vector Extensions, which allow computations on 256-bit wide registers (meaning matrix math SCREAMS on these boxes)
- For manipulating matrices, I use Eigen, a C++ templating library for matrix multiplication. I am using a new version of Eigen which links against MKL




