Income Processes in Portfolio Choice Models (Standard Deviations and Variances)

Dear Robert,

I have encountered a few doubts I cannot fully resolve. Could you kindly confirm the following points regarding the settings used in models 31–35?

  1. Your setting: Params.sigma_u = 0.025 → This is the standard deviation of innovations to the risky asset.
    My setting: Params.sigma_u = 0.238 → I adopted this value following Fagereng, Gottlieb, and Guiso (2017), who report a standard deviation of 0.238 for this process.Is my setting correct if I intend to use a standard deviation of 0.238?
  2. Your setting: Params.sigma_epsilon_z = 0.03 → This governs the exogenous shock process.
    My setting: Params.sigma_epsilon_z = 0.023 → I used this value to target a labour income shock variance of 0.023.Is this correct, or should I instead set Params.sigma_epsilon_z = sqrt(0.023)? I compared this with your CGM (2005) code, where you take the square root of the variance. Using Params.sigma_epsilon_z = 0.023 instead of sqrt(0.023) make a substantial difference.

Could you please take look on these?

Thank you very much!

1 Like

For any shock, VFI Toolkit is going to convert the shock into a grid and probabilities, and then use these. So how exactly to interpret the parameter depends on how exactly you turn them into a grid.

u is a between-period i.i.d. shock. I am assuming you want it to be N(0,\sigma_u^2). If you use one of the “discretizeAR1” commands from VFI Toolkit (Tauchen, Rouwenhorst, Farmer-Toda) these all take the standard deviation of the innovations as an input. So, e.g., if you set Params.sigma_u=0.025 and the discretize using [u_grid,pi_u]=discretizeAR1_FarmerToda(0,0,Params.sigma_u,n_u); then because of how you input Params.sigma_u this will be acting as the standard deviation of the innovations, which for an AR(1) with autocorrelation of zero (the second input) is just the standard deviation of a normal distribution, here \sigma_u. [You also need to pi_u=pi_u(1,:)']. Notice the key to the interpretation of the parameter, is how you use it in the “discretizeAR1” command. If you open any of the discretizeAR1 commands the first bunch of lines are comments that explain exactly what is being discretized and how it relates to the inputs.

If you are discretizing a Markov z_t=\rho z_{t-1}+\epsilon_t, z\sim N(0,\sigma_{\epsilon,z}^2), and you use the command [z_grid,pi_z]=discretizeAR1_FarmerToda(0,Params.rho_z,Params.sigma_epsilon_z,n_z); then the interpretation is that Params.rho_z is the autocorrelation of z, \rho, and Params.sigma_epsilon_z is the standard deviation of the innovations to z, \sigma_{\epsilon,z}.

As you can see, to understand the interpretation of a parameter, what really matters is just look at how it relates exactly to what you input to the discretization commands.

VFI Toolkit harmonizes the inputs and their interpretations across all the discretization commands.

PS. The standard deviation of an AR(1) process, call it \sigma_z, is related to the standard deviation of the innovations, \sigma_{\epsilon,z}, by the formula \sigma_z=\frac{\sigma_{\epsilon,z}}{sqrt(1-\rho^2)}

2 Likes

I think it is now more or less clear to me.

Can you please take a look:

(1)

I set Params.sigma_u equal to a standard deviation of 0.238. Since Params.sigma_u in the toolkit acts as the standard deviation of the innovations, this is exactly what I want.

% Params.sigma_u = 0.238;

% IID process for stock return
[u_grid, pi_u] = discretizeAR1_FarmerToda(Params.rp, Params.rho_u, Params.sigma_u, n_u);
pi_u = pi_u(1,:)'; paste code here

(2)

I set Params.sigma_epsilon_z1 equal to a variance of 0.023. Since Params.sigma_epsilon_z1 in the toolkit acts as the standard deviation, I made a mistake here. I believe I should set Params.sigma_epsilon_z1 to the square root of 0.023, which is 0.152, if I want to use a variance of 0.023 in the toolkit.

% Persistent AR(1) process
Params.rho_z1 = 0.95;
Params.sigma_epsilon_z1 = 0.023;

% AR(1) process for labour income (z1)
[z1_grid, pi_z1] = discretizeAR1_FarmerToda(0, Params.rho_z1, Params.sigma_epsilon_z1, n_z(1));
z1_grid = exp(z1_grid); 
[mean_z1, ~, ~, ~] = MarkovChainMoments(z1_grid, pi_z1);
z1_grid = z1_grid ./ mean_z1;

I believe I made the same mistake here. I set Params.sigma_epsilon_e1 to a variance of 0.0738, but need to take square root of 0.0738 as toolkit understand 0.0738 as standard deviation of the innovation.

% Transitory IID normal process e1
Params.rho_e1 = 0;
Params.sigma_epsilon_e1 = 0.0738; % Implicitly, rho_z2 = 0

% IID shock 1: transitory labour income shock (e1)
[e1_grid, pi_e1] = discretizeAR1_FarmerToda(0, 0, Params.sigma_epsilon_e1, n_e(1));
e1_grid = exp(e1_grid);
pi_e1 = pi_e1(1,:)'; 
mean_e1 = pi_e1' * e1_grid; 
e1_grid = e1_grid ./ mean_e1; 

Do I now understand correctly that I actually need to take the square roots of 0.023 and 0.0738 to convert variances into standard deviations in case (2)?

Thank you very much!

PS. I need to refresh and deepen my knowledge of stochastic processes.

What you say sounds correct to me (that the ones you describe under (2) need the sqrt() as you explain).

1 Like

This will significantly change my results. However, correctness comes first. Thank you, Robert!

1 Like