{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial: CNLS_VRS model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Author : Sheng Dai (sheng.dai@aalto.fi)\n", "- Objective: Estimates a variable returns to scale (VRS) production function model and overall economic efficiency\n", "- Data : data genrate pprocess (DGP) \n", "- Date : April 16, 2020" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import CNLS_VRS\n", "import numpy as np\n", "import pandas as pd\n", "from cvxopt import matrix" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "## Generate data\n", "## Number of DMUs\n", "m = 50 \n", "\n", "## set seed\n", "np.random.seed(1)\n", "\n", "## x1~U[1,10]\n", "x1 = np.random.uniform(1, 10, m)\n", "\n", "## composite error term\n", "# v ~ N(0, 0.708^2)\n", "# u ~ |N(0, 1.174^2)|\n", "y = 3 + x1**0.5+np.log(x1)+np.random.normal(0,0.708,m)- abs(np.random.normal(0,1.174,m))\n", "\n", "x = np.asmatrix(x1).T" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Problem\n", " Name : \n", " Objective sense : min \n", " Type : QO (quadratic optimization problem)\n", " Constraints : 2550 \n", " Cones : 0 \n", " Scalar variables : 100 \n", " Matrix variables : 0 \n", " Integer variables : 0 \n", "\n", "Optimizer started.\n", "Quadratic to conic reformulation started.\n", "Quadratic to conic reformulation terminated. Time: 0.00 \n", "Presolve started.\n", "Linear dependency checker started.\n", "Linear dependency checker terminated.\n", "Eliminator started.\n", "Freed constraints in eliminator : 0\n", "Eliminator terminated.\n", "Eliminator - tries : 1 time : 0.00 \n", "Lin. dep. - tries : 1 time : 0.00 \n", "Lin. dep. - number : 0 \n", "Presolve terminated. Time: 0.03 \n", "Problem\n", " Name : \n", " Objective sense : min \n", " Type : QO (quadratic optimization problem)\n", " Constraints : 2550 \n", " Cones : 0 \n", " Scalar variables : 100 \n", " Matrix variables : 0 \n", " Integer variables : 0 \n", "\n", "Optimizer - threads : 4 \n", "Optimizer - solved problem : the dual \n", "Optimizer - Constraints : 98\n", "Optimizer - Cones : 1\n", "Optimizer - Scalar variables : 2501 conic : 52 \n", "Optimizer - Semi-definite variables: 0 scalarized : 0 \n", "Factor - setup time : 0.00 dense det. time : 0.00 \n", "Factor - ML order time : 0.00 GP order time : 0.00 \n", "Factor - nonzeros before factor : 3723 after factor : 4851 \n", "Factor - dense dim. : 0 flops : 3.47e+05 \n", "ITE PFEAS DFEAS GFEAS PRSTATUS POBJ DOBJ MU TIME \n", "0 2.9e-01 4.5e+00 2.4e+00 0.00e+00 1.414213562e+00 -1.414213562e+00 1.0e+00 0.06 \n", "1 2.4e-01 3.7e+00 2.2e+00 -1.02e+00 -4.080695441e-01 -2.761353534e+00 8.1e-01 0.13 \n", "2 1.7e-01 2.6e+00 1.8e+00 -1.01e+00 -1.741233265e+01 -1.871151540e+01 5.7e-01 0.13 \n", "3 9.2e-02 1.4e+00 1.3e+00 -9.47e-01 -1.194570164e+02 -1.183383705e+02 3.1e-01 0.14 \n", "4 4.1e-02 6.4e-01 5.2e-01 -5.01e-01 -4.725356534e+02 -4.707724196e+02 1.4e-01 0.14 \n", "5 1.6e-02 2.4e-01 3.8e-02 9.10e-01 -8.181615496e+02 -8.187962779e+02 5.4e-02 0.14 \n", "6 4.5e-03 7.0e-02 9.0e-03 1.82e+00 -9.130213708e+02 -9.130553918e+02 1.6e-02 0.14 \n", "7 1.3e-03 1.9e-02 1.2e-03 1.60e+00 -9.250573680e+02 -9.250625263e+02 4.3e-03 0.14 \n", "8 4.2e-04 6.5e-03 2.1e-04 1.32e+00 -9.274810401e+02 -9.274832970e+02 1.4e-03 0.16 \n", "9 1.9e-04 2.9e-03 5.7e-05 1.24e+00 -9.284172567e+02 -9.284183693e+02 6.5e-04 0.16 \n", "10 7.4e-05 1.1e-03 1.3e-05 1.11e+00 -9.290008344e+02 -9.290013073e+02 2.5e-04 0.16 \n", "11 3.6e-05 5.4e-04 4.4e-06 1.00e+00 -9.292523896e+02 -9.292526198e+02 1.2e-04 0.16 \n", "12 3.4e-05 4.4e-04 3.4e-06 8.01e-01 -9.293104083e+02 -9.293105971e+02 9.8e-05 0.16 \n", "13 2.6e-05 3.7e-04 2.4e-06 8.53e-01 -9.293448627e+02 -9.293450409e+02 8.2e-05 0.17 \n", "14 1.1e-05 1.6e-04 6.9e-07 8.70e-01 -9.294792535e+02 -9.294793327e+02 3.4e-05 0.17 \n", "15 7.7e-06 2.8e-05 5.1e-08 1.01e+00 -9.295628533e+02 -9.295628711e+02 6.6e-06 0.17 \n", "16 5.2e-07 2.0e-06 9.4e-10 1.00e+00 -9.295814766e+02 -9.295814778e+02 4.7e-07 0.17 \n", "17 3.0e-08 5.6e-08 3.5e-12 1.00e+00 -9.295827203e+02 -9.295827203e+02 1.3e-08 0.17 \n", "18 1.5e-07 2.8e-08 1.2e-12 1.00e+00 -9.295827380e+02 -9.295827380e+02 6.6e-09 0.19 \n", "Optimizer terminated. Time: 0.20 \n", "\n", "\n", "Interior-point solution summary\n", " Problem status : PRIMAL_AND_DUAL_FEASIBLE\n", " Solution status : OPTIMAL\n", " Primal. obj: -9.2958273937e+02 nrm: 2e+01 Viol. con: 6e-10 var: 0e+00 \n", " Dual. obj: -9.2958273588e+02 nrm: 3e+00 Viol. con: 2e-07 var: 4e-07 \n" ] } ], "source": [ "## calculate the VRS model; \n", "## call function cnls_vrs()\n", "res_cnls = CNLS_VRS.cnls_vrs(x, y, 'MOSEK')\n", "\n", "## results: yhat and beta\n", "yhat = res_cnls[:m]\n", "beta = res_cnls[m:2*m]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "## calculate the residuals (eps)\n", "eps = matrix(0.0, (m,1))\n", "for i in range(m):\n", " eps[i] = y[i] - yhat[i] " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "## calculate the constant term (alpha)\n", "alpha = matrix(0.0, (m,1))\n", "for i in range(m):\n", " alpha[i] = y[i] - eps[i] - beta[i] * x1[i]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "alpha = pd.DataFrame(alpha)\n", "beta = pd.DataFrame(beta)\n", "eps = pd.DataFrame(eps)\n", "\n", "results = pd.concat([alpha, beta, eps], axis=1) \n", "\n", "var_name = ['Alpha', 'Beta', 'Residual']\n", "\n", "results.columns = var_name" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Alpha Beta Residual\n", "0 3.208897 0.583749 0.049887\n", "1 7.116232 0.028273 -0.659485\n", "2 0.547997 2.607770 0.135045\n", "3 3.208887 0.583752 0.713273\n", "4 3.208873 0.583756 -0.776738\n", "5 3.208868 0.583759 0.402999\n", "6 3.208876 0.583755 1.881322\n", "7 3.208892 0.583750 0.031980\n", "8 3.208894 0.583750 -0.762829\n", "9 3.208903 0.583748 -0.284391\n", "10 3.208898 0.583749 -0.216973\n", "11 7.116193 0.028278 0.776131\n", "12 3.208879 0.583754 0.401088\n", "13 7.116256 0.028270 0.260459\n", "14 1.425137 1.904080 0.269726\n", "15 4.878045 0.346459 1.723684\n", "16 3.208897 0.583749 0.112253\n", "17 3.208904 0.583748 0.141324\n", "18 3.208872 0.583757 0.478789\n", "19 3.208878 0.583754 -0.828675\n", "20 7.116237 0.028272 -0.661174\n", "21 7.388173 0.000007 0.057953\n", "22 3.208889 0.583751 -0.577463\n", "23 7.116218 0.028275 0.563203\n", "24 7.116253 0.028270 0.522920\n", "25 7.116261 0.028269 0.378926\n", "26 3.208868 0.583759 0.547280\n", "27 2.826825 0.866441 1.054324\n", "28 3.208874 0.583756 -1.313305\n", "29 7.116256 0.028270 1.319340\n", "30 3.208869 0.583758 0.067427\n", "31 3.208898 0.583749 -0.470035\n", "32 7.336085 0.005421 0.911813\n", "33 3.208903 0.583748 -1.022282\n", "34 7.116215 0.028275 1.101307\n", "35 3.208890 0.583751 0.033710\n", "36 7.116200 0.028277 0.562021\n", "37 7.116238 0.028272 -0.766743\n", "38 0.548017 2.607754 -0.404788\n", "39 7.116234 0.028272 -0.770608\n", "40 7.388241 -0.000000 -0.331428\n", "41 7.116234 0.028272 -1.197453\n", "42 3.208882 0.583753 -1.086999\n", "43 7.116236 0.028272 -2.289350\n", "44 3.208870 0.583758 -1.416697\n", "45 3.208900 0.583748 0.902243\n", "46 7.116263 0.028269 -0.374577\n", "47 3.208885 0.583752 0.391937\n", "48 3.208884 0.583752 0.498519\n", "49 3.208871 0.583757 -0.078889\n" ] } ], "source": [ "## print estimates\n", "print(results)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }