Learn R Programming

micEconCES (version 1.0-2)

cesEst: Estimate a CES function

Description

Estimate a Constant-Elasticity-of-Substitution (CES) function with two exogenous variables or a nested Constant-Elasticity-of-Substitution (CES) function proposed by Sato (1967) with three or four exogenous variables by Least Squares. The functional forms are shown in the documentation of function cesCalc.

Warning: The econometric estimation of a CES function is (almost) always very problematic, because very different parameter vectors could result in very similar values of the objective function (sum of squared residuals). Hence, even if the optimizer reports that the nonlinear minimization has converged, there might be another rather different parameter vector that results in a lower sum of squared residuals.

Usage

cesEst( yName, xNames, data, tName = NULL, vrs = FALSE, method = "LM",
   start = NULL, lower = NULL, upper = NULL, multErr = FALSE,
   rho1 = NULL, rho2, rho = NULL, returnGridAll = FALSE, 
   returnGrad = FALSE, random.seed = 123,
   rhoApprox = c( y = 5e-6, gamma = 5e-6, delta = 5e-6, 
      rho = 1e-3, nu = 5e-6 ),
   checkStart = TRUE, ... )

# S3 method for cesEst print( x, digits = max(3, getOption("digits") - 3), ... )

Value

cesEst returns a list of class cesEst

that has following components:

coefficients

estimated coefficients/parameters of the CES (including a possible fixed \(\rho\)).

ela

constant elasticity/elasticities of substitution.

iter

number of iterations (only for non-linear least-squares estimations).

convergence

logical value indicating if the non-linear estimation has converged (only for non-linear least-squares estimations with solvers that have a convergence criterion).

message

additional information from the optimizer (only if a message was returned by optim or nls.lm.

vcov

approximate covariance matrix of the estimated parameters calculated from the parameters of the linearized model by the Delta method (only if argument method is "Kmenta").

cov.unscaled

unscaled covariance matrix of the estimated parameters (including a possible fixed \(\rho\)), i.e. the inverse of the cross-product of the gradient matrix evaluated at the estimated parameters.

fitted.values

the fitted values (\(\hat{y}\)).

residuals

the residuals (i.e. \(y - \hat{y}\) if argument multErr is FALSE (the default), and \(log( y ) - log( \hat{y} )\) if argument multErr is TRUE).

rss

the sum of the squared residuals (i.e. the value of the objective function of the non-linear least-squares estimation evaluated at the estimated parameters).

call

the matched call.

method

argument method.

multErr

argument multErr.

start

starting values for the non-linear estimation (not for the Kmenta and DE method).

lower

lower bounds of the parameters.

upper

upper bounds of the parameters.

rho

argument rho.

nls.lm

object returned by nls.lm (only if argument method is "LM").

optim

object returned by optim (only if argument method is "NM", "Nelder-Mead", "BFGS", "CG", "L-BFGS-B", or "SANN")).

nlm

object returned by nlm (only if argument method is "Newton").

nlminb

object returned by nlminb (only if argument method is "PORT").

DEoptim

object returned by DEoptim (only if argument method is "DE").

translog

estimation results of the (unrestricted) translog model returned by translogEst (only if argument method is "Kmenta").

kmenta

estimation results of the Kmenta approximation (a restricted translog model) returned by systemfit (only if argument method is "Kmenta").

testKmenta

test of the restrictions implied by the Kmenta approximation (including constant returns to scale if argument vrs is FALSE) in the unrestricted translog model returned by linear.hypothesis (only if argument method is "Kmenta").

allRhoSum

data frame with summary results of the estimations with all values of \(\rho\) used in the grid search (only if a grid search was performed); this data frame has follwing columns: rho = the value of \(\rho\), rss = the corresponding sum of squared residuals, and (if appropriate for the method used for the estimation) convergence = logical value indicating whether the estimation converged.

allRhoFull

list of estimation results returned by cesEst for all values of \(\rho\) used in the grid search (only if a grid search was performed and argument returnGridAll is set to TRUE).

rho1Values,rho2Values,rhoValues

numeric vectors giving the values that are used in the grid search for the coefficients \(\rho_1\) and \(\rho\), respectively (only if a grid search was performed).

rssArray

matrix or array of the RSS values obtained by a two-dimensional or three-dimensional grid search for the coefficients \(\rho_1\) (first dimension, e.g. rows of a matrix), \(\rho_2\), and \(\rho\) (last dimension, e.g. columns of a matrix) (only if a two-dimensional or threedimensional grid search was performed).

grad

matrix with the gradients of the dependent variable (i.e., \(y\) if argument multErr is FALSE and \(\log(y)\) if argument multErr is TRUE) with respect to the parameters evaluated at the estimated parameters (only if argument returnGrad is set to TRUE).

Arguments

yName

a string containing the name of the dependent variable.

xNames

a vector of two, three or four character strings containing the names of the independent variables.

data

data frame containing the data.

tName

optional character string specifying the name of the time variable (\(t\)).

vrs

logical. Allow for variable returns to scale?

method

character string indicationg the estimation method: either "Kmenta" for the Kmenta approximation or "LM", "NM", "Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN", "Newton", "PORT", or "DE" for non-linear least-squares (see section ‘Details’).

start

optional numeric vector giving the starting values of the parameters in the non-linear estimations (see section ‘Details’).

lower

lower bounds of the parameters (see section ‘Details’).

upper

upper bounds of the parameters (see section ‘Details’).

multErr

logical. If TRUE, the error term is assumed to be multiplicative, i.e. \(y = \hat{y} \cdot exp( \epsilon )\). If FALSE (the default), the error term is assumed to be additive, i.e. \(y = \hat{y} + \epsilon\).

rho1,rho2,rho

numeric scalar or vector at which the coefficients \(\rho_1\), \(\rho_2\), and/or \(\rho\) should be fixed; if argument rho1, rho2, or rho is NULL (default), this coefficient is estimated together with the other parameters; if these arguments have more than one element, a grid search for \(\rho_1\), \(\rho_2\), and/or \(\rho\) is performed (see section ‘Details’).

returnGridAll

logical value that indicates whether the estimates for all values of \(\rho\) obtained during the grid search (not just the estimations with the ‘best’ \(\rho\)) should be returned (ignored if argument rho is NULL or has only a single element).

returnGrad

logical value that indicates whether a matrix with the gradients of the dependent variable (i.e., \(y\) if argument multErr is FALSE and \(\log(y)\) if argument multErr is TRUE) with respect to the parameters (evaluated at the estimated parameters) should be returned.

random.seed

an integer used to seed R's random number generator. This is to ensure replicability when the "SANN" or "DE" method is used. Defaults to 123.

rhoApprox

numeric vector with exactly 5 elements; the endogenous variable of the CES and the derivatives with respect to its coefficients are calculated using a first-order Taylor series approximation at \(\rho=0\) (non-nested CES) or by interpolation between \(\rho\), \(\rho_1\), or \(\rho_2\) equal to zero and \(\rho\), \(\rho_1\), or \(\rho_2\) equal to \(\pm\)rhoApprox (nested CES), if the absolute value of the coefficients \(\rho\), \(\rho_1\), or \(\rho_2\) is smaller than or equal to the corresponding element of this argument (see also argument rhoApprox of cesCalc); the first element determines the threshold for calculating the endogenous variable; the second element determines the threshold for calculating the derivatives with respect to \(\gamma\); the third element determines the threshold for calculating the derivatives with respect to \(\delta_1\), \(\delta_2\), and \(\delta\); the fourth element determines the threshold for calculating the derivatives with respect to \(\rho\), \(\rho_1\), and \(\rho_2\); the fifth element determines the threshold for calculating the derivatives with respect to \(\nu\).

checkStart

logical. If TRUE (the default), it is checked whether the starting values are in the expected ranges for a production function.

x

an object of class cesEst.

digits

number of digits.

...

further arguments to cesEst are passed to optim, nls.lm, nlm, nlminb, or DEoptim; further arguments to print.cesEst are currently ignored.

Author

Arne Henningsen and Geraldine Henningsen

Details

Estimation method
Argument method determines the estimation method. If it is "Kmenta", the CES is estimated by ordinary least squares using the Kmenta approximation; otherwise, it is estimated by non-linear least-squares. Several different optimizers can be used for the non-linear estimation. The optimization method LM (Levenberg-Marquardt, see Moré 1978) uses nls.lm for the optimization. The optimization methods NM or Nelder-Mead (Nelder and Mead 1965), BFGS (Broyden 1970, Fletcher 1970, Goldfarb 1970, Shanno 1970), CG (Conjugate Gradients based on Fletcher and Reeves 1964), L-BFGS-B (with box-constraints, Byrd, Lu, Nocedal, and Zhu 1995), and SANN (Simulated Annealing, Bélisle 1992) use optim for the optimization. The optimization method Newton (Newton-type, see Dennis and Schnabel 1983 and Schnabel, Koontz, and Weiss 1985) uses nlm for the optimization. The optimization method PORT (PORT routines, see Gay 1990) uses nlminb for the optimization. The optimization method DE (Differential Evolution, see Storn and Price 1997) uses DEoptim for the optimization. Analytical gradients are used in the LM, BFGS, CG, L-BFGS-B, Newton, and PORT method.

Starting values
Argument start should be a numeric vector. The order must be as described in the documentation of argument coef of function cesCalc. However, names of the elements are ignored. If argument start is NULL, pre-defined starting values are used. The starting value of \(\lambda\) (if present) is set to 0.015; the starting values of \(\delta_1\), \(\delta_2\), and \(\delta\) (if present) are set to 0.5, the starting values of \(\rho_1\), \(\rho_2\), and \(\rho\) (if present and required) are set to 0.25 (i.e.\ elasticity of substitution = 0.8 in the two-input case), the starting value of \(\nu\) (if present) is set to 1, and the starting value of \(\gamma\) is set to a value so that the mean of the error term is zero. Hence, in case of an additive error term (i.e. argument multErr is set to FALSE, the default) \(\gamma\) is set to mean( y ) / mean( CES( X, start1 ) ) and in case of a multiplicative error term (i.e. argument multErr is set to TRUE) \(\gamma\) is set to mean( log( y ) ) - mean( log( CES( X, start1 ) ) ), where y is the dependent variable (defined by argument yName), X is the set of covariates (defined by arguments xNames and tName), CES() defines the (nested) CES function, and start1 is a coefficient vector with \(\gamma = 1\) and all other coefficients having the starting values described above.

Lower and upper bounds
Arguments lower and upper can be used to set lower and upper bounds for the estimated parameters. If these arguments are -Inf and Inf, respectively, the parameters are estimated without unconstraints. By default, arguments lower and upper are both NULL, which means that the bounds are set automatically depending on the estimation method: In case of the L-BFGS-B, PORT, and DE method, the lower bound is 0 for \(\gamma\), \(\delta_1\), \(\delta_2\), and \(\delta\) (if present), -1 for \(\rho_1\), \(\rho_2\), and \(\rho\) (if present), and eventually 0 for \(\nu\). In case of the L-BFGS-B and PORT method, the upper bound is infinity for \(\gamma\), 1 for \(\delta_1\), \(\delta_2\), and \(\delta\) (if present), infinity for \(\rho_1\), \(\rho_2\), and \(\rho\) (if present), and eventually infinity for \(\nu\). Since the ‘Differential Evulation’ algorithm requires finit bounds, the upper bounds for the DE method are set to 1e10 for \(\gamma\), 1 for \(\delta_1\), \(\delta_2\), and \(\delta\) (if present), 10 for \(\rho_1\), \(\rho_2\), and \(\rho\) (if present), and eventually 10 for \(\nu\). In case of all other estimation methods, the lower and upper bounds are set to -Inf and Inf, respectively, because these methods do not support parameter constraints. Of course, the user can specify own lower and upper bounds by setting arguments lower and upper to numeric vectors that should have the same format as argument start (see above).

Grid search for \(\rho\)
If arguments rho1, rho2, and/or rho have more than one element, a one-dimensional, two-dimensional, or three-dimensionsl grid search for \(\rho_1\), \(\rho_2\), and/or \(\rho\) is performed. The remaining (free) parameters of the CES are estimated by least-squares, where \(\rho_1\), \(\rho_2\), and/or \(\rho\) are fixed consecutively at each value defined in arguments rho1, rho2, and rho, respectively. Finally the estimation with the \(\rho_1\), \(\rho_2\), and/or \(\rho\) that results in the smallest sum of squared residuals is chosen (and returned).

Random numbers
The ‘state’ (or ‘seed’) of R's random number generator is saved at the beginning of the cesEst function and restored at the end of this function so that this function does not affect the generation of random numbers although the random seed is set to argument random.seed and the ‘SANN’ and ‘DE’ algorithms use random numbers.

References

Bélisle, C.J.P. (1992): Convergence theorems for a class of simulated annealing algorithms on Rd, Journal of Applied Probability 29, p. 885-895.

Broyden, C.G. (1970): The Convergence of a Class of Double-rank Minimization Algorithms, Journal of the Institute of Mathematics and Its Applications 6, p. 76-90.

Byrd, R.H., Lu, P., Nocedal, J. and Zhu, C. (1995): A limited memory algorithm for bound constrained optimization, SIAM J. Scientific Computing 16, p. 1190-1208.

Dennis, J.E. and Schnabel, R.B. (1983): Numerical Methods for Unconstrained Optimization and Nonlinear Equations, Prentice-Hall, Englewood Cliffs, NJ.

Fletcher, R. (1970): A New Approach to Variable Metric Algorithms, Computer Journal 13, p. 317-322.

Fletcher, R. and Reeves, C.M. (1964): Function minimization by conjugate gradients, Computer Journal 7, p. 148-154.

Gay, D.M. (1990): Usage Summary for Selected Optimization Routines, Computing Science Technical Report No. 153, AT&T Bell Laboratories, Murray Hill NJ.

Goldfarb, D. (1970): A Family of Variable Metric Updates Derived by Variational Means, Mathematics of Computation 24, p. 23-26.

Moré, J.J. (1978): The Levenberg-Marquardt algorithm: implementation and theory, in G.A. Watson (Ed.), Lecture Notes in Mathematics 630: Numerical Analysis, pp. 105-116, Springer-Verlag: Berlin.

Nelder, J.A. and Mead, R. (1965): A simplex algorithm for function minimization, Computer Journal 7, p. 308-313.

Schnabel, R.B., Koontz, J.E. and Weiss, B.E. (1985): A modular system of algorithms for unconstrained minimization, ACM Trans. Math. Software, 11, pp. 419-440.

Shanno, D.F. (1970): Conditioning of Quasi-Newton Methods for Function Minimization, Mathematics of Computation 24, p. 647-656.

Storn, R. and Price, K. (1997): Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces, Journal of Global Optimization, 11(4), p. 341-359.

See Also

summary.cesEst for the summary method, plot.cesEst for plotting the results of the grid search for \(\rho\), coef.cesEst for several further methods, cesCalc for calculations or simulations with the CES, translogEst for estimating translog functions, and quadFuncEst for estimating quadratic functions.

Examples

Run this code
   data( germanFarms, package = "micEcon" )
   # output quantity:
   germanFarms$qOutput <- germanFarms$vOutput / germanFarms$pOutput
   # quantity of intermediate inputs
   germanFarms$qVarInput <- germanFarms$vVarInput / germanFarms$pVarInput


   ## CES: Land & Labor (Levenberg-Marquardt algorithm)
   cesLandLabor <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms )

   # variable returns to scale, increased max. number of iter. (LM algorithm)
   cesLandLaborVrs <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      vrs = TRUE, control = nls.lm.control( maxiter = 1000 ) )

   # using the Nelder-Mead optimization method
   cesLandLaborNm <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      method = "NM" )

   # using the BFGS optimization method
   cesLandLaborBfgs <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      method = "BFGS" )

   # using the L-BFGS-B optimization method with constrained parameters
   cesLandLaborBfgsCon <- cesEst( "qOutput", c( "land", "qLabor" ),
      germanFarms, method = "L-BFGS-B" )

   # using the CG optimization method
   cesLandLaborSann <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      method = "CG" )

   # using the SANN optimization method
   # (with decreased number of iteration to decrease execution time)
   cesLandLaborSann <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      method = "SANN", control = list( maxit = 1000 ) )

   # using the Kmenta approximation
   cesLandLaborKmenta <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      method = "Kmenta" )

   # using the PORT optimization routine with unconstrained parameters
   cesLandLaborPortCon <- cesEst( "qOutput", c( "land", "qLabor" ),
      germanFarms, vrs = TRUE, method = "PORT", lower = -Inf, upper = Inf )

   # using the PORT optimization routine with constrained parameters and VRS
   cesLandLaborPortCon <- cesEst( "qOutput", c( "land", "qLabor" ),
      germanFarms, vrs = TRUE, method = "PORT" )

   # using the Differential Evolution optimization method
   # (with decreased number of iteration to decrease execution time)
   cesLandLaborDe <- cesEst( "qOutput", c( "land", "qLabor" ), germanFarms,
      method = "DE", control = DEoptim.control( itermax = 50 ) )

   ## estimation with a grid search for rho (using the LM algorithm)
   cesLandInt <- cesEst( "qOutput", c( "land", "qLabor" ),
      data = germanFarms, rho = seq( from = -0.6, to = 0.9, by = 0.3 ) )

Run the code above in your browser using DataLab